Index: XIOS/dev/dev_trunk_graph/src/array_new.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/array_new.hpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/array_new.hpp	(revision 2137)
@@ -7,9 +7,4 @@
 #include "buffer_out.hpp"
 #include "message.hpp"
-#include "tv_data_display.h"
-#ifdef __GNUC__
-#include <typeinfo>
-#include <cxxabi.h>
-#endif
 #include <cmath>
 
@@ -22,10 +17,5 @@
   class CArray ;
 
- template <typename T_numtype,int N_rank>
- int TV_ttf_display_type ( const CArray<T_numtype, N_rank>* array ) ;
 }
-
-template <typename T_numtype,int N_rank>
-int TV_ttf_display_type ( const xios::CArray<T_numtype, N_rank>* array ) ;
 
 namespace xios
@@ -36,8 +26,5 @@
     private:
       bool initialized;
-      void inc_symbol(void)
-      {
-        TV_ttf_display_type(this);
-      }
+
     public:
       typedef typename Array<T_numtype,N_rank>::T_default_storage T_default_storage;
@@ -46,251 +33,205 @@
       template<typename T_expr> explicit CArray(_bz_ArrayExpr<T_expr> expr)
         : Array<T_numtype,N_rank>(expr)
-        , initialized(true)
-      { bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol(); }
+        , initialized(true) {  }
 
       CArray(GeneralArrayStorage<N_rank> storage = T_default_storage())
         : Array<T_numtype,N_rank>(storage)
-        , initialized(false)
-      { bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(false) { }
 
       explicit CArray(int length0, GeneralArrayStorage<N_rank> storage = T_default_storage())
         : Array<T_numtype,N_rank>(length0, storage)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) { }
 
       CArray(int length0, int length1, GeneralArrayStorage<N_rank> storage = T_default_storage())
         : Array<T_numtype,N_rank>(length0, length1, storage)
-        , initialized(true)
-      { bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) { }
 
       CArray(int length0, int length1, int length2, GeneralArrayStorage<N_rank> storage = T_default_storage())
         : Array<T_numtype,N_rank>(length0, length1, length2, storage)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) { }
 
       CArray(int length0, int length1, int length2, int length3, GeneralArrayStorage<N_rank> storage = T_default_storage())
         : Array<T_numtype,N_rank>(length0, length1, length2, length3, storage)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) { }
 
       CArray(int length0, int length1, int length2, int length3, int length4, GeneralArrayStorage<N_rank> storage = T_default_storage())
         : Array<T_numtype,N_rank>(length0,length1, length2, length3, length4, storage)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) { }
 
       CArray(int length0, int length1, int length2, int length3, int length4, int length5, GeneralArrayStorage<N_rank> storage = T_default_storage())
         : Array<T_numtype,N_rank>(length0, length1, length2, length3, length4, length5, storage)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) { }
 
       CArray(int length0, int length1, int length2, int length3, int length4, int length5, int length6, GeneralArrayStorage<N_rank> storage = T_default_storage())
         : Array<T_numtype,N_rank>(length0, length1, length2, length3, length4, length5, length6, storage)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) { }
 
       CArray(int length0, int length1, int length2, int length3, int length4, int length5, int length6, int length7,
              GeneralArrayStorage<N_rank> storage = T_default_storage())
         : Array<T_numtype,N_rank>(length0, length1, length2, length3, length4, length5, length6, length7, storage)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) { }
 
       CArray(int length0, int length1, int length2, int length3, int length4, int length5, int length6,
              int length7, int length8, GeneralArrayStorage<N_rank> storage = T_default_storage())
        : Array<T_numtype,N_rank>(length0, length1, length2, length3, length4, length5, length6, length7, length8, storage)
-       , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+       , initialized(true) { }
 
       CArray(int length0, int length1, int length2, int length3, int length4,
              int length5, int length6, int length7, int length8, int length9, GeneralArrayStorage<N_rank> storage = T_default_storage())
         : Array<T_numtype,N_rank>(length0, length1, length2, length3, length4, length5, length6, length7, length8, length9, storage)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) { }
 
       CArray(int length0, int length1, int length2, int length3, int length4, int length5, int length6,
              int length7, int length8, int length9, int length10, GeneralArrayStorage<N_rank> storage = T_default_storage())
        : Array<T_numtype,N_rank>(length0, length1, length2, length3, length4, length5, length6, length7, length8, length9, length10, storage)
-       , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+       , initialized(true) { }
 
       CArray(T_numtype* restrict dataFirst, TinyVector<int, N_rank> shape, GeneralArrayStorage<N_rank> storage = T_default_storage())
         : Array<T_numtype,N_rank>(dataFirst, shape, storage)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) { }
 
       CArray(T_numtype* restrict dataFirst, TinyVector<int, N_rank> shape, TinyVector<diffType, N_rank> stride,
              GeneralArrayStorage<N_rank> storage = T_default_storage())
         : Array<T_numtype,N_rank>(dataFirst, shape, stride, storage)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) { }
 
       CArray(T_numtype* restrict dataFirst, TinyVector<int, N_rank> shape, preexistingMemoryPolicy deletionPolicy,
             GeneralArrayStorage<N_rank> storage = T_default_storage())
         : Array<T_numtype,N_rank>(dataFirst, shape, deletionPolicy, storage)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) { }
 
       CArray(T_numtype* restrict dataFirst, TinyVector<int, N_rank> shape, TinyVector<diffType, N_rank> stride,
              preexistingMemoryPolicy deletionPolicy, GeneralArrayStorage<N_rank> storage = T_default_storage())
         : Array<T_numtype,N_rank>(dataFirst, shape, stride, deletionPolicy, storage)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) { }
 
       CArray(const TinyVector<int, N_rank>& extent, GeneralArrayStorage<N_rank> storage = T_default_storage())
         : Array<T_numtype,N_rank>(extent, storage)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) { }
 
       CArray(const TinyVector<int, N_rank>& lbounds, const TinyVector<int, N_rank>& extent,
              const GeneralArrayStorage<N_rank>& storage)
         : Array<T_numtype,N_rank>(lbounds, extent, storage)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) { }
 
       CArray(Range r0, GeneralArrayStorage<N_rank> storage = T_default_storage())
         : Array<T_numtype,N_rank>(r0, storage)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) { }
 
       CArray(Range r0, Range r1, GeneralArrayStorage<N_rank> storage = T_default_storage())
         : Array<T_numtype,N_rank>(r0, r1, storage)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) { }
 
       CArray(Range r0, Range r1, Range r2, GeneralArrayStorage<N_rank> storage = T_default_storage())
         : Array<T_numtype,N_rank>(r0, r1, r2, storage)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) { }
 
       CArray(Range r0, Range r1, Range r2, Range r3, GeneralArrayStorage<N_rank> storage = T_default_storage())
         : Array<T_numtype,N_rank>(r0, r1, r2, r3, storage)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) { }
 
       CArray(Range r0, Range r1, Range r2, Range r3, Range r4, GeneralArrayStorage<N_rank> storage = T_default_storage())
         : Array<T_numtype,N_rank>(r0, r1, r2, r3, r4, storage)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) { }
 
       CArray(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, GeneralArrayStorage<N_rank> storage = T_default_storage())
         : Array<T_numtype,N_rank>(r0, r1, r2, r3, r4, r5, storage)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) { }
 
       CArray(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, Range r6,
              GeneralArrayStorage<N_rank> storage = T_default_storage())
         : Array<T_numtype,N_rank>(r0, r1, r2, r3, r4, r5, r6, storage)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) { }
 
       CArray(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, Range r6, Range r7,
              GeneralArrayStorage<N_rank> storage = T_default_storage())
         : Array<T_numtype,N_rank>(r0, r1, r2, r3, r4, r5, r6, r7, storage)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) { }
 
       CArray(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5,
              Range r6, Range r7, Range r8, GeneralArrayStorage<N_rank> storage = T_default_storage())
         : Array<T_numtype,N_rank>(r0, r1, r2, r3, r4, r5, r6, r7, r8, storage)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) { }
 
       CArray(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5,
              Range r6, Range r7, Range r8, Range r9, GeneralArrayStorage<N_rank> storage = T_default_storage())
         : Array<T_numtype,N_rank>(r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, storage)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) { }
 
       CArray(Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, Range r6, Range r7,
              Range r8, Range r9, Range r10, GeneralArrayStorage<N_rank> storage = T_default_storage())
         : Array<T_numtype,N_rank>(r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, storage)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) {  }
 
       CArray(const CArray<T_numtype, N_rank>& array)
         : Array<T_numtype,N_rank>(array)
-        , initialized(array.initialized)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(array.initialized) { }
 
       CArray(const Array<T_numtype, N_rank>& array)
         : Array<T_numtype,N_rank>(array)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) { }
 
       CArray(const TinyVector<int,N_rank-1>& shape, int lastExtent, const GeneralArrayStorage<N_rank>& storage)
         : Array<T_numtype,N_rank>(shape, lastExtent, storage)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) { }
 
       CArray(Array<T_numtype, N_rank>& array, Range r0)
         : Array<T_numtype,N_rank>(array, r0)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) { }
 
       CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1)
         : Array<T_numtype,N_rank>(array, r0, r1)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) { }
 
       CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2)
         : Array<T_numtype,N_rank>( array, r0, r1, r2)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) { }
 
       CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2, Range r3)
         : Array<T_numtype,N_rank>(array, r0, r1, r2, r3)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) { }
 
       CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2,
              Range r3, Range r4)
         : Array<T_numtype,N_rank>(array, r0, r1, r2, r3,  r4)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) {  }
 
       CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2,
              Range r3, Range r4, Range r5)
         : Array<T_numtype,N_rank>( array, r0, r1, r2, r3, r4, r5)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) {  }
 
       CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2, Range r3,
              Range r4, Range r5, Range r6)
         : Array<T_numtype,N_rank>( array, r0, r1, r2, r3, r4, r5, r6)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) {  }
 
       CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2, Range r3, Range r4,
              Range r5, Range r6, Range r7)
         : Array<T_numtype,N_rank>(array, r0, r1, r2, r3, r4, r5, r6, r7)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) {  }
 
       CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2, Range r3, Range r4, Range r5,
              Range r6, Range r7, Range r8)
         : Array<T_numtype,N_rank>(array, r0, r1, r2, r3, r4, r5, r6, r7, r8)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) {  }
 
       CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2, Range r3, Range r4, Range r5,
              Range r6, Range r7, Range r8, Range r9)
         : Array<T_numtype,N_rank>(array, r0, r1, r2, r3, r4, r5, r6, r7, r8, r9)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) {  }
 
       CArray(Array<T_numtype, N_rank>& array, Range r0, Range r1, Range r2, Range r3, Range r4, Range r5, Range r6,
              Range r7, Range r8, Range r9, Range r10)
         : Array<T_numtype,N_rank>(array, r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) {  }
 
       CArray(Array<T_numtype, N_rank>& array, const RectDomain<N_rank>& subdomain)
         : Array<T_numtype,N_rank>(array, subdomain)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) {  }
 
       CArray(Array<T_numtype, N_rank>& array, const StridedDomain<N_rank>& subdomain)
         : Array<T_numtype,N_rank>(array, subdomain)
-        , initialized(true)
-      {bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol();}
+        , initialized(true) {  }
 
       template<int N_rank2, typename R0, typename R1, typename R2, typename R3, typename R4, typename R5,
@@ -299,5 +240,5 @@
         : Array<T_numtype,N_rank>(array, r0,r1, r2, r3, r4, r5, r6, r7, r8, r9, r10)
         , initialized(true)
-      { bool neverTrue ; neverTrue=false ; bool neverTrue ; neverTrue=false ; if(neverTrue) inc_symbol(); }
+      {    }
 
       virtual ~CArray() {}
@@ -569,46 +510,5 @@
       virtual std::vector<T_numtype> getVector(void) { return vector<T_numtype>(this->dataFirst(),this->dataFirst()+this->numElements()) ;}
       static size_t size(sizeType numElements) { return (N_rank + 1) * sizeof(int) + sizeof(size_t) + numElements * sizeof(T_numtype); }
-      
-      static int show_TV_ttf_display_type ( const CArray<T_numtype,N_rank>* array )
-      {
-        int status ;
-        if (array->isEmpty()) 
-        {
-          status = TV_ttf_add_row("State", TV_ttf_type_ascii_string,"(empty)") ;
-          if (status != TV_ttf_ec_ok) return TV_ttf_format_raw ;
-          else return TV_ttf_format_ok_elide ;
-        }
-        else 
-        {
-          char tname[128] ;
-          char bname[128] = "value_type" ;
-#ifdef __GNUC__
-         size_t size = sizeof(bname) ;
-         abi::__cxa_demangle(typeid(T_numtype).name(), bname, &size, &status) ;
-         if (status !=0) return TV_ttf_format_raw ;
-#endif
-          int dim = array->dimensions() ;
-          if (dim==1) snprintf (tname, sizeof(tname), "%s[%d]", bname, array->extent(0));
-          if (dim==2) snprintf (tname, sizeof(tname), "%s[%d][%d]", bname, array->extent(1), array->extent(0));
-          if (dim==3) snprintf (tname, sizeof(tname), "%s[%d][%d][%d]", bname, array->extent(2), array->extent(1), array->extent(3));
-          if (dim==4) snprintf (tname, sizeof(tname), "%s[%d][%d][%d][%d]", bname, array->extent(0), array->extent(1), array->extent(2), array->extent(3));
-          if (dim==5) snprintf (tname, sizeof(tname), "%s[%d][%d][%d][%d][%d]", bname, array->extent(4), array->extent(3), array->extent(2), array->extent(1)
-                                                                                      ,array->extent(0));
-          if (dim==6) snprintf (tname, sizeof(tname), "%s[%d][%d][%d][%d][%d][%d]", bname, array->extent(5), array->extent(4), array->extent(3), array->extent(2)
-                                                                                      ,array->extent(1),array->extent(0));
-          if (dim==7) snprintf (tname, sizeof(tname), "%s[%d][%d][%d][%d][%d][%d][%d]", bname, array->extent(6), array->extent(5), array->extent(4), array->extent(3)
-                                                                                      ,array->extent(2),array->extent(1),array->extent(0));
-          status = TV_ttf_add_row("array_values", tname, array->dataFirst()) ;
-          if (status != TV_ttf_ec_ok) return TV_ttf_format_raw ;
-          else return TV_ttf_format_ok ;
-        }
-      }
-      
-
-      static int TV_ttf_display_type ( const CArray<T_numtype,N_rank>* array )
-      {
-        return show_TV_ttf_display_type (array) ;
-      }
-      
+    
       virtual CBaseType* clone(void) const { return new CArray(*this); }
 
@@ -642,30 +542,4 @@
 
   };
-
-
-#define macrotyperank(_TYPE_,_RANK_)\
-  template<> int CArray<_TYPE_,_RANK_>::TV_ttf_display_type( const CArray<_TYPE_,_RANK_>* array ) \
-  {\
-    return show_TV_ttf_display_type (array) ;\
-  }
-
-#define macrotype(_TYPE_)\
-macrotyperank(_TYPE_,1)\
-macrotyperank(_TYPE_,2)\
-macrotyperank(_TYPE_,3)\
-macrotyperank(_TYPE_,4)\
-macrotyperank(_TYPE_,5)\
-macrotyperank(_TYPE_,6)\
-macrotyperank(_TYPE_,7)
-
-macrotype(double)
-macrotype(int)
-macrotype(bool)
-macrotype(size_t)
-macrotype(float)
-macrotype(string)
-
-#undef macrotyperank
-#undef macrotype
 
 
Index: XIOS/dev/dev_trunk_graph/src/attribute_array.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/attribute_array.hpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/attribute_array.hpp	(revision 2137)
@@ -66,45 +66,4 @@
             virtual void generateFortranInterfaceGetDeclaration(ostream& oss,const string& className) ;
  
- static int show_TV_ttf_display_type ( const CAttributeArray<T_numtype,N_rank>* array )
-      {
-        int status ;
-        if (array->isEmpty()) 
-        {
-          status = TV_ttf_add_row("State", TV_ttf_type_ascii_string,"(empty)") ;
-          if (status != TV_ttf_ec_ok) return TV_ttf_format_raw ;
-          else return TV_ttf_format_ok_elide ;
-        }
-        else 
-        {
-          char tname[128] ;
-          char bname[128] = "value_type" ;
-#ifdef __GNUC__
-         size_t size = sizeof(bname) ;
-         abi::__cxa_demangle(typeid(T_numtype).name(), bname, &size, &status) ;
-         if (status !=0) return TV_ttf_format_raw ;
-#endif
-          int dim = array->dimensions() ;
-          if (dim==1) snprintf (tname, sizeof(tname), "%s[%d]", bname, array->extent(0));
-          if (dim==2) snprintf (tname, sizeof(tname), "%s[%d][%d]", bname, array->extent(1), array->extent(0));
-          if (dim==3) snprintf (tname, sizeof(tname), "%s[%d][%d][%d]", bname, array->extent(2), array->extent(1), array->extent(3));
-          if (dim==4) snprintf (tname, sizeof(tname), "%s[%d][%d][%d][%d]", bname, array->extent(0), array->extent(1), array->extent(2), array->extent(3));
-          if (dim==5) snprintf (tname, sizeof(tname), "%s[%d][%d][%d][%d][%d]", bname, array->extent(4), array->extent(3), array->extent(2), array->extent(1)
-                                                                                      ,array->extent(0));
-          if (dim==6) snprintf (tname, sizeof(tname), "%s[%d][%d][%d][%d][%d][%d]", bname, array->extent(5), array->extent(4), array->extent(3), array->extent(2)
-                                                                                      ,array->extent(1),array->extent(0));
-          if (dim==7) snprintf (tname, sizeof(tname), "%s[%d][%d][%d][%d][%d][%d][%d]", bname, array->extent(6), array->extent(5), array->extent(4), array->extent(3)
-                                                                                      ,array->extent(2),array->extent(1),array->extent(0));
-          status = TV_ttf_add_row("array_values", tname, array->dataFirst()) ;
-          if (status != TV_ttf_ec_ok) return TV_ttf_format_raw ;
-          else return TV_ttf_format_ok ;
-        }
-      }
-      
-            
-            static int TV_ttf_display_type ( const  CAttributeArray<T_numtype,N_rank>* array )
-           {
-             return CAttributeArray<T_numtype,N_rank>::show_TV_ttf_display_type (array) ;
-           }
-
          private :
           bool isEqual_(const CAttributeArray& attr);
@@ -119,28 +78,4 @@
 
 
-#define macrotyperank(_TYPE_,_RANK_)\
-  template<> int CAttributeArray<_TYPE_,_RANK_>::TV_ttf_display_type(const CAttributeArray<_TYPE_,_RANK_>* array ) \
-  {\
-    return CAttributeArray<_TYPE_,_RANK_>::show_TV_ttf_display_type (array) ;\
-  }
-
-#define macrotype(_TYPE_)\
-macrotyperank(_TYPE_,1)\
-macrotyperank(_TYPE_,2)\
-macrotyperank(_TYPE_,3)\
-macrotyperank(_TYPE_,4)\
-macrotyperank(_TYPE_,5)\
-macrotyperank(_TYPE_,6)\
-macrotyperank(_TYPE_,7)
-
-macrotype(double)
-macrotype(int)
-macrotype(bool)
-macrotype(size_t)
-macrotype(float)
-macrotype(string)
-
-#undef macrotyperank
-#undef macrotype
 } // namespace xios
 
Index: XIOS/dev/dev_trunk_graph/src/attribute_array_decl.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/attribute_array_decl.cpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/attribute_array_decl.cpp	(revision 2137)
@@ -19,3 +19,4 @@
   template class CAttributeArray<StdString,1> ;
   template class CAttributeArray<StdString,2> ;
+
 }
Index: XIOS/dev/dev_trunk_graph/src/attribute_array_impl.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/attribute_array_impl.hpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/attribute_array_impl.hpp	(revision 2137)
@@ -14,5 +14,5 @@
       CAttributeArray<T_numtype, N_rank>::CAttributeArray(const StdString & id)
          : CAttribute(id)
-      { bool alwaysFalse ; alwaysFalse=false ; if (alwaysFalse) TV_ttf_display_type(this); }
+      {  }
 
       template <typename T_numtype, int N_rank>
@@ -20,5 +20,4 @@
          : CAttribute(id)
       {
-         bool alwaysFalse ; alwaysFalse=false ; if (alwaysFalse) TV_ttf_display_type(this);
          this->setValue(value);
       }
@@ -28,5 +27,4 @@
          : CAttribute(id)
       {
-         bool alwaysFalse ; alwaysFalse=false ; if (alwaysFalse) TV_ttf_display_type(this);
          umap.insert(umap.end(), std::make_pair(id, this));
       }
@@ -37,5 +35,4 @@
          : CAttribute(id)
       {
-         bool alwaysFalse ; alwaysFalse=false ; if (alwaysFalse) TV_ttf_display_type(this);
          this->setValue(value);
          umap.insert(umap.end(), std::make_pair(id, this));
Index: XIOS/dev/dev_trunk_graph/src/attribute_enum_impl.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/attribute_enum_impl.hpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/attribute_enum_impl.hpp	(revision 2137)
@@ -10,5 +10,5 @@
 namespace xios
 {
-  /// ////////////////////// Definitions ////////////////////// ///
+  /// ////////////////////// Définitions ////////////////////// ///
   template <class T>
   CAttributeEnum<T>::CAttributeEnum(const StdString & id)
Index: XIOS/dev/dev_trunk_graph/src/attribute_template.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/attribute_template.hpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/attribute_template.hpp	(revision 2137)
@@ -12,10 +12,4 @@
 #include "buffer_out.hpp"
 #include "type.hpp"
-#include "tv_data_display.h"
-
-#ifdef __GNUC__
-#include <typeinfo>
-#include <cxxabi.h>
-#endif
 
 namespace xios
@@ -43,4 +37,6 @@
             CAttributeTemplate(const StdString & id, const ValueType & value,
                                xios_map<StdString, CAttribute*> & umap);
+//            CAttributeTemplate(const CAttribute & attribut) throw (CException);
+//            CAttributeTemplate(const CAttribute * const attribut); // Not implemented.
 
           public :
@@ -48,4 +44,5 @@
             /// Accesseur ///
             ValueType getValue(void) const;
+//            ValueType* getRef(void) ;
 
             /// Mutateurs ///
@@ -74,5 +71,7 @@
             virtual StdString toString(void) const { return _toString();}
             virtual void fromString(const StdString & str) { if (str==resetInheritanceStr) { reset(); _canInherite=false ;}  else _fromString(str);}
-
+//            virtual CAttributeTemplate* clone() const {}
+//            virtual void toBinary  (StdOStream & os) const;
+//            virtual void fromBinary(StdIStream & is);
             virtual StdString dump(void) const { return _dump();}
             virtual StdString dumpGraph(void) const { return _dumpGraph();}
@@ -80,4 +79,5 @@
             virtual bool toBuffer  (CBufferOut& buffer) const { return _toBuffer(buffer);}
             virtual bool fromBuffer(CBufferIn& buffer) { return _fromBuffer(buffer); }
+//            virtual size_t size(void) const;
             virtual void generateCInterface(ostream& oss,const string& className) ;
             virtual void generateFortran2003Interface(ostream& oss,const string& className) ;
@@ -88,36 +88,7 @@
             virtual void generateFortranInterfaceGetBody_(ostream& oss,const string& className) ;
             virtual void generateFortranInterfaceGetDeclaration(ostream& oss,const string& className) ;
-
-           static int show_TV_ttf_display_type ( const CAttributeTemplate<T>* attr)
-           {
-             int status ;
-             if (attr->isEmpty()) 
-             {
-               status = TV_ttf_add_row("State", TV_ttf_type_ascii_string,"(empty)") ;
-               if (status != TV_ttf_ec_ok) return TV_ttf_format_raw ;
-               else return TV_ttf_format_ok_elide ;
-             }
-             else 
-             {
-               char tname[128] ;
-               char bname[128] = "ValueType" ;
-#ifdef __GNUC__
-               size_t size = sizeof(bname) ;
-               abi::__cxa_demangle(typeid(T).name(), bname, &size, &status) ;
-               if (status !=0) return TV_ttf_format_raw ;
-#endif
-               snprintf (tname, sizeof(tname), "%s", bname);
-               if (typeid(T)==typeid(string))
-                 status = TV_ttf_add_row("values", TV_ttf_type_ascii_string, ((string*)(attr->ptrValue))->c_str() );
-               else status = TV_ttf_add_row("values", tname, attr->ptrValue) ;
-               if (status != TV_ttf_ec_ok) return TV_ttf_format_raw ;
-               else return TV_ttf_format_ok_elide ;
-             }
-           }
-      
-           static int TV_ttf_display_type ( const CAttributeTemplate<T>* attr )
-           {
-             return show_TV_ttf_display_type (attr) ;
-           }
+//            virtual void generateFortranInterfaceIsDefinedDeclaration_(ostream& oss,const string& className) ;
+//            virtual void generateFortranInterfaceIsDefinedBody_(ostream& oss,const string& className) ;
+//            virtual void generateFortranInterfaceIsDefinedDeclaration(ostream& oss,const string& className) ;
 
 
@@ -138,17 +109,4 @@
       }; // class CAttribute
 
-#define macrotype(_TYPE_)\
-  template<> int CAttributeTemplate<_TYPE_>::TV_ttf_display_type( const CAttributeTemplate<_TYPE_>* attr ) \
-  {\
-    return show_TV_ttf_display_type (attr) ;\
-  }
-
-macrotype(double)
-macrotype(int)
-macrotype(bool)
-macrotype(string)
-//macrotype(CDate)
-//macrotype(CDuration)
-#undef macrotype
 
    template <class T>  void FromBinary(StdIStream & is, T & obj);
Index: XIOS/dev/dev_trunk_graph/src/attribute_template_decl.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/attribute_template_decl.cpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/attribute_template_decl.cpp	(revision 2137)
@@ -12,3 +12,4 @@
   template class CAttributeTemplate<CDate> ;
   template class CAttributeTemplate<CDuration> ;
+
 }
Index: XIOS/dev/dev_trunk_graph/src/attribute_template_impl.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/attribute_template_impl.hpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/attribute_template_impl.hpp	(revision 2137)
@@ -24,5 +24,14 @@
          this->setValue(value);
       }
-
+/*
+      template <class T>
+         CAttributeTemplate<T>::CAttributeTemplate(const CAttribute & attribut)
+         throw (CException)
+         : CAttribute(attribut)
+      {
+         if (!attribut.isEmpty() && !attribut.isType<T>())
+            ERROR("CAttributeTemplate", << "Invalid instantiation !");
+      }
+*/
       template <class T>
          CAttributeTemplate<T>::CAttributeTemplate(const StdString & id,
@@ -42,5 +51,12 @@
          umap.insert(umap.end(), std::make_pair(id, this));
       }
-
+/*
+      template <class T>
+      CAttributeTemplate<T>::~CAttributeTemplate(void)
+      {
+//         this->CType<T>::reset() ;
+//         this->clear();
+      }
+*/
       ///--------------------------------------------------------------
       template <class T>
@@ -69,7 +85,29 @@
       {
         return CType<T>::get() ;
-      }
-
-
+
+/*
+        if (SuperClass::isEmpty())
+        {
+           ERROR("T CAttributeTemplate<T>::getValue(void) const",
+                 << "[ id = " << this->getId() << "]"
+                 << " L'attribut est requis mais n'est pas dÃ©fini !");
+         }
+        return (SuperClass::getValue<T>());
+*/
+      }
+
+/*
+      template <class T>
+         T* CAttributeTemplate<T>::getRef(void)
+      {
+         if (SuperClass::isEmpty())
+         {
+            ERROR("T CAttributeTemplate<T>::getValue(void) const",
+                  << "[ id = " << this->getId() << "]"
+                  << " L'attribut est requis mais n'est pas dÃ©fini !");
+          }
+         return (SuperClass::getRef<T>());
+      }
+*/
 
       template <class T>
@@ -77,4 +115,5 @@
       {
          CType<T>::set(value) ;
+//         SuperClass::setValue<T>(value);
       }
 
@@ -140,4 +179,5 @@
       {
          this->setValue(value);
+//         return (this->getValue());
          return *this;
       }
Index: XIOS/dev/dev_trunk_graph/src/buffer_client.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/buffer_client.cpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/buffer_client.cpp	(revision 2137)
@@ -7,4 +7,5 @@
 #include "mpi.hpp"
 #include "tracer.hpp"
+#include "timeline_events.hpp"
 
 namespace xios
@@ -200,7 +201,16 @@
   
     lockBuffer();
+    count=*bufferCount[current] ;
+    
+    if (resizingBufferStep_ > 0 ) return false ;
+
     if (size > bufferSize)
-      ERROR("bool CClientBuffer::isBufferFree(StdSize size)",
-            << "The requested size (" << size << " bytes) is too big to fit the buffer (" << bufferSize << " bytes), please increase the client buffer size." << endl);
+    {
+      // ERROR("bool CClientBuffer::isBufferFree(StdSize size)",
+      //      << "The requested size (" << size << " bytes) is too big to fit the buffer (" << bufferSize << " bytes), please increase the client buffer size." << endl);
+      resizingBufferStep_=1 ;
+      newBufferSize_=size ;
+      return false ;
+    }
 
     if (size > maxEventSize)
@@ -214,7 +224,15 @@
       if (size > maxRequestSize) maxRequestSize = size;
     }
-
-      count=*bufferCount[current] ;
-      return (size <= remain());
+    
+    if (size > remain())
+    {
+      if (isGrowableBuffer_)
+      {
+        resizingBufferStep_ = 1 ;
+        newBufferSize_ = (count+size)*growFactor_ ;
+      }  
+      return false ;
+    }
+    else return true ;
   }
 
@@ -276,5 +294,6 @@
     if (!pending)
     {
-      if (!send) return false ;
+      if (!send && resizingBufferStep_==0 ) return false ;
+
       if (count > 0)
       {
@@ -284,4 +303,5 @@
         {
           MPI_Issend(buffer[current], count, MPI_CHAR, serverRank, 20, interComm, &request);
+          if (resizingBufferStep_==3) resizingBufferStep_=0 ;
           pending = true;
 //          *control[current]=0 ;
@@ -295,9 +315,92 @@
           count = 0;
         }
-        else unlockBuffer() ;
+        else 
+        {
+          unlockBuffer() ;
+        }
       }
+      else
+      {
+        if (resizingBufferStep_==2) resizeBuffer(newBufferSize_) ;
+        if (resizingBufferStep_==1) resizeBufferNotify() ;
+      }
     }
 
     return pending;
+  }
+
+  void CClientBuffer::resizeBufferNotify(void)
+  {
+    // notify server of changing buffers size
+    lockBuffer() ;
+    int size=sizeof(int)+sizeof(size_t) ;
+    CBufferOut* bufOut = this->getBuffer(timelineEventNotifyChangeBufferSize, size);
+    bufOut->put(size);
+    bufOut->put(timelineEventNotifyChangeBufferSize);
+    resizingBufferStep_ = 2 ;
+    unlockBuffer() ;
+  }
+
+  void CClientBuffer::resizeBuffer(size_t newSize)
+  {
+    if (hasWindows)
+    { 
+      MPI_Win_detach(windows_[0], bufferHeader[0]) ;
+      MPI_Win_detach(windows_[1], bufferHeader[1]) ;
+    }
+    MPI_Free_mem(bufferHeader[0]) ;
+    MPI_Free_mem(bufferHeader[1]) ;
+
+    bufferSize=newSize ;
+    MPI_Alloc_mem(bufferSize+headerSize, MPI_INFO_NULL, &bufferHeader[0]) ;
+    MPI_Alloc_mem(bufferSize+headerSize, MPI_INFO_NULL, &bufferHeader[1]) ;
+    buffer[0] = bufferHeader[0]+headerSize ;
+    buffer[1] = bufferHeader[1]+headerSize ;
+    firstTimeLine[0]=(size_t*)bufferHeader[0] ;
+    firstTimeLine[1]=(size_t*)bufferHeader[1] ;
+    bufferCount[0]=(size_t*)bufferHeader[0] +1 ;
+    bufferCount[1]=(size_t*)bufferHeader[1] +1 ;
+    control[0]=(size_t*)bufferHeader[0] +2 ;
+    control[1]=(size_t*)bufferHeader[1] +2 ;
+    finalize[0]=(size_t*)bufferHeader[0] +3 ;
+    finalize[1]=(size_t*)bufferHeader[1] +3 ;
+
+    *firstTimeLine[0]=0 ;
+    *firstTimeLine[1]=0 ;
+    *bufferCount[0]=0 ;
+    *bufferCount[1]=0 ;
+    *control[0]=0 ;
+    *control[1]=0 ;
+    *finalize[0]=0 ;
+    *finalize[1]=0 ;
+    winState[0]=false ;
+    winState[1]=false ;
+    current=0 ;
+    
+    if (hasWindows)
+    {  
+    
+      MPI_Win_attach(windows_[0], bufferHeader[0], bufferSize+headerSize) ;
+      MPI_Win_attach(windows_[1], bufferHeader[1], bufferSize+headerSize) ;
+          
+      MPI_Win_lock(MPI_LOCK_EXCLUSIVE, clientRank_, 0, windows_[0]) ;
+      MPI_Win_lock(MPI_LOCK_EXCLUSIVE, clientRank_, 0, windows_[1]) ;
+
+      MPI_Win_unlock(clientRank_, windows_[1]) ;
+      MPI_Win_unlock(clientRank_, windows_[0]) ;
+    } 
+
+    lockBuffer() ;
+ 
+    int size=sizeof(int)+2*sizeof(size_t)+2*sizeof(MPI_AINT) ;
+    CBufferOut* bufOut = this->getBuffer(timelineEventChangeBufferSize, size);
+    bufOut->put(size);
+    bufOut->put(timelineEventChangeBufferSize);
+    bufOut->put(newBufferSize_);
+    bufOut->put(this->getWinAddress(0));
+    bufOut->put(this->getWinAddress(1));
+
+    resizingBufferStep_=3;
+    unlockBuffer() ;
   }
 
Index: XIOS/dev/dev_trunk_graph/src/buffer_client.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/buffer_client.hpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/buffer_client.hpp	(revision 2137)
@@ -29,5 +29,12 @@
       void infoBuffer(void) ;
       bool isNotifiedFinalized(void) ;
+      void setGrowableBuffer(double growFactor) { growFactor_=growFactor ; isGrowableBuffer_=true ;}
+      void fixBufferSize(size_t bufferSize) { newBufferSize_=bufferSize ; isGrowableBuffer_=false ; resizingBufferStep_=1 ;}
+      void fixBuffer(void) { isGrowableBuffer_=false ;}
     private:
+       void resizeBuffer(size_t newSize) ;
+       void resizeBufferNotify(void) ;
+
+
       char* buffer[2];
       char* bufferHeader[2];
@@ -38,8 +45,13 @@
       bool winState[2] ;
       int current;
+      
+      double growFactor_=1.2 ;
+      bool isGrowableBuffer_=true ;
 
+      int resizingBufferStep_ = 0 ;
+      size_t newBufferSize_ ;
       StdSize count;
       StdSize maxEventSize;
-      const StdSize bufferSize;
+      StdSize bufferSize;
       const StdSize estimatedMaxEventSize;
 
Index: XIOS/dev/dev_trunk_graph/src/buffer_server.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/buffer_server.cpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/buffer_server.cpp	(revision 2137)
@@ -15,5 +15,5 @@
     end = size;
     used=0 ;
-    buffer = new char[size]; // use MPI_ALLOC_MEM later?
+    MPI_Alloc_mem(size, MPI_INFO_NULL, &buffer) ;
     currentWindows=1 ;
     if (windows[0]==MPI_WIN_NULL && windows[1]==MPI_WIN_NULL) hasWindows=false ;
@@ -22,5 +22,5 @@
   CServerBuffer::~CServerBuffer()
   {
-    delete [] buffer ;
+    MPI_Free_mem(buffer) ;
   }
 
@@ -222,5 +222,5 @@
   bool CServerBuffer::getBufferFromClient(size_t timeLine, char*& buffer, size_t& count)
   {
-    if (!hasWindows) return false ;
+    if (!hasWindows || resizingBuffer_) return false ;
 
     
Index: XIOS/dev/dev_trunk_graph/src/buffer_server.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/buffer_server.hpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/buffer_server.hpp	(revision 2137)
@@ -26,4 +26,5 @@
       void unlockBuffer(void) ;
       void notifyClientFinalize(void) ;
+      void notifyBufferResizing(void) { resizingBuffer_=true ;}
     private:
       char* buffer;
@@ -35,5 +36,5 @@
       std::vector<MPI_Win> windows_ ;
       std::vector<MPI_Aint> winAddress_ ;
-
+      bool resizingBuffer_ = false ;
       int currentWindows ;
       bool hasWindows ;
Index: XIOS/dev/dev_trunk_graph/src/config/field_attribute.conf
===================================================================
--- XIOS/dev/dev_trunk_graph/src/config/field_attribute.conf	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/config/field_attribute.conf	(revision 2137)
@@ -42,2 +42,4 @@
 
 DECLARE_ATTRIBUTE(bool,      build_workflow_graph)
+DECLARE_ATTRIBUTE(StdString, build_workflow_graph_start)
+DECLARE_ATTRIBUTE(StdString, build_workflow_graph_end)
Index: XIOS/dev/dev_trunk_graph/src/config/interpolate_axis_attribute.conf
===================================================================
--- XIOS/dev/dev_trunk_graph/src/config/interpolate_axis_attribute.conf	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/config/interpolate_axis_attribute.conf	(revision 2137)
@@ -3,2 +3,4 @@
 DECLARE_ATTRIBUTE(int, order)
 DECLARE_ATTRIBUTE(StdString, coordinate)
+DECLARE_ATTRIBUTE(StdString, coordinate_src)
+DECLARE_ATTRIBUTE(StdString, coordinate_dst)
Index: XIOS/dev/dev_trunk_graph/src/context_client.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/context_client.cpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/context_client.cpp	(revision 2137)
@@ -12,4 +12,8 @@
 #include "cxios.hpp"
 #include "server.hpp"
+#include "services.hpp"
+#include <boost/functional/hash.hpp>
+#include <random>
+#include <chrono>
 
 namespace xios
@@ -25,5 +29,5 @@
     {
       
-      context = parent;
+      context_ = parent;
       intraComm = intraComm_;
       interComm = interComm_;
@@ -66,4 +70,10 @@
       MPI_Comm_split(intraComm_,clientRank,clientRank, &commSelf) ;
 
+      auto time=chrono::system_clock::now().time_since_epoch().count() ;
+      std::default_random_engine rd(time); // not reproducible from a run to another
+      std::uniform_int_distribution<size_t> dist;
+      hashId_=dist(rd) ;
+      MPI_Bcast(&hashId_,1,MPI_SIZE_T,0,intraComm) ; // Bcast to all server of the context
+
       timeLine = 1;
     }
@@ -124,5 +134,5 @@
     {
       list<int> ranks = event.getRanks();
-      info(100)<<"Event "<<timeLine<<" of context "<<context->getId()<<endl ;
+      info(100)<<"Event "<<timeLine<<" of context "<<context_->getId()<<endl ;
       if (CXios::checkEventSync)
       {
@@ -154,5 +164,5 @@
 
         unlockBuffers(ranks) ;
-        info(100)<<"Event "<<timeLine<<" of context "<<context->getId()<<"  sent"<<endl ;
+        info(100)<<"Event "<<timeLine<<" of context "<<context_->getId()<<"  sent"<<endl ;
           
         checkBuffers(ranks);
@@ -161,6 +171,8 @@
       if (isAttachedModeEnabled()) // couldBuffer is always true in attached mode
       {
-        waitEvent(ranks);
-        CContext::setCurrent(context->getId());
+        while (checkBuffers(ranks)) context_->globalEventLoop() ;
+      
+        CXios::getDaemonsManager()->scheduleContext(hashId_) ;
+        while (CXios::getDaemonsManager()->isScheduledContext(hashId_)) context_->globalEventLoop() ;
       }
       
@@ -177,5 +189,5 @@
       while (checkBuffers(ranks))
       {
-        CXios::getDaemonsManager()->eventLoop() ;
+        context_->eventLoop() ;
       }
 
@@ -256,5 +268,5 @@
           for (itBuffer = bufferList.begin(); itBuffer != bufferList.end(); itBuffer++) (*itBuffer)->unlockBuffer();
           checkBuffers();
-          
+/*          
           context->server->listen();
 
@@ -265,6 +277,8 @@
             context->globalEventLoop() ;
           }
-
-        }
+*/
+           context_->globalEventLoop() ;
+        }
+
       } while (!areBuffersFree && !nonBlocking);
       CTimer::get("Blocking time").suspend();
@@ -295,12 +309,15 @@
   
       CClientBuffer* buffer = buffers[rank] = new CClientBuffer(interComm, Wins, clientRank, rank, mapBufferSize_[rank], maxEventSizes[rank]);
+      if (isGrowableBuffer_) buffer->setGrowableBuffer(1.2) ;
+      else buffer->fixBuffer() ;
       // Notify the server
-      CBufferOut* bufOut = buffer->getBuffer(0, 3*sizeof(MPI_Aint));
-      MPI_Aint sendBuff[3] ;
-      sendBuff[0]=mapBufferSize_[rank]; // Stupid C++
-      sendBuff[1]=buffers[rank]->getWinAddress(0); 
-      sendBuff[2]=buffers[rank]->getWinAddress(1); 
+      CBufferOut* bufOut = buffer->getBuffer(0, 4*sizeof(MPI_Aint));
+      MPI_Aint sendBuff[4] ;
+      sendBuff[0]=hashId_;
+      sendBuff[1]=mapBufferSize_[rank];
+      sendBuff[2]=buffers[rank]->getWinAddress(0); 
+      sendBuff[3]=buffers[rank]->getWinAddress(1); 
       info(100)<<"CContextClient::newBuffer : rank "<<rank<<" winAdress[0] "<<buffers[rank]->getWinAddress(0)<<" winAdress[1] "<<buffers[rank]->getWinAddress(1)<<endl;
-      bufOut->put(sendBuff, 3); // Stupid C++
+      bufOut->put(sendBuff, 4); 
       buffer->checkBuffer(true);
 
@@ -383,8 +400,7 @@
     * \param [in] maxEventSize maps the rank of the connected servers to the size of the biggest event
    */
-   void CContextClient::setBufferSize(const std::map<int,StdSize>& mapSize, const std::map<int,StdSize>& maxEventSize)
-   {
-     mapBufferSize_ = mapSize;
-     maxEventSizes = maxEventSize;
+   void CContextClient::setBufferSize(const std::map<int,StdSize>& mapSize)
+   {
+     for(auto& it : mapSize) {buffers[it.first]->fixBufferSize(std::min(it.second*CXios::bufferSizeFactor*1.01,CXios::maxBufferSize*1.0));}
    }
 
@@ -463,9 +479,9 @@
     for (itMap = itbMap; itMap != iteMap; ++itMap)
     {
-      report(10) << " Memory report : Context <" << context->getId() << "> : client side : memory used for buffer of each connection to server" << endl
+      report(10) << " Memory report : Context <" << context_->getId() << "> : client side : memory used for buffer of each connection to server" << endl
                  << "  +) To server with rank " << itMap->first << " : " << itMap->second << " bytes " << endl;
       totalBuf += itMap->second;
     }
-    report(0) << " Memory report : Context <" << context->getId() << "> : client side : total memory used for buffer " << totalBuf << " bytes" << endl;
+    report(0) << " Memory report : Context <" << context_->getId() << "> : client side : total memory used for buffer " << totalBuf << " bytes" << endl;
 
   }
Index: XIOS/dev/dev_trunk_graph/src/context_client.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/context_client.hpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/context_client.hpp	(revision 2137)
@@ -63,5 +63,5 @@
       void finalize(void);
 
-      void setBufferSize(const std::map<int,StdSize>& mapSize, const std::map<int,StdSize>& maxEventSize);
+      void setBufferSize(const std::map<int,StdSize>& mapSize);
 
       int getRemoteSize(void) {return serverSize;}
@@ -75,7 +75,8 @@
       /*! get the associated server (dual chanel client/server) */      
       CContextServer* getAssociatedServer(void) { return associatedServer_;}
-
+      void setGrowableBuffer(void) { isGrowableBuffer_=true;}
+      void setFixedBuffer(void) { isGrowableBuffer_=false;}
     public:
-      CContext* context; //!< Context for client
+      CContext* context_; //!< Context for client
 
       size_t timeLine; //!< Timeline of each event
@@ -98,4 +99,6 @@
 
       bool pureOneSided ; //!< if true, client will communicated with servers only trough one sided communication. Otherwise the hybrid mode P2P /One sided is used.
+
+      size_t hashId_ ; //!< hash id on the context client that will be used for context server to identify the remote calling context client.
 
     private:
@@ -122,5 +125,5 @@
       bool isAttached_ ;
       CContextServer* associatedServer_ ; //!< The server associated to the pair client/server
-
+      bool isGrowableBuffer_ = true ;
   };
 }
Index: XIOS/dev/dev_trunk_graph/src/context_server.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/context_server.cpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/context_server.cpp	(revision 2137)
@@ -20,4 +20,5 @@
 #include "services.hpp"
 #include "contexts_manager.hpp"
+#include "timeline_events.hpp"
 
 #include <boost/functional/hash.hpp>
@@ -52,8 +53,10 @@
     CXios::getContextsManager()->getContextInfo(context->getId(), contextInfo, intraComm) ;
 
-    //if (contextInfo.serviceType != CServicesManager::CLIENT) // we must have an event scheduler => to be retrieve from the associated services
-    //{
-      if (!isAttachedModeEnabled()) eventScheduler_=CXios::getPoolRessource()->getService(contextInfo.serviceId,contextInfo.partitionId)->getEventScheduler() ;
-    //}
+  //  if (contextInfo.serviceType != CServicesManager::CLIENT) // we must have an event scheduler => to be retrieve from the associated services
+  //  {
+      //if (!isAttachedModeEnabled()) eventScheduler_=CXios::getPoolRessource()->getService(contextInfo.serviceId,contextInfo.partitionId)->getEventScheduler() ;
+      eventScheduler_=CXios::getPoolRessource()->getService(contextInfo.serviceId,contextInfo.partitionId)->getEventScheduler() ;
+
+  //  }
 
 
@@ -186,9 +189,10 @@
     if (it==buffers.end()) // Receive the buffer size and allocate the buffer
     {
-       MPI_Aint recvBuff[3] ;
-       MPI_Recv(recvBuff, 3, MPI_AINT, rank, 20, interComm, &status);
-       StdSize buffSize = recvBuff[0];
+       MPI_Aint recvBuff[4] ;
+       MPI_Recv(recvBuff, 4, MPI_AINT, rank, 20, interComm, &status);
+       remoteHashId_ = recvBuff[0] ;
+       StdSize buffSize = recvBuff[1];
        vector<MPI_Aint> winAdress(2) ;
-       winAdress[0]=recvBuff[1] ; winAdress[1]=recvBuff[2] ;
+       winAdress[0]=recvBuff[2] ; winAdress[1]=recvBuff[3] ;
        mapBufferSize_.insert(std::make_pair(rank, buffSize));
        it=(buffers.insert(pair<int,CServerBuffer*>(rank,new CServerBuffer(windows, winAdress, rank, buffSize)))).first;
@@ -288,13 +292,28 @@
       CBufferIn newBuffer(startBuffer,buffer.remain());
       newBuffer>>size>>timeLine;
-      it=events.find(timeLine);
-      if (it==events.end()) it=events.insert(pair<int,CEventServer*>(timeLine,new CEventServer(this))).first;
-      it->second->push(rank,buffers[rank],startBuffer,size);
-
+
+      if (timeLine==timelineEventNotifyChangeBufferSize)
+      {
+        buffers[rank]->notifyBufferResizing() ;
+        buffers[rank]->updateCurrentWindows() ;
+      } 
+      else if (timeLine==timelineEventChangeBufferSize)
+      {
+        size_t newSize ;
+        vector<MPI_Aint> winAdress(2) ;
+        newBuffer>>newSize>>winAdress[0]>>winAdress[1] ;
+        buffers.erase(rank) ;
+        buffers.insert(pair<int,CServerBuffer*>(rank,new CServerBuffer(windows, winAdress, rank, newSize)));
+      }
+      else
+      {
+        it=events.find(timeLine);
+        if (it==events.end()) it=events.insert(pair<int,CEventServer*>(timeLine,new CEventServer(this))).first;
+        it->second->push(rank,buffers[rank],startBuffer,size);
+        if (timeLine>0) lastTimeLine[rank]=timeLine ;
+      }
       buffer.advance(size);
       count=buffer.remain();
     }
-
-    if (timeLine>0) lastTimeLine[rank]=timeLine ;
     
     CTimer::get("Process request").suspend();
@@ -308,4 +327,6 @@
 //    if (context->isProcessingEvent()) return ;
     if (isProcessingEvent_) return ;
+    if (isAttachedModeEnabled())
+      if (!CXios::getDaemonsManager()->isScheduledContext(remoteHashId_)) return ;
 
     it=events.find(currentTimeLine);
@@ -316,12 +337,23 @@
       if (event->isFull())
       {
-        if (!scheduled && eventScheduler_) // Skip event scheduling for attached mode and reception on client side
+        if (!scheduled && !isAttachedModeEnabled()) // Skip event scheduling for attached mode and reception on client side
         {
           eventScheduler_->registerEvent(currentTimeLine,hashId);
           scheduled=true;
         }
-        else if (!eventScheduler_ || eventScheduler_->queryEvent(currentTimeLine,hashId) )
+        else if (isAttachedModeEnabled() || eventScheduler_->queryEvent(currentTimeLine,hashId) )
         {
-          MPI_Barrier(intraComm) ;
+          MPI_Request req ;
+          MPI_Status status ;
+
+          MPI_Ibarrier(intraComm,&req) ;
+          int flag=false ;
+          do  
+          {
+            eventScheduler_->checkEvent()  ;
+            MPI_Test(&req,&flag,&status) ;
+          } while (!flag) ;
+
+          //MPI_Barrier(intraComm) ;
          // When using attached mode, synchronise the processes to avoid that differents event be scheduled by differents processes
          // The best way to properly solve this problem will be to use the event scheduler also in attached mode
@@ -343,4 +375,5 @@
          currentTimeLine++;
          scheduled = false;
+         if (isAttachedModeEnabled()) CXios::getDaemonsManager()->unscheduleContext() ;
         }
       }
Index: XIOS/dev/dev_trunk_graph/src/context_server.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/context_server.hpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/context_server.hpp	(revision 2137)
@@ -72,4 +72,5 @@
       bool isProcessingEvent_ ;
       CContextClient* associatedClient_ ;
+      size_t remoteHashId_; //!< the hash is of the calling context client
   } ;
 
Index: XIOS/dev/dev_trunk_graph/src/declare_attribute.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/declare_attribute.hpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/declare_attribute.hpp	(revision 2137)
@@ -43,12 +43,7 @@
          using CAttributeArray<T_num, T_rank>::operator = ;       \
          bool alwaysFalse=false;\
-         name##_attr(void) : CAttributeArray<T_num, T_rank> (#name, *CAttributeMap::Current) {if (alwaysFalse) TV_ttf_display_type(this);} \
+         name##_attr(void) : CAttributeArray<T_num, T_rank> (#name, *CAttributeMap::Current) {} \
          virtual bool doSend() const { return helper(__VA_ARGS__); }   \
          bool helper(bool returnTrue=true) const { return returnTrue; }   \
-         static int TV_ttf_display_type ( const name##_attr* array )\
-         {\
-           cout<<"TV_ttf_display_type"<<endl ;\
-           return CArray<T_num,T_rank>::TV_ttf_display_type((const CArray<T_num,T_rank>*)array) ;\
-         }\
          virtual ~name##_attr(void) {}                            \
    } name;
Index: XIOS/dev/dev_trunk_graph/src/distribution/gatherer_connector.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/distribution/gatherer_connector.hpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/distribution/gatherer_connector.hpp	(revision 2137)
@@ -151,5 +151,5 @@
       void transfer(map<int, CArray<T,1>>& dataIn, CArray<T,1>& dataOut, T missingValue)
       {
-        transfer(1, 1, dataIn, dataout, missingValue)
+        transfer(1, 1, dataIn, dataOut, missingValue);
       }
       
Index: XIOS/dev/dev_trunk_graph/src/distribution/grid_scatterer_connector.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/distribution/grid_scatterer_connector.hpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/distribution/grid_scatterer_connector.hpp	(revision 2137)
@@ -42,5 +42,6 @@
       }     
 
-
+      const map<int,int>& getTransferedDataSize(void) {return dstSize_;}
+     
       template<typename T, int N> 
       void transfer(const CArray<T,N>& input, map<int, CArray<T,1>>& output)
Index: XIOS/dev/dev_trunk_graph/src/distribution/grid_transform_connector.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/distribution/grid_transform_connector.cpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/distribution/grid_transform_connector.cpp	(revision 2137)
@@ -59,9 +59,6 @@
         vector<size_t> recvBuff(size) ;
         MPI_Recv(recvBuff.data(), size, MPI_SIZE_T, status.MPI_SOURCE,0, localComm_,&status) ;
-        if(size)
-        {
-          CArray<size_t,1> arrayTmp(recvBuff.data(), shape(recvBuff.size()), duplicateData) ;
-          recvIndex[status.MPI_SOURCE].reference(arrayTmp) ;
-        }
+        CArray<size_t,1> arrayTmp(recvBuff.data(), shape(recvBuff.size()), duplicateData) ;
+        recvIndex[status.MPI_SOURCE].reference(arrayTmp) ;
         if (recvRankSize_.count(status.MPI_SOURCE)==0) recvRankSize_[status.MPI_SOURCE] = size ; 
         else recvRankSize_[status.MPI_SOURCE] *= size ; 
Index: XIOS/dev/dev_trunk_graph/src/distribution/scatterer_connector.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/distribution/scatterer_connector.hpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/distribution/scatterer_connector.hpp	(revision 2137)
@@ -50,5 +50,5 @@
     void transfer(int sizeT, const CArray<T,n>& dataIn, map<int, CArray<T,1>>& dataOut)
     {
-      transfer(1, sizeT, dataIn, dataOut)
+      transfer(1, sizeT, dataIn, dataOut);
     }
     
Index: XIOS/dev/dev_trunk_graph/src/filter/client_from_client_source_filter.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/filter/client_from_client_source_filter.cpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/filter/client_from_client_source_filter.cpp	(revision 2137)
@@ -38,5 +38,5 @@
     for (auto& subEvent : event.subEvents) (*subEvent.buffer) >> packet->timestamp  ; // better management of time lien later...
     packet->timestamp = date;
-
+         
     grid_->getClientFromClientConnector()->transfer(event,packet->data) ;
 
@@ -55,4 +55,5 @@
     if (wasDataAlreadyReceived_) isDataLate = lastDateReceived_ + offset_ + freqOp_ <= currentDate ;
     else isDataLate = CContext::getCurrent()->getCalendar()->getInitDate()+ offset_ <= currentDate ;
+    return isDataLate ;
   }
 
Index: XIOS/dev/dev_trunk_graph/src/filter/client_to_model_store_filter.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/filter/client_to_model_store_filter.cpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/filter/client_to_model_store_filter.cpp	(revision 2137)
@@ -19,5 +19,4 @@
     if (hasMissingValue_) missingValue_  = field->default_value ;
     detectMissingValues_ = (!field->detect_missing_value.isEmpty() && hasMissingValue_);
-    
   }
 
Index: XIOS/dev/dev_trunk_graph/src/filter/client_to_server_store_filter.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/filter/client_to_server_store_filter.cpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/filter/client_to_server_store_filter.cpp	(revision 2137)
@@ -30,6 +30,6 @@
     field_->getSentGrid()->getClientToServerConnector(client_)->transfer(data[0]->data, client_, event, message) ;
     CTimer::get("Field : send data").suspend();
-   }
-  
+  }
+
   void CClientToServerStoreFilter::buildWorkflowGraph(std::vector<CDataPacketPtr> data)
   {
@@ -48,4 +48,10 @@
     }
   }
+  
+  CContextClient* CClientToServerStoreFilter::getTransferedDataSize(map<int,int>& size)
+  {
+    size = field_->getSentGrid()->getClientToServerConnector(client_)->getTransferedDataSize() ;
+    return client_ ;
+  }
 
   bool CClientToServerStoreFilter::mustAutoTrigger() const
Index: XIOS/dev/dev_trunk_graph/src/filter/client_to_server_store_filter.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/filter/client_to_server_store_filter.hpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/filter/client_to_server_store_filter.hpp	(revision 2137)
@@ -24,4 +24,11 @@
        */
       CClientToServerStoreFilter(CGarbageCollector& gc, CField* field, CContextClient* client);
+      /*!
+       * Get the size of data transfered by call. Needed for context client buffer size evaluation
+       *
+       * \param size : map returning the size for each server rank  
+       * \return the associated context client
+       */
+      CContextClient* getTransferedDataSize(map<int,int>& size) ;
 
       /*!
Index: XIOS/dev/dev_trunk_graph/src/filter/pass_through_filter.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/filter/pass_through_filter.cpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/filter/pass_through_filter.cpp	(revision 2137)
@@ -60,3 +60,2 @@
 
 } // namespace xios
-
Index: XIOS/dev/dev_trunk_graph/src/filter/server_to_client_store_filter.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/filter/server_to_client_store_filter.cpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/filter/server_to_client_store_filter.cpp	(revision 2137)
@@ -50,4 +50,9 @@
   }
 
+  CContextClient* CServerToClientStoreFilter::getTransferedDataSize(map<int,int>& size)
+  {
+    size = grid_->getServerToClientConnector()->getTransferedDataSize() ;
+    return client_ ;
+  }
 
   bool CServerToClientStoreFilter::mustAutoTrigger() const
Index: XIOS/dev/dev_trunk_graph/src/filter/server_to_client_store_filter.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/filter/server_to_client_store_filter.hpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/filter/server_to_client_store_filter.hpp	(revision 2137)
@@ -25,4 +25,12 @@
        */
       CServerToClientStoreFilter(CGarbageCollector& gc, CField* field, CContextClient* client);
+
+      /*!
+       * Get the size of data transfered by call. Needed for context client buffer size evaluation
+       *
+       * \param size : map returning the size for each server rank  
+       * \return the associated context client
+       */
+      CContextClient* getTransferedDataSize(map<int,int>& size) ;
 
       /*!
Index: XIOS/dev/dev_trunk_graph/src/filter/temporal_filter.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/filter/temporal_filter.cpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/filter/temporal_filter.cpp	(revision 2137)
@@ -23,7 +23,9 @@
                         this->samplingOffset.second, this->samplingOffset.timestep)
     , initDate(initDate)
+//    , nextSamplingDate(initDate + (this->samplingOffset + initDate.getRelCalendar().getTimeStep()))
     , nextSamplingDate(initDate + offsetMonth + ( offsetAllButMonth + initDate.getRelCalendar().getTimeStep()))
     , nbOperationDates(1)
     , nbSamplingDates(0)
+//    , nextOperationDate(initDate + opFreq + this->samplingOffset)
     , isFirstOperation(true)
     , graphCycleCompleted(true)
@@ -73,4 +75,5 @@
       {
         usePacket = (data[0]->date >= nextSamplingDate);
+//        outputResult = (data[0]->date + samplingFreq > nextOperationDate);
         outputResult = (data[0]->date  > initDate + nbOperationDates*opFreq - samplingFreq + offsetMonth + offsetAllButMonth);
         copyLess = (isInstantOperation && usePacket && outputResult);
@@ -110,7 +113,7 @@
 
         isFirstOperation = false;
-        
+//        nextOperationDate = initDate + samplingFreq + nbOperationDates*opFreq - samplingFreq + offsetMonth + offsetAllButMonth;
         graphCycleCompleted = true;
-      }
+     }
     }
 
@@ -125,4 +128,5 @@
   bool CTemporalFilter::isDataExpected(const CDate& date) const
   {
+//    return isOnceOperation ? isFirstOperation : (date >= nextSamplingDate || date + samplingFreq > nextOperationDate);
     return isOnceOperation ? isFirstOperation : (date >= nextSamplingDate || date > initDate + nbOperationDates*opFreq - samplingFreq + offsetMonth + offsetAllButMonth);
   }
Index: XIOS/dev/dev_trunk_graph/src/filter/transform_filter.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/filter/transform_filter.cpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/filter/transform_filter.cpp	(revision 2137)
@@ -19,5 +19,5 @@
     packet->timestamp = data[0]->timestamp;
     packet->status = data[0]->status;
-    
+
     if (packet->status == CDataPacket::NO_ERROR) 
     {
Index: XIOS/dev/dev_trunk_graph/src/interface/c/iccontext.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/interface/c/iccontext.cpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/interface/c/iccontext.cpp	(revision 2137)
@@ -68,4 +68,11 @@
    CATCH_DUMP_STACK
 
+   void cxios_context_get_id(XContextPtr context, char * _id, int _id_len)
+   TRY
+   {
+      string_copy(context->getId(),_id,_id_len);
+   }
+   CATCH_DUMP_STACK
+   
    void cxios_context_set_current(XContextPtr context, bool withswap)
    TRY
Index: XIOS/dev/dev_trunk_graph/src/interface/c/icdata.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/interface/c/icdata.cpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/interface/c/icdata.cpp	(revision 2137)
@@ -412,4 +412,19 @@
 
    // ---------------------- Ecriture des donnÃ©es ------------------------------
+   
+   void cxios_write_data_k80_hdl(CField* field, double* data_k8, int data_Xsize)
+   TRY
+   {
+      CTimer::get("XIOS").resume();
+      CTimer::get("XIOS send field").resume();
+      CContext* context = CContext::getCurrent();
+      if (!context->hasServer && !context->client->isAttachedModeEnabled())
+        context->eventLoop();
+      CArray<double, 1> data(data_k8, shape(data_Xsize), neverDeleteData);
+      field->setData(data);
+      CTimer::get("XIOS send field").suspend();
+      CTimer::get("XIOS").suspend();
+   }
+   CATCH_DUMP_STACK
 
    void cxios_write_data_k80(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize)
@@ -418,18 +433,29 @@
       std::string fieldid_str;
       if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
-
-      CTimer::get("XIOS").resume();
-      CTimer::get("XIOS send field").resume();
-      CContext* context = CContext::getCurrent();
-      if (!context->hasServer && !context->client->isAttachedModeEnabled())
-        context->eventLoop();
-//ym        context->checkBuffersAndListen();
+      cxios_write_data_k80_hdl(CField::get(fieldid_str), data_k8, data_Xsize) ;
+   }
+   CATCH_DUMP_STACK
+
+
+
+  
+   void cxios_write_data_k81_hdl(CField* field, double* data_k8, int data_Xsize)
+   TRY
+   {
+      CTimer::get("XIOS").resume();
+      CTimer::get("XIOS send field").resume();
+
+      CContext* context = CContext::getCurrent();
+      if (!context->hasServer && !context->client->isAttachedModeEnabled())
+        context->eventLoop();
+
       CArray<double, 1> data(data_k8, shape(data_Xsize), neverDeleteData);
-      CField::get(fieldid_str)->setData(data);
-      CTimer::get("XIOS send field").suspend();
-      CTimer::get("XIOS").suspend();
-   }
-   CATCH_DUMP_STACK
-
+      field->setData(data);
+
+      CTimer::get("XIOS send field").suspend();
+      CTimer::get("XIOS").suspend();
+   }
+   CATCH_DUMP_STACK
+   
    void cxios_write_data_k81(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize)
    TRY
@@ -437,15 +463,23 @@
       std::string fieldid_str;
       if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
-
-      CTimer::get("XIOS").resume();
-      CTimer::get("XIOS send field").resume();
-
-      CContext* context = CContext::getCurrent();
-      if (!context->hasServer && !context->client->isAttachedModeEnabled())
-        context->eventLoop();
-//ym        context->checkBuffersAndListen();
-
-      CArray<double, 1> data(data_k8, shape(data_Xsize), neverDeleteData);
-      CField::get(fieldid_str)->setData(data);
+      cxios_write_data_k81_hdl(CField::get(fieldid_str), data_k8, data_Xsize) ;
+    
+   }
+   CATCH_DUMP_STACK
+
+
+
+   void cxios_write_data_k82_hdl(CField* field, double* data_k8, int data_Xsize, int data_Ysize)
+   TRY
+   {
+      CTimer::get("XIOS").resume();
+      CTimer::get("XIOS send field").resume();
+
+      CContext* context = CContext::getCurrent();
+      if (!context->hasServer && !context->client->isAttachedModeEnabled())
+        context->eventLoop();
+
+      CArray<double, 2>data(data_k8, shape(data_Xsize, data_Ysize), neverDeleteData);
+      field->setData(data);
 
       CTimer::get("XIOS send field").suspend();
@@ -459,21 +493,31 @@
       std::string fieldid_str;
       if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
-
-      CTimer::get("XIOS").resume();
-      CTimer::get("XIOS send field").resume();
-
-      CContext* context = CContext::getCurrent();
-      if (!context->hasServer && !context->client->isAttachedModeEnabled())
-        context->eventLoop();
-//ym        context->checkBuffersAndListen();
-
-      CArray<double, 2>data(data_k8, shape(data_Xsize, data_Ysize), neverDeleteData);
-      CField::get(fieldid_str)->setData(data);
-
-      CTimer::get("XIOS send field").suspend();
-      CTimer::get("XIOS").suspend();
-   }
-   CATCH_DUMP_STACK
-
+      cxios_write_data_k82_hdl(CField::get(fieldid_str), data_k8, data_Xsize, data_Ysize) ;
+   }
+   CATCH_DUMP_STACK
+
+
+
+
+
+
+   void cxios_write_data_k83_hdl(CField* field, double* data_k8, int data_Xsize, int data_Ysize, int data_Zsize)
+   TRY
+   {
+      CTimer::get("XIOS").resume();
+      CTimer::get("XIOS send field").resume();
+
+      CContext* context = CContext::getCurrent();
+      if (!context->hasServer && !context->client->isAttachedModeEnabled())
+        context->eventLoop();
+
+      CArray<double, 3>data(data_k8, shape(data_Xsize, data_Ysize, data_Zsize), neverDeleteData);
+      field->setData(data);
+
+      CTimer::get("XIOS send field").suspend();
+      CTimer::get("XIOS").suspend();
+   }
+   CATCH_DUMP_STACK
+   
    void cxios_write_data_k83(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize, int data_Ysize, int data_Zsize)
    TRY
@@ -481,15 +525,27 @@
       std::string fieldid_str;
       if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
-
-      CTimer::get("XIOS").resume();
-      CTimer::get("XIOS send field").resume();
-
-      CContext* context = CContext::getCurrent();
-      if (!context->hasServer && !context->client->isAttachedModeEnabled())
-        context->eventLoop();
-//ym        context->checkBuffersAndListen();
-
-      CArray<double, 3>data(data_k8, shape(data_Xsize, data_Ysize, data_Zsize), neverDeleteData);
-      CField::get(fieldid_str)->setData(data);
+      cxios_write_data_k83_hdl(CField::get(fieldid_str), data_k8, data_Xsize, data_Ysize, data_Zsize) ;
+
+
+   }
+   CATCH_DUMP_STACK
+
+
+
+
+
+
+   void cxios_write_data_k84_hdl(CField* field, double* data_k8, int data_0size, int data_1size, int data_2size, int data_3size)
+   TRY
+   {
+      CTimer::get("XIOS").resume();
+      CTimer::get("XIOS send field").resume();
+
+      CContext* context = CContext::getCurrent();
+      if (!context->hasServer && !context->client->isAttachedModeEnabled())
+        context->eventLoop();
+
+      CArray<double, 4>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size), neverDeleteData);
+      field->setData(data);
 
       CTimer::get("XIOS send field").suspend();
@@ -506,12 +562,26 @@
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS send field").resume();
-
-      CContext* context = CContext::getCurrent();
-      if (!context->hasServer && !context->client->isAttachedModeEnabled())
-        context->eventLoop();
-//ym        context->checkBuffersAndListen();
-
-      CArray<double, 4>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size), neverDeleteData);
-      CField::get(fieldid_str)->setData(data);
+      cxios_write_data_k84_hdl(CField::get(fieldid_str), data_k8, data_0size, data_1size, data_2size, data_3size) ;
+   }
+   CATCH_DUMP_STACK
+
+
+
+   
+
+   void cxios_write_data_k85_hdl(CField* field, double* data_k8,
+                             int data_0size, int data_1size, int data_2size,
+                             int data_3size, int data_4size)
+   TRY
+   {
+      CTimer::get("XIOS").resume();
+      CTimer::get("XIOS send field").resume();
+
+      CContext* context = CContext::getCurrent();
+      if (!context->hasServer && !context->client->isAttachedModeEnabled())
+        context->eventLoop();
+
+      CArray<double, 5>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size), neverDeleteData);
+      field->setData(data);
 
       CTimer::get("XIOS send field").suspend();
@@ -527,20 +597,32 @@
       std::string fieldid_str;
       if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
-
-      CTimer::get("XIOS").resume();
-      CTimer::get("XIOS send field").resume();
-
-      CContext* context = CContext::getCurrent();
-        context->eventLoop();
-//ym        context->checkBuffersAndListen();
-
-      CArray<double, 5>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size), neverDeleteData);
-      CField::get(fieldid_str)->setData(data);
-
-      CTimer::get("XIOS send field").suspend();
-      CTimer::get("XIOS").suspend();
-   }
-   CATCH_DUMP_STACK
-
+      cxios_write_data_k85_hdl(CField::get(fieldid_str), data_k8, data_0size, data_1size, data_2size, data_3size, data_4size) ;
+
+   }
+   CATCH_DUMP_STACK
+
+
+
+   void cxios_write_data_k86_hdl(CField* field, double* data_k8,
+                             int data_0size, int data_1size, int data_2size,
+                             int data_3size, int data_4size, int data_5size)
+   TRY
+   {
+ 
+      CTimer::get("XIOS").resume();
+      CTimer::get("XIOS send field").resume();
+
+      CContext* context = CContext::getCurrent();
+      if (!context->hasServer && !context->client->isAttachedModeEnabled())
+        context->eventLoop();
+
+      CArray<double, 6>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size), neverDeleteData);
+      field->setData(data);
+
+      CTimer::get("XIOS send field").suspend();
+      CTimer::get("XIOS").suspend();
+   }
+   CATCH_DUMP_STACK
+   
    void cxios_write_data_k86(const char* fieldid, int fieldid_size, double* data_k8,
                              int data_0size, int data_1size, int data_2size,
@@ -550,21 +632,33 @@
       std::string fieldid_str;
       if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
-
-      CTimer::get("XIOS").resume();
-      CTimer::get("XIOS send field").resume();
-
-      CContext* context = CContext::getCurrent();
-      if (!context->hasServer && !context->client->isAttachedModeEnabled())
-        context->eventLoop();
-//        context->checkBuffersAndListen();
-
-      CArray<double, 6>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size), neverDeleteData);
-      CField::get(fieldid_str)->setData(data);
-
-      CTimer::get("XIOS send field").suspend();
-      CTimer::get("XIOS").suspend();
-   }
-   CATCH_DUMP_STACK
-
+      cxios_write_data_k86_hdl(CField::get(fieldid_str), data_k8, data_0size, data_1size, data_2size, data_3size, data_4size, data_5size) ;
+
+  }
+   CATCH_DUMP_STACK
+   
+
+
+
+   void cxios_write_data_k87_hdl(CField* field, double* data_k8,
+                             int data_0size, int data_1size, int data_2size,
+                             int data_3size, int data_4size, int data_5size,
+                             int data_6size)
+   TRY
+   {
+      CTimer::get("XIOS").resume();
+      CTimer::get("XIOS send field").resume();
+
+      CContext* context = CContext::getCurrent();
+      if (!context->hasServer && !context->client->isAttachedModeEnabled())
+        context->eventLoop();
+
+      CArray<double, 7>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size), neverDeleteData);
+      field->setData(data);
+
+      CTimer::get("XIOS send field").suspend();
+      CTimer::get("XIOS").suspend();
+   }
+   CATCH_DUMP_STACK
+   
    void cxios_write_data_k87(const char* fieldid, int fieldid_size, double* data_k8,
                              int data_0size, int data_1size, int data_2size,
@@ -575,109 +669,150 @@
       std::string fieldid_str;
       if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
-
-      CTimer::get("XIOS").resume();
-      CTimer::get("XIOS send field").resume();
-
-      CContext* context = CContext::getCurrent();
-      if (!context->hasServer && !context->client->isAttachedModeEnabled())
-        context->eventLoop();
-//        context->checkBuffersAndListen();
-
-      CArray<double, 7>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size), neverDeleteData);
-      CField::get(fieldid_str)->setData(data);
-
-      CTimer::get("XIOS send field").suspend();
-      CTimer::get("XIOS").suspend();
-   }
-   CATCH_DUMP_STACK
-
-   void cxios_write_data_k40(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize)
-   TRY
-   {
-      std::string fieldid_str;
-      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
-
-      CTimer::get("XIOS").resume();
-      CTimer::get("XIOS send field").resume();
-      CContext* context = CContext::getCurrent();
-      if (!context->hasServer && !context->client->isAttachedModeEnabled())
-        context->eventLoop();
-//ym        context->checkBuffersAndListen();
+      cxios_write_data_k87_hdl(CField::get(fieldid_str), data_k8, data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size) ;
+   }
+   CATCH_DUMP_STACK
+   
+
+
+
+
+   void cxios_write_data_k40_hdl(CField* field, float* data_k4, int data_Xsize)
+   TRY
+   {
+      CTimer::get("XIOS").resume();
+      CTimer::get("XIOS send field").resume();
+      CContext* context = CContext::getCurrent();
+      if (!context->hasServer && !context->client->isAttachedModeEnabled())
+        context->eventLoop();
 
       CArray<float, 1> data_tmp(data_k4, shape(data_Xsize), neverDeleteData);
       CArray<double, 1> data(data_Xsize) ;
       data = data_tmp;
-      CField::get(fieldid_str)->setData(data);
-      CTimer::get("XIOS send field").suspend();
-      CTimer::get("XIOS").suspend();
-   }
-   CATCH_DUMP_STACK
-
-   void cxios_write_data_k41(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize)
-   TRY
-   {
-      std::string fieldid_str;
-      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
-
-      CTimer::get("XIOS").resume();
-      CTimer::get("XIOS send field").resume();
-
-      CContext* context = CContext::getCurrent();
-      if (!context->hasServer && !context->client->isAttachedModeEnabled())
-        context->eventLoop();
-//ym        context->checkBuffersAndListen();
+      field->setData(data);
+      CTimer::get("XIOS send field").suspend();
+      CTimer::get("XIOS").suspend();
+   }
+   CATCH_DUMP_STACK
+
+   void cxios_write_data_k40(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize)
+   TRY
+   {
+      std::string fieldid_str;
+      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
+      cxios_write_data_k40_hdl(CField::get(fieldid_str), data_k4, data_Xsize);
+
+   }
+   CATCH_DUMP_STACK
+   
+   
+   void cxios_write_data_k41_hdl(CField* field, float* data_k4, int data_Xsize)
+   TRY
+   {
+      CTimer::get("XIOS").resume();
+      CTimer::get("XIOS send field").resume();
+
+      CContext* context = CContext::getCurrent();
+      if (!context->hasServer && !context->client->isAttachedModeEnabled())
+        context->eventLoop();
 
       CArray<float, 1> data_tmp(data_k4, shape(data_Xsize), neverDeleteData);
       CArray<double, 1> data(data_Xsize);
       data = data_tmp;
-      CField::get(fieldid_str)->setData(data);
-
-      CTimer::get("XIOS send field").suspend();
-      CTimer::get("XIOS").suspend();
-   }
-   CATCH_DUMP_STACK
-
-   void cxios_write_data_k42(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize, int data_Ysize)
-   TRY
-   {
-      std::string fieldid_str;
-      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
-
-      CTimer::get("XIOS").resume();
-      CTimer::get("XIOS send field").resume();
-
-      CContext* context = CContext::getCurrent();
-      if (!context->hasServer && !context->client->isAttachedModeEnabled())
-        context->eventLoop();
-//ym        context->checkBuffersAndListen();
+      field->setData(data);
+
+      CTimer::get("XIOS send field").suspend();
+      CTimer::get("XIOS").suspend();
+   }
+   CATCH_DUMP_STACK
+
+   void cxios_write_data_k41(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize)
+   TRY
+   {
+      std::string fieldid_str;
+      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
+      cxios_write_data_k41_hdl(CField::get(fieldid_str), data_k4, data_Xsize);
+   }
+   CATCH_DUMP_STACK
+
+
+   void cxios_write_data_k42_hdl(CField* field, float* data_k4, int data_Xsize, int data_Ysize)
+   TRY
+   {
+      CTimer::get("XIOS").resume();
+      CTimer::get("XIOS send field").resume();
+
+      CContext* context = CContext::getCurrent();
+      if (!context->hasServer && !context->client->isAttachedModeEnabled())
+        context->eventLoop();
 
       CArray<float, 2> data_tmp(data_k4, shape(data_Xsize, data_Ysize), neverDeleteData);
       CArray<double, 2> data(data_Xsize, data_Ysize);
       data = data_tmp;
-      CField::get(fieldid_str)->setData(data);
-
-      CTimer::get("XIOS send field").suspend();
-      CTimer::get("XIOS").suspend();
-   }
-   CATCH_DUMP_STACK
-
-   void cxios_write_data_k43(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize, int data_Ysize, int data_Zsize)
-   TRY
-   {
-      std::string fieldid_str;
-      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
-
-      CTimer::get("XIOS").resume();
-      CTimer::get("XIOS send field").resume();
-
-      CContext* context = CContext::getCurrent();
-      if (!context->hasServer && !context->client->isAttachedModeEnabled())
-        context->eventLoop();
-//ym        context->checkBuffersAndListen();
+      field->setData(data);
+
+      CTimer::get("XIOS send field").suspend();
+      CTimer::get("XIOS").suspend();
+   }
+   CATCH_DUMP_STACK
+
+   void cxios_write_data_k42(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize, int data_Ysize)
+   TRY
+   {
+      std::string fieldid_str;
+      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
+      cxios_write_data_k42_hdl(CField::get(fieldid_str), data_k4, data_Xsize,data_Ysize);
+   }
+   CATCH_DUMP_STACK
+
+
+
+
+   void cxios_write_data_k43_hdl(CField* field, float* data_k4, int data_Xsize, int data_Ysize, int data_Zsize)
+   TRY
+   {
+      CTimer::get("XIOS").resume();
+      CTimer::get("XIOS send field").resume();
+
+      CContext* context = CContext::getCurrent();
+      if (!context->hasServer && !context->client->isAttachedModeEnabled())
+        context->eventLoop();
 
       CArray<float, 3> data_tmp(data_k4, shape(data_Xsize, data_Ysize, data_Zsize), neverDeleteData);
       CArray<double, 3> data(data_Xsize, data_Ysize, data_Zsize);
       data = data_tmp;
-      CField::get(fieldid_str)->setData(data);
+      field->setData(data);
+
+      CTimer::get("XIOS send field").suspend();
+      CTimer::get("XIOS").suspend();
+    }
+   CATCH_DUMP_STACK
+   
+   void cxios_write_data_k43(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize, int data_Ysize, int data_Zsize)
+   TRY
+   {
+      std::string fieldid_str;
+      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
+      cxios_write_data_k43_hdl(CField::get(fieldid_str), data_k4, data_Xsize,data_Ysize, data_Zsize);
+    }
+   CATCH_DUMP_STACK
+   
+
+   
+   void cxios_write_data_k44_hdl(CField* field, float* data_k4,
+                             int data_0size, int data_1size, int data_2size,
+                             int data_3size)
+   TRY
+   {
+      CTimer::get("XIOS").resume();
+      CTimer::get("XIOS send field").resume();
+
+      CContext* context = CContext::getCurrent();
+      if (!context->hasServer && !context->client->isAttachedModeEnabled())
+        context->eventLoop();
+
+      CArray<float, 4> data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size), neverDeleteData);
+      CArray<double, 4> data(data_0size, data_1size, data_2size, data_3size);
+      data = data_tmp;
+      field->setData(data);
 
       CTimer::get("XIOS send field").suspend();
@@ -693,17 +828,27 @@
       std::string fieldid_str;
       if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
-
-      CTimer::get("XIOS").resume();
-      CTimer::get("XIOS send field").resume();
-
-      CContext* context = CContext::getCurrent();
-      if (!context->hasServer && !context->client->isAttachedModeEnabled())
-        context->eventLoop();
-//ym        context->checkBuffersAndListen();
-
-      CArray<float, 4> data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size), neverDeleteData);
-      CArray<double, 4> data(data_0size, data_1size, data_2size, data_3size);
+      cxios_write_data_k44_hdl(CField::get(fieldid_str), data_k4, data_0size, data_1size, data_2size, data_3size) ;
+    }
+   CATCH_DUMP_STACK
+
+
+
+
+   void cxios_write_data_k45_hdl(CField* field, float* data_k4,
+                             int data_0size, int data_1size, int data_2size,
+                             int data_3size, int data_4size)
+   TRY
+   {
+      CTimer::get("XIOS").resume();
+      CTimer::get("XIOS send field").resume();
+
+      CContext* context = CContext::getCurrent();
+      if (!context->hasServer && !context->client->isAttachedModeEnabled())
+        context->eventLoop();
+
+      CArray<float, 5> data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size, data_4size), neverDeleteData);
+      CArray<double, 5> data(data_0size, data_1size, data_2size, data_3size, data_4size);
       data = data_tmp;
-      CField::get(fieldid_str)->setData(data);
+      field->setData(data);
 
       CTimer::get("XIOS send field").suspend();
@@ -719,17 +864,26 @@
       std::string fieldid_str;
       if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
-
-      CTimer::get("XIOS").resume();
-      CTimer::get("XIOS send field").resume();
-
-      CContext* context = CContext::getCurrent();
-      if (!context->hasServer && !context->client->isAttachedModeEnabled())
-        context->eventLoop();
-//ym        context->checkBuffersAndListen();
-
-      CArray<float, 5> data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size, data_4size), neverDeleteData);
-      CArray<double, 5> data(data_0size, data_1size, data_2size, data_3size, data_4size);
+      cxios_write_data_k45_hdl(CField::get(fieldid_str), data_k4, data_0size, data_1size, data_2size, data_3size, data_4size) ;
+    }
+   CATCH_DUMP_STACK
+
+
+
+   void cxios_write_data_k46_hdl(CField* field, float* data_k4,
+                             int data_0size, int data_1size, int data_2size,
+                             int data_3size, int data_4size, int data_5size)
+   TRY
+   {
+      CTimer::get("XIOS").resume();
+      CTimer::get("XIOS send field").resume();
+
+      CContext* context = CContext::getCurrent();
+      if (!context->hasServer && !context->client->isAttachedModeEnabled())
+        context->eventLoop();
+
+      CArray<float, 6> data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size), neverDeleteData);
+      CArray<double, 6> data(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size);
       data = data_tmp;
-      CField::get(fieldid_str)->setData(data);
+      field->setData(data);
 
       CTimer::get("XIOS send field").suspend();
@@ -745,24 +899,10 @@
       std::string fieldid_str;
       if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
-
-      CTimer::get("XIOS").resume();
-      CTimer::get("XIOS send field").resume();
-
-      CContext* context = CContext::getCurrent();
-      if (!context->hasServer && !context->client->isAttachedModeEnabled())
-        context->eventLoop();
-//ym        context->checkBuffersAndListen();
-
-      CArray<float, 6> data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size), neverDeleteData);
-      CArray<double, 6> data(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size);
-      data = data_tmp;
-      CField::get(fieldid_str)->setData(data);
-
-      CTimer::get("XIOS send field").suspend();
-      CTimer::get("XIOS").suspend();
-    }
-   CATCH_DUMP_STACK
-
-   void cxios_write_data_k47(const char* fieldid, int fieldid_size, float* data_k4,
+      cxios_write_data_k46_hdl(CField::get(fieldid_str), data_k4, data_0size, data_1size, data_2size, data_3size, data_4size, data_5size) ;
+    }
+   CATCH_DUMP_STACK
+
+
+   void cxios_write_data_k47_hdl(CField* field, float* data_k4,
                              int data_0size, int data_1size, int data_2size,
                              int data_3size, int data_4size, int data_5size,
@@ -770,27 +910,54 @@
    TRY
    {
-      std::string fieldid_str;
-      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
-
-      CTimer::get("XIOS").resume();
-      CTimer::get("XIOS send field").resume();
-
-      CContext* context = CContext::getCurrent();
-      if (!context->hasServer && !context->client->isAttachedModeEnabled())
-        context->eventLoop();
-//ym        context->checkBuffersAndListen();
+      CTimer::get("XIOS").resume();
+      CTimer::get("XIOS send field").resume();
+
+      CContext* context = CContext::getCurrent();
+      if (!context->hasServer && !context->client->isAttachedModeEnabled())
+        context->eventLoop();
 
       CArray<float, 7> data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size), neverDeleteData);
       CArray<double, 7> data(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size);
       data = data_tmp;
-      CField::get(fieldid_str)->setData(data);
-
-      CTimer::get("XIOS send field").suspend();
-      CTimer::get("XIOS").suspend();
-    }
-   CATCH_DUMP_STACK
+      field->setData(data);
+
+      CTimer::get("XIOS send field").suspend();
+      CTimer::get("XIOS").suspend();
+    }
+   CATCH_DUMP_STACK
+
+  void cxios_write_data_k47(const char* fieldid, int fieldid_size, float* data_k4,
+                             int data_0size, int data_1size, int data_2size,
+                             int data_3size, int data_4size, int data_5size,
+                             int data_6size)
+   TRY
+   {
+      std::string fieldid_str;
+      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
+      cxios_write_data_k47_hdl(CField::get(fieldid_str), data_k4, data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size) ;
+    }
+   CATCH_DUMP_STACK
+
 
    // ---------------------- Lecture des donnÃ©es ------------------------------
 
+   void cxios_read_data_k80_hdl(CField* field, double* data_k8, int data_Xsize)
+   TRY
+   {
+      CTimer::get("XIOS").resume();
+      CTimer::get("XIOS recv field").resume();
+
+      CContext* context = CContext::getCurrent();
+      if (!context->hasServer && !context->client->isAttachedModeEnabled())
+        context->eventLoop();
+
+      CArray<double, 1> data(data_k8, shape(data_Xsize), neverDeleteData);
+      field->getData(data);
+
+      CTimer::get("XIOS recv field").suspend();
+      CTimer::get("XIOS").suspend();
+   }
+   CATCH_DUMP_STACK
+
    void cxios_read_data_k80(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize)
    TRY
@@ -798,15 +965,21 @@
       std::string fieldid_str;
       if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
-
-      CTimer::get("XIOS").resume();
-      CTimer::get("XIOS recv field").resume();
-
-      CContext* context = CContext::getCurrent();
-      if (!context->hasServer && !context->client->isAttachedModeEnabled())
-        context->eventLoop();
-//ym        context->checkBuffersAndListen();
+      cxios_read_data_k80_hdl(CField::get(fieldid_str), data_k8, data_Xsize) ;
+   }
+   CATCH_DUMP_STACK
+   
+   
+   void cxios_read_data_k81_hdl(CField* field, double* data_k8, int data_Xsize)
+   TRY
+   {
+      CTimer::get("XIOS").resume();
+      CTimer::get("XIOS recv field").resume();
+
+      CContext* context = CContext::getCurrent();
+      if (!context->hasServer && !context->client->isAttachedModeEnabled())
+        context->eventLoop();
 
       CArray<double, 1> data(data_k8, shape(data_Xsize), neverDeleteData);
-      CField::get(fieldid_str)->getData(data);
+      field->getData(data);
 
       CTimer::get("XIOS recv field").suspend();
@@ -820,15 +993,20 @@
       std::string fieldid_str;
       if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
-
-      CTimer::get("XIOS").resume();
-      CTimer::get("XIOS recv field").resume();
-
-      CContext* context = CContext::getCurrent();
-      if (!context->hasServer && !context->client->isAttachedModeEnabled())
-        context->eventLoop();
-//ym        context->checkBuffersAndListen();
-
-      CArray<double, 1> data(data_k8, shape(data_Xsize), neverDeleteData);
-      CField::get(fieldid_str)->getData(data);
+      cxios_read_data_k81_hdl(CField::get(fieldid_str), data_k8, data_Xsize) ;
+   }
+   CATCH_DUMP_STACK
+
+   void cxios_read_data_k82_hdl(CField* field, double* data_k8, int data_Xsize, int data_Ysize)
+   TRY
+   {
+      CTimer::get("XIOS").resume();
+      CTimer::get("XIOS recv field").resume();
+
+      CContext* context = CContext::getCurrent();
+      if (!context->hasServer && !context->client->isAttachedModeEnabled())
+        context->eventLoop();
+
+      CArray<double, 2>data(data_k8, shape(data_Xsize, data_Ysize), neverDeleteData);
+      field->getData(data);
 
       CTimer::get("XIOS recv field").suspend();
@@ -842,20 +1020,27 @@
       std::string fieldid_str;
       if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
-
-      CTimer::get("XIOS").resume();
-      CTimer::get("XIOS recv field").resume();
-
-      CContext* context = CContext::getCurrent();
-      if (!context->hasServer && !context->client->isAttachedModeEnabled())
-        context->eventLoop();
-//ym        context->checkBuffersAndListen();
-
-      CArray<double, 2>data(data_k8, shape(data_Xsize, data_Ysize), neverDeleteData);
-      CField::get(fieldid_str)->getData(data);
-
-      CTimer::get("XIOS recv field").suspend();
-      CTimer::get("XIOS").suspend();
-   }
-   CATCH_DUMP_STACK
+      cxios_read_data_k82_hdl(CField::get(fieldid_str), data_k8, data_Xsize, data_Ysize) ;
+   }
+   CATCH_DUMP_STACK
+
+
+   void cxios_read_data_k83_hdl(CField* field, double* data_k8, int data_Xsize, int data_Ysize, int data_Zsize)
+   TRY
+   {
+      CTimer::get("XIOS").resume();
+      CTimer::get("XIOS recv field").resume();
+
+      CContext* context = CContext::getCurrent();
+      if (!context->hasServer && !context->client->isAttachedModeEnabled())
+        context->eventLoop();
+
+      CArray<double, 3>data(data_k8, shape(data_Xsize, data_Ysize, data_Zsize), neverDeleteData);
+      field->getData(data);
+
+      CTimer::get("XIOS recv field").suspend();
+      CTimer::get("XIOS").suspend();
+   }
+   CATCH_DUMP_STACK
+
 
    void cxios_read_data_k83(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize, int data_Ysize, int data_Zsize)
@@ -864,15 +1049,22 @@
       std::string fieldid_str;
       if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
-
-      CTimer::get("XIOS").resume();
-      CTimer::get("XIOS recv field").resume();
-
-      CContext* context = CContext::getCurrent();
-      if (!context->hasServer && !context->client->isAttachedModeEnabled())
-        context->eventLoop();
-//ym        context->checkBuffersAndListen();
-
-      CArray<double, 3>data(data_k8, shape(data_Xsize, data_Ysize, data_Zsize), neverDeleteData);
-      CField::get(fieldid_str)->getData(data);
+      cxios_read_data_k83_hdl(CField::get(fieldid_str), data_k8, data_Xsize, data_Ysize, data_Zsize) ;
+   }
+   CATCH_DUMP_STACK
+
+   void cxios_read_data_k84_hdl(CField* field, double* data_k8,
+                            int data_0size, int data_1size, int data_2size,
+                            int data_3size)
+   TRY
+   {
+      CTimer::get("XIOS").resume();
+      CTimer::get("XIOS recv field").resume();
+
+      CContext* context = CContext::getCurrent();
+      if (!context->hasServer && !context->client->isAttachedModeEnabled())
+        context->eventLoop();
+
+      CArray<double, 4>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size), neverDeleteData);
+      field->getData(data);
 
       CTimer::get("XIOS recv field").suspend();
@@ -888,15 +1080,22 @@
       std::string fieldid_str;
       if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
-
-      CTimer::get("XIOS").resume();
-      CTimer::get("XIOS recv field").resume();
-
-      CContext* context = CContext::getCurrent();
-      if (!context->hasServer && !context->client->isAttachedModeEnabled())
-        context->eventLoop();
-//ym        context->checkBuffersAndListen();
-
-      CArray<double, 4>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size), neverDeleteData);
-      CField::get(fieldid_str)->getData(data);
+      cxios_read_data_k84_hdl(CField::get(fieldid_str), data_k8, data_0size, data_1size, data_2size, data_3size) ;
+   }
+   CATCH_DUMP_STACK
+
+   void cxios_read_data_k85_hdl(CField* field, double* data_k8,
+                            int data_0size, int data_1size, int data_2size,
+                            int data_3size, int data_4size)
+   TRY
+   {
+      CTimer::get("XIOS").resume();
+      CTimer::get("XIOS recv field").resume();
+
+      CContext* context = CContext::getCurrent();
+      if (!context->hasServer && !context->client->isAttachedModeEnabled())
+        context->eventLoop();
+
+      CArray<double, 5>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size), neverDeleteData);
+      field->getData(data);
 
       CTimer::get("XIOS recv field").suspend();
@@ -912,15 +1111,22 @@
       std::string fieldid_str;
       if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
-
-      CTimer::get("XIOS").resume();
-      CTimer::get("XIOS recv field").resume();
-
-      CContext* context = CContext::getCurrent();
-      if (!context->hasServer && !context->client->isAttachedModeEnabled())
-        context->eventLoop();
-//ym        context->checkBuffersAndListen();
-
-      CArray<double, 5>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size), neverDeleteData);
-      CField::get(fieldid_str)->getData(data);
+      cxios_read_data_k85_hdl(CField::get(fieldid_str), data_k8, data_0size, data_1size, data_2size, data_3size, data_4size) ;
+   }
+   CATCH_DUMP_STACK
+
+   void cxios_read_data_k86_hdl(CField* field, double* data_k8,
+                            int data_0size, int data_1size, int data_2size,
+                            int data_3size, int data_4size, int data_5size)
+   TRY
+   {
+      CTimer::get("XIOS").resume();
+      CTimer::get("XIOS recv field").resume();
+
+      CContext* context = CContext::getCurrent();
+      if (!context->hasServer && !context->client->isAttachedModeEnabled())
+        context->eventLoop();
+
+      CArray<double, 6>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size), neverDeleteData);
+      field->getData(data);
 
       CTimer::get("XIOS recv field").suspend();
@@ -936,22 +1142,9 @@
       std::string fieldid_str;
       if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
-
-      CTimer::get("XIOS").resume();
-      CTimer::get("XIOS recv field").resume();
-
-      CContext* context = CContext::getCurrent();
-      if (!context->hasServer && !context->client->isAttachedModeEnabled())
-        context->eventLoop();
-//ym        context->checkBuffersAndListen();
-
-      CArray<double, 6>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size), neverDeleteData);
-      CField::get(fieldid_str)->getData(data);
-
-      CTimer::get("XIOS recv field").suspend();
-      CTimer::get("XIOS").suspend();
-   }
-   CATCH_DUMP_STACK
-
-   void cxios_read_data_k87(const char* fieldid, int fieldid_size, double* data_k8,
+      cxios_read_data_k86_hdl(CField::get(fieldid_str), data_k8, data_0size, data_1size, data_2size, data_3size, data_4size, data_5size) ;
+   }
+   CATCH_DUMP_STACK
+
+   void cxios_read_data_k87_hdl(CField* field, double* data_k8,
                             int data_0size, int data_1size, int data_2size,
                             int data_3size, int data_4size, int data_5size,
@@ -959,39 +1152,48 @@
    TRY
    {
-      std::string fieldid_str;
-      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
-
-      CTimer::get("XIOS").resume();
-      CTimer::get("XIOS recv field").resume();
-
-      CContext* context = CContext::getCurrent();
-      if (!context->hasServer && !context->client->isAttachedModeEnabled())
-        context->eventLoop();
-//ym        context->checkBuffersAndListen();
+      CTimer::get("XIOS").resume();
+      CTimer::get("XIOS recv field").resume();
+
+      CContext* context = CContext::getCurrent();
+      if (!context->hasServer && !context->client->isAttachedModeEnabled())
+        context->eventLoop();
 
       CArray<double, 7>data(data_k8, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size), neverDeleteData);
-      CField::get(fieldid_str)->getData(data);
-
-      CTimer::get("XIOS recv field").suspend();
-      CTimer::get("XIOS").suspend();
-   }
-   CATCH_DUMP_STACK
-
-   void cxios_read_data_k40(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize)
-   TRY
-   {
-      std::string fieldid_str;
-      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
-
-      CTimer::get("XIOS").resume();
-      CTimer::get("XIOS recv field").resume();
-
-      CContext* context = CContext::getCurrent();
-      if (!context->hasServer && !context->client->isAttachedModeEnabled())
-        context->eventLoop();
-//ym        context->checkBuffersAndListen();
+      field->getData(data);
+
+      CTimer::get("XIOS recv field").suspend();
+      CTimer::get("XIOS").suspend();
+   }
+   CATCH_DUMP_STACK
+
+   void cxios_read_data_k87(const char* fieldid, int fieldid_size, double* data_k8,
+                            int data_0size, int data_1size, int data_2size,
+                            int data_3size, int data_4size, int data_5size,
+                            int data_6size)
+   TRY
+   {
+      std::string fieldid_str;
+      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
+      cxios_read_data_k87_hdl(CField::get(fieldid_str), data_k8, data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size) ;
+   }
+   CATCH_DUMP_STACK
+
+
+
+
+
+
+   void cxios_read_data_k40_hdl(CField* field, float* data_k4, int data_Xsize)
+   TRY
+   {
+      CTimer::get("XIOS").resume();
+      CTimer::get("XIOS recv field").resume();
+
+      CContext* context = CContext::getCurrent();
+      if (!context->hasServer && !context->client->isAttachedModeEnabled())
+        context->eventLoop();
 
       CArray<double, 1> data(data_Xsize);
-      CField::get(fieldid_str)->getData(data);
+      field->getData(data);
       CArray<float, 1> data_tmp(data_k4, shape(data_Xsize), neverDeleteData);
       data_tmp = data;
@@ -1002,20 +1204,27 @@
    CATCH_DUMP_STACK
 
-   void cxios_read_data_k41(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize)
-   TRY
-   {
-      std::string fieldid_str;
-      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
-
-      CTimer::get("XIOS").resume();
-      CTimer::get("XIOS recv field").resume();
-
-      CContext* context = CContext::getCurrent();
-      if (!context->hasServer && !context->client->isAttachedModeEnabled())
-        context->eventLoop();
-//ym        context->checkBuffersAndListen();
+   void cxios_read_data_k40(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize)
+   TRY
+   {
+      std::string fieldid_str;
+      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
+      cxios_read_data_k40_hdl(CField::get(fieldid_str), data_k4, data_Xsize) ;
+   }
+   CATCH_DUMP_STACK
+
+
+
+   void cxios_read_data_k41_hdl(CField* field, float* data_k4, int data_Xsize)
+   TRY
+   {
+      CTimer::get("XIOS").resume();
+      CTimer::get("XIOS recv field").resume();
+
+      CContext* context = CContext::getCurrent();
+      if (!context->hasServer && !context->client->isAttachedModeEnabled())
+        context->eventLoop();
 
       CArray<double, 1> data(data_Xsize);
-      CField::get(fieldid_str)->getData(data);
+      field->getData(data);
       CArray<float, 1> data_tmp(data_k4, shape(data_Xsize), neverDeleteData);
       data_tmp = data;
@@ -1026,20 +1235,28 @@
    CATCH_DUMP_STACK
 
-   void cxios_read_data_k42(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize, int data_Ysize)
-   TRY
-   {
-      std::string fieldid_str;
-      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
-
-      CTimer::get("XIOS").resume();
-      CTimer::get("XIOS recv field").resume();
-
-      CContext* context = CContext::getCurrent();
-      if (!context->hasServer && !context->client->isAttachedModeEnabled())
-        context->eventLoop();
-//ym        context->checkBuffersAndListen();
+   void cxios_read_data_k41(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize)
+   TRY
+   {
+      std::string fieldid_str;
+      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
+      cxios_read_data_k41_hdl(CField::get(fieldid_str), data_k4, data_Xsize) ;
+   }
+   CATCH_DUMP_STACK
+
+
+
+
+   void cxios_read_data_k42_hdl(CField* field, float* data_k4, int data_Xsize, int data_Ysize)
+   TRY
+   {
+      CTimer::get("XIOS").resume();
+      CTimer::get("XIOS recv field").resume();
+
+      CContext* context = CContext::getCurrent();
+      if (!context->hasServer && !context->client->isAttachedModeEnabled())
+        context->eventLoop();
 
       CArray<double, 2> data(data_Xsize, data_Ysize);
-      CField::get(fieldid_str)->getData(data);
+      field->getData(data);
       CArray<float, 2> data_tmp(data_k4, shape(data_Xsize, data_Ysize), neverDeleteData);
       data_tmp = data;
@@ -1050,20 +1267,27 @@
    CATCH_DUMP_STACK
 
-   void cxios_read_data_k43(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize, int data_Ysize, int data_Zsize)
-   TRY
-   {
-      std::string fieldid_str;
-      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
-
-      CTimer::get("XIOS").resume();
-      CTimer::get("XIOS recv field").resume();
-
-      CContext* context = CContext::getCurrent();
-      if (!context->hasServer && !context->client->isAttachedModeEnabled())
-        context->eventLoop();
-//ym        context->checkBuffersAndListen();
+   void cxios_read_data_k42(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize, int data_Ysize)
+   TRY
+   {
+      std::string fieldid_str;
+      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
+      cxios_read_data_k42_hdl(CField::get(fieldid_str), data_k4, data_Xsize, data_Ysize) ;
+   }
+   CATCH_DUMP_STACK
+
+
+
+   void cxios_read_data_k43_hdl(CField* field, float* data_k4, int data_Xsize, int data_Ysize, int data_Zsize)
+   TRY
+   {
+      CTimer::get("XIOS").resume();
+      CTimer::get("XIOS recv field").resume();
+
+      CContext* context = CContext::getCurrent();
+      if (!context->hasServer && !context->client->isAttachedModeEnabled())
+        context->eventLoop();
 
       CArray<double, 3> data(data_Xsize, data_Ysize, data_Zsize);
-      CField::get(fieldid_str)->getData(data);
+      field->getData(data);
       CArray<float, 3> data_tmp(data_k4, shape(data_Xsize, data_Ysize, data_Zsize), neverDeleteData);
       data_tmp = data;
@@ -1074,22 +1298,28 @@
    CATCH_DUMP_STACK
 
-   void cxios_read_data_k44(const char* fieldid, int fieldid_size, float* data_k4,
+   void cxios_read_data_k43(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize, int data_Ysize, int data_Zsize)
+   TRY
+   {
+      std::string fieldid_str;
+      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
+      cxios_read_data_k43_hdl(CField::get(fieldid_str), data_k4,data_Xsize, data_Ysize, data_Zsize) ;
+    }
+   CATCH_DUMP_STACK
+
+
+   void cxios_read_data_k44_hdl(CField* field, float* data_k4,
                             int data_0size, int data_1size, int data_2size,
                             int data_3size)
    TRY
    {
-      std::string fieldid_str;
-      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
-
-      CTimer::get("XIOS").resume();
-      CTimer::get("XIOS recv field").resume();
-
-      CContext* context = CContext::getCurrent();
-      if (!context->hasServer && !context->client->isAttachedModeEnabled())
-        context->eventLoop();
-//ym        context->checkBuffersAndListen();
+      CTimer::get("XIOS").resume();
+      CTimer::get("XIOS recv field").resume();
+
+      CContext* context = CContext::getCurrent();
+      if (!context->hasServer && !context->client->isAttachedModeEnabled())
+        context->eventLoop();
 
       CArray<double, 4> data(data_0size, data_1size, data_2size, data_3size);
-      CField::get(fieldid_str)->getData(data);
+      field->getData(data);
       CArray<float, 4> data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size), neverDeleteData);
       data_tmp = data;
@@ -1100,22 +1330,31 @@
    CATCH_DUMP_STACK
 
-   void cxios_read_data_k45(const char* fieldid, int fieldid_size, float* data_k4,
+   void cxios_read_data_k44(const char* fieldid, int fieldid_size, float* data_k4,
+                            int data_0size, int data_1size, int data_2size,
+                            int data_3size)
+   TRY
+   {
+      std::string fieldid_str;
+      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
+      cxios_read_data_k44_hdl(CField::get(fieldid_str), data_k4, data_0size, data_1size, data_2size, data_3size) ;
+    }
+   CATCH_DUMP_STACK
+
+
+
+   void cxios_read_data_k45_hdl(CField* field, float* data_k4,
                             int data_0size, int data_1size, int data_2size,
                             int data_3size, int data_4size)
    TRY
    {
-      std::string fieldid_str;
-      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
-
-      CTimer::get("XIOS").resume();
-      CTimer::get("XIOS recv field").resume();
-
-      CContext* context = CContext::getCurrent();
-      if (!context->hasServer && !context->client->isAttachedModeEnabled())
-        context->eventLoop();
-//ym        context->checkBuffersAndListen();
+      CTimer::get("XIOS").resume();
+      CTimer::get("XIOS recv field").resume();
+
+      CContext* context = CContext::getCurrent();
+      if (!context->hasServer && !context->client->isAttachedModeEnabled())
+        context->eventLoop();
 
       CArray<double, 5> data(data_0size, data_1size, data_2size, data_3size, data_4size);
-      CField::get(fieldid_str)->getData(data);
+      field->getData(data);
       CArray<float, 5> data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size, data_4size), neverDeleteData);
       data_tmp = data;
@@ -1126,22 +1365,30 @@
    CATCH_DUMP_STACK
 
-   void cxios_read_data_k46(const char* fieldid, int fieldid_size, float* data_k4,
+   void cxios_read_data_k45(const char* fieldid, int fieldid_size, float* data_k4,
+                            int data_0size, int data_1size, int data_2size,
+                            int data_3size, int data_4size)
+   TRY
+   {
+      std::string fieldid_str;
+      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
+      cxios_read_data_k45_hdl(CField::get(fieldid_str), data_k4, data_0size, data_1size, data_2size, data_3size, data_4size) ;
+    }
+   CATCH_DUMP_STACK
+
+
+   void cxios_read_data_k46_hdl(CField* field, float* data_k4,
                             int data_0size, int data_1size, int data_2size,
                             int data_3size, int data_4size, int data_5size)
    TRY
    {
-      std::string fieldid_str;
-      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
-
-      CTimer::get("XIOS").resume();
-      CTimer::get("XIOS recv field").resume();
-
-      CContext* context = CContext::getCurrent();
-      if (!context->hasServer && !context->client->isAttachedModeEnabled())
-        context->eventLoop();
-//ym        context->checkBuffersAndListen();
+      CTimer::get("XIOS").resume();
+      CTimer::get("XIOS recv field").resume();
+
+      CContext* context = CContext::getCurrent();
+      if (!context->hasServer && !context->client->isAttachedModeEnabled())
+        context->eventLoop();
 
       CArray<double, 6> data(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size);
-      CField::get(fieldid_str)->getData(data);
+      field->getData(data);
       CArray<float, 6> data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size), neverDeleteData);
       data_tmp = data;
@@ -1152,5 +1399,18 @@
    CATCH_DUMP_STACK
 
-   void cxios_read_data_k47(const char* fieldid, int fieldid_size, float* data_k4,
+   void cxios_read_data_k46(const char* fieldid, int fieldid_size, float* data_k4,
+                            int data_0size, int data_1size, int data_2size,
+                            int data_3size, int data_4size, int data_5size)
+   TRY
+   {
+      std::string fieldid_str;
+      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
+      cxios_read_data_k46_hdl(CField::get(fieldid_str), data_k4, data_0size, data_1size, data_2size, data_3size, data_4size, data_5size) ;
+    }
+   CATCH_DUMP_STACK
+
+
+
+   void cxios_read_data_k47_hdl(CField* field, float* data_k4,
                             int data_0size, int data_1size, int data_2size,
                             int data_3size, int data_4size, int data_5size,
@@ -1158,17 +1418,13 @@
    TRY
    {
-      std::string fieldid_str;
-      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
-
-      CTimer::get("XIOS").resume();
-      CTimer::get("XIOS recv field").resume();
-
-      CContext* context = CContext::getCurrent();
-      if (!context->hasServer && !context->client->isAttachedModeEnabled())
-        context->eventLoop();
-//ym        context->checkBuffersAndListen();
+      CTimer::get("XIOS").resume();
+      CTimer::get("XIOS recv field").resume();
+
+      CContext* context = CContext::getCurrent();
+      if (!context->hasServer && !context->client->isAttachedModeEnabled())
+        context->eventLoop();
 
       CArray<double, 7> data(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size);
-      CField::get(fieldid_str)->getData(data);
+      field->getData(data);
       CArray<float, 7> data_tmp(data_k4, shape(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size), neverDeleteData);
       data_tmp = data;
@@ -1178,3 +1434,15 @@
     }
    CATCH_DUMP_STACK
+ 
+   void cxios_read_data_k47(const char* fieldid, int fieldid_size, float* data_k4,
+                            int data_0size, int data_1size, int data_2size,
+                            int data_3size, int data_4size, int data_5size,
+                            int data_6size)
+   TRY
+   {
+      std::string fieldid_str;
+      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
+      cxios_read_data_k47_hdl(CField::get(fieldid_str), data_k4, data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size) ;
+    }
+   CATCH_DUMP_STACK
 } // extern "C"
Index: XIOS/dev/dev_trunk_graph/src/interface/fortran/context_interface.f90
===================================================================
--- XIOS/dev/dev_trunk_graph/src/interface/fortran/context_interface.f90	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/interface/fortran/context_interface.f90	(revision 2137)
@@ -16,4 +16,11 @@
       END SUBROUTINE cxios_context_get_current
 
+      SUBROUTINE cxios_context_get_id(context, idt, idt_size) BIND(C)
+         import C_CHAR, C_INTPTR_T, C_INT
+         INTEGER (kind = C_INTPTR_T) :: context
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: idt
+         INTEGER  (kind = C_INT)     , VALUE        :: idt_size
+     END SUBROUTINE cxios_context_get_id
+
       SUBROUTINE cxios_context_set_current(context, withswap) BIND(C)
          import C_BOOL, C_INT, C_INTPTR_T
Index: XIOS/dev/dev_trunk_graph/src/interface/fortran/icontext.F90
===================================================================
--- XIOS/dev/dev_trunk_graph/src/interface/fortran/icontext.F90	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/interface/fortran/icontext.F90	(revision 2137)
@@ -17,4 +17,8 @@
    END INTERFACE xios(set_current_context)
 
+   INTERFACE xios(get_current_context)
+      MODULE PROCEDURE xios(get_current_context_hdl), xios(get_current_context_id)
+   END INTERFACE xios(get_current_context)
+
    CONTAINS ! Fonctions disponibles pour les utilisateurs.
 
@@ -27,13 +31,23 @@
    END SUBROUTINE xios(get_context_handle)
 
-   SUBROUTINE xios(get_current_context)(context)
+   SUBROUTINE xios(get_current_context_hdl)(context)
       IMPLICIT NONE
 
-      TYPE(txios(context)), INTENT(IN) :: context
+      TYPE(txios(context)), INTENT(OUT) :: context
 
       CALL cxios_context_get_current(context%daddr)
 
-   END SUBROUTINE xios(get_current_context)
+   END SUBROUTINE xios(get_current_context_hdl)
 
+   SUBROUTINE xios(get_current_context_id)(idt)
+      IMPLICIT NONE
+      CHARACTER(len = *) , INTENT(OUT) :: idt
+      TYPE(txios(context)) :: context
+
+      CALL cxios_context_get_current(context%daddr)
+      CALL cxios_context_get_id(context%daddr, idt, len(idt))
+
+   END SUBROUTINE xios(get_current_context_id)
+   
    SUBROUTINE xios(set_current_context_hdl)(context, withswap)
       IMPLICIT NONE
Index: XIOS/dev/dev_trunk_graph/src/interface/fortran/idata.F90
===================================================================
--- XIOS/dev/dev_trunk_graph/src/interface/fortran/idata.F90	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/interface/fortran/idata.F90	(revision 2137)
@@ -4,4 +4,5 @@
    USE, INTRINSIC :: ISO_C_BINDING
    USE ICONTEXT
+   USE IFIELD
 
    INTERFACE ! Ne pas appeler directement/Interface FORTRAN 2003 <-> C99
@@ -52,4 +53,11 @@
       END SUBROUTINE cxios_solve_inheritance
 
+      SUBROUTINE cxios_write_data_k80_hdl(field_hdl, data_k8, data_Xsize) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE      :: field_hdl
+         REAL     (kind = C_DOUBLE)               :: data_k8
+         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize
+      END SUBROUTINE cxios_write_data_k80_hdl
+
       SUBROUTINE cxios_write_data_k80(fieldid, fieldid_size, data_k8, data_Xsize) BIND(C)
          USE ISO_C_BINDING
@@ -60,4 +68,11 @@
       END SUBROUTINE cxios_write_data_k80
 
+      SUBROUTINE cxios_write_data_k81_hdl(field_hdl, data_k8, data_Xsize) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE      :: field_hdl
+         REAL     (kind = C_DOUBLE), DIMENSION(*) :: data_k8
+         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize
+      END SUBROUTINE cxios_write_data_k81_hdl
+
       SUBROUTINE cxios_write_data_k81(fieldid, fieldid_size, data_k8, data_Xsize) BIND(C)
          USE ISO_C_BINDING
@@ -67,4 +82,11 @@
          INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize
       END SUBROUTINE cxios_write_data_k81
+
+      SUBROUTINE cxios_write_data_k82_hdl(field_hdl, data_k8, data_Xsize, data_Ysize) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE      :: field_hdl
+         REAL     (kind = C_DOUBLE), DIMENSION(*) :: data_k8
+         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize, data_Ysize
+      END SUBROUTINE cxios_write_data_k82_hdl
 
       SUBROUTINE cxios_write_data_k82(fieldid, fieldid_size, data_k8, data_Xsize, data_Ysize) BIND(C)
@@ -76,4 +98,11 @@
       END SUBROUTINE cxios_write_data_k82
 
+      SUBROUTINE cxios_write_data_k83_hdl(field_hdl, data_k8, data_Xsize, data_Ysize, data_Zsize) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE      :: field_hdl
+         REAL     (kind = C_DOUBLE), DIMENSION(*) :: data_k8
+         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize, data_Ysize, data_Zsize
+      END SUBROUTINE cxios_write_data_k83_hdl
+
       SUBROUTINE cxios_write_data_k83(fieldid, fieldid_size, data_k8, data_Xsize, data_Ysize, data_Zsize) BIND(C)
          USE ISO_C_BINDING
@@ -84,4 +113,14 @@
       END SUBROUTINE cxios_write_data_k83
 
+      SUBROUTINE cxios_write_data_k84_hdl(field_hdl, data_k8, &
+                                      data_0size, data_1size, data_2size, &
+                                      data_3size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE      :: field_hdl
+         REAL     (kind = C_DOUBLE), DIMENSION(*) :: data_k8
+         INTEGER  (kind = C_INT)   , VALUE        :: data_0size, data_1size, data_2size
+         INTEGER  (kind = C_INT)   , VALUE        :: data_3size
+      END SUBROUTINE cxios_write_data_k84_hdl
+
       SUBROUTINE cxios_write_data_k84(fieldid, fieldid_size, data_k8, &
                                       data_0size, data_1size, data_2size, &
@@ -95,4 +134,14 @@
       END SUBROUTINE cxios_write_data_k84
 
+      SUBROUTINE cxios_write_data_k85_hdl(field_hdl, data_k8, &
+                                      data_0size, data_1size, data_2size, &
+                                      data_3size, data_4size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE      :: field_hdl
+         REAL     (kind = C_DOUBLE), DIMENSION(*) :: data_k8
+         INTEGER  (kind = C_INT)   , VALUE        :: data_0size, data_1size, data_2size
+         INTEGER  (kind = C_INT)   , VALUE        :: data_3size, data_4size
+      END SUBROUTINE cxios_write_data_k85_hdl
+
       SUBROUTINE cxios_write_data_k85(fieldid, fieldid_size, data_k8, &
                                       data_0size, data_1size, data_2size, &
@@ -106,4 +155,14 @@
       END SUBROUTINE cxios_write_data_k85
 
+      SUBROUTINE cxios_write_data_k86_hdl(field_hdl, data_k8, &
+                                      data_0size, data_1size, data_2size, &
+                                      data_3size, data_4size, data_5size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE      :: field_hdl
+         REAL     (kind = C_DOUBLE), DIMENSION(*) :: data_k8
+         INTEGER  (kind = C_INT)   , VALUE        :: data_0size, data_1size, data_2size
+         INTEGER  (kind = C_INT)   , VALUE        :: data_3size, data_4size, data_5size
+      END SUBROUTINE cxios_write_data_k86_hdl
+
       SUBROUTINE cxios_write_data_k86(fieldid, fieldid_size, data_k8, &
                                       data_0size, data_1size, data_2size, &
@@ -117,9 +176,21 @@
       END SUBROUTINE cxios_write_data_k86
 
-      SUBROUTINE cxios_write_data_k87(fieldid, fieldid_size, data_k8, &
+      SUBROUTINE cxios_write_data_k87_hdl(field_hdl, data_k8, &
                                       data_0size, data_1size, data_2size, &
                                       data_3size, data_4size, data_5size, &
                                       data_6size) BIND(C)
          USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE      :: field_hdl
+         REAL     (kind = C_DOUBLE), DIMENSION(*) :: data_k8
+         INTEGER  (kind = C_INT)   , VALUE        :: data_0size, data_1size, data_2size
+         INTEGER  (kind = C_INT)   , VALUE        :: data_3size, data_4size, data_5size
+         INTEGER  (kind = C_INT)   , VALUE        :: data_6size
+      END SUBROUTINE cxios_write_data_k87_hdl
+
+      SUBROUTINE cxios_write_data_k87(fieldid, fieldid_size, data_k8, &
+                                      data_0size, data_1size, data_2size, &
+                                      data_3size, data_4size, data_5size, &
+                                      data_6size) BIND(C)
+         USE ISO_C_BINDING
          CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: fieldid
          REAL     (kind = C_DOUBLE), DIMENSION(*) :: data_k8
@@ -130,4 +201,11 @@
       END SUBROUTINE cxios_write_data_k87
 
+      SUBROUTINE cxios_write_data_k40_hdl(field_hdl, data_k4, data_Xsize) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE      :: field_hdl
+         REAL     (kind = C_FLOAT)                :: data_k4
+         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize
+      END SUBROUTINE cxios_write_data_k40_hdl
+
       SUBROUTINE cxios_write_data_k40(fieldid, fieldid_size, data_k4, data_Xsize) BIND(C)
          USE ISO_C_BINDING
@@ -138,4 +216,11 @@
       END SUBROUTINE cxios_write_data_k40
 
+      SUBROUTINE cxios_write_data_k41_hdl(field_hdl, data_k4, data_Xsize) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE      :: field_hdl
+         REAL     (kind = C_FLOAT) , DIMENSION(*) :: data_k4
+         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize
+      END SUBROUTINE cxios_write_data_k41_hdl
+
       SUBROUTINE cxios_write_data_k41(fieldid, fieldid_size, data_k4, data_Xsize) BIND(C)
          USE ISO_C_BINDING
@@ -146,4 +231,11 @@
       END SUBROUTINE cxios_write_data_k41
 
+      SUBROUTINE cxios_write_data_k42_hdl(field_hdl, data_k4, data_Xsize, data_Ysize) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE      :: field_hdl
+         REAL     (kind = C_FLOAT) , DIMENSION(*) :: data_k4
+         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize, data_Ysize
+      END SUBROUTINE cxios_write_data_k42_hdl
+ 
       SUBROUTINE cxios_write_data_k42(fieldid, fieldid_size, data_k4, data_Xsize, data_Ysize) BIND(C)
          USE ISO_C_BINDING
@@ -154,4 +246,11 @@
       END SUBROUTINE cxios_write_data_k42
 
+      SUBROUTINE cxios_write_data_k43_hdl(field_hdl, data_k4, data_Xsize, data_Ysize, data_Zsize) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE      :: field_hdl
+         REAL     (kind = C_FLOAT) , DIMENSION(*) :: data_k4
+         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize, data_Ysize, data_Zsize
+      END SUBROUTINE cxios_write_data_k43_hdl
+
       SUBROUTINE cxios_write_data_k43(fieldid, fieldid_size, data_k4, data_Xsize, data_Ysize, data_Zsize) BIND(C)
          USE ISO_C_BINDING
@@ -162,4 +261,14 @@
       END SUBROUTINE cxios_write_data_k43
 
+      SUBROUTINE cxios_write_data_k44_hdl(field_hdl, data_k4, &
+                                      data_0size, data_1size, data_2size, &
+                                      data_3size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE      :: field_hdl
+         REAL     (kind = C_FLOAT) , DIMENSION(*) :: data_k4
+         INTEGER  (kind = C_INT)   , VALUE        :: data_0size, data_1size, data_2size
+         INTEGER  (kind = C_INT)   , VALUE        :: data_3size
+      END SUBROUTINE cxios_write_data_k44_hdl
+
       SUBROUTINE cxios_write_data_k44(fieldid, fieldid_size, data_k4, &
                                       data_0size, data_1size, data_2size, &
@@ -173,4 +282,14 @@
       END SUBROUTINE cxios_write_data_k44
 
+      SUBROUTINE cxios_write_data_k45_hdl(field_hdl, data_k4, &
+                                      data_0size, data_1size, data_2size, &
+                                      data_3size, data_4size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE      :: field_hdl
+         REAL     (kind = C_FLOAT) , DIMENSION(*) :: data_k4
+         INTEGER  (kind = C_INT)   , VALUE        :: data_0size, data_1size, data_2size
+         INTEGER  (kind = C_INT)   , VALUE        :: data_3size, data_4size
+      END SUBROUTINE cxios_write_data_k45_hdl
+
       SUBROUTINE cxios_write_data_k45(fieldid, fieldid_size, data_k4, &
                                       data_0size, data_1size, data_2size, &
@@ -184,4 +303,14 @@
       END SUBROUTINE cxios_write_data_k45
 
+      SUBROUTINE cxios_write_data_k46_hdl(field_hdl, data_k4, &
+                                      data_0size, data_1size, data_2size, &
+                                      data_3size, data_4size, data_5size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE      :: field_hdl
+         REAL     (kind = C_FLOAT) , DIMENSION(*) :: data_k4
+         INTEGER  (kind = C_INT)   , VALUE        :: data_0size, data_1size, data_2size
+         INTEGER  (kind = C_INT)   , VALUE        :: data_3size, data_4size, data_5size
+      END SUBROUTINE cxios_write_data_k46_hdl
+ 
       SUBROUTINE cxios_write_data_k46(fieldid, fieldid_size, data_k4, &
                                       data_0size, data_1size, data_2size, &
@@ -195,9 +324,21 @@
       END SUBROUTINE cxios_write_data_k46
 
-      SUBROUTINE cxios_write_data_k47(fieldid, fieldid_size, data_k4, &
+      SUBROUTINE cxios_write_data_k47_hdl(field_hdl, data_k4, &
                                       data_0size, data_1size, data_2size, &
                                       data_3size, data_4size, data_5size, &
                                       data_6size) BIND(C)
          USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE      :: field_hdl
+         REAL     (kind = C_FLOAT) , DIMENSION(*) :: data_k4
+         INTEGER  (kind = C_INT)   , VALUE        :: data_0size, data_1size, data_2size
+         INTEGER  (kind = C_INT)   , VALUE        :: data_3size, data_4size, data_5size
+         INTEGER  (kind = C_INT)   , VALUE        :: data_6size
+      END SUBROUTINE cxios_write_data_k47_hdl
+
+      SUBROUTINE cxios_write_data_k47(fieldid, fieldid_size, data_k4, &
+                                      data_0size, data_1size, data_2size, &
+                                      data_3size, data_4size, data_5size, &
+                                      data_6size) BIND(C)
+         USE ISO_C_BINDING
          CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: fieldid
          REAL     (kind = C_FLOAT) , DIMENSION(*) :: data_k4
@@ -208,5 +349,13 @@
       END SUBROUTINE cxios_write_data_k47
 
+
       ! Read data
+      SUBROUTINE cxios_read_data_k80_hdl(field_hdl, data_k8, data_Xsize) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE      :: field_hdl
+         REAL     (kind = C_DOUBLE)               :: data_k8
+         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize
+      END SUBROUTINE cxios_read_data_k80_hdl
+
       SUBROUTINE cxios_read_data_k80(fieldid, fieldid_size, data_k8, data_Xsize) BIND(C)
          USE ISO_C_BINDING
@@ -217,4 +366,11 @@
       END SUBROUTINE cxios_read_data_k80
 
+      SUBROUTINE cxios_read_data_k81_hdl(field_hdl, data_k8, data_Xsize) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE      :: field_hdl
+         REAL     (kind = C_DOUBLE), DIMENSION(*) :: data_k8
+         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize
+      END SUBROUTINE cxios_read_data_k81_hdl
+
       SUBROUTINE cxios_read_data_k81(fieldid, fieldid_size, data_k8, data_Xsize) BIND(C)
          USE ISO_C_BINDING
@@ -224,4 +380,11 @@
          INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize
       END SUBROUTINE cxios_read_data_k81
+
+      SUBROUTINE cxios_read_data_k82_hdl(field_hdl, data_k8, data_Xsize, data_Ysize) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE      :: field_hdl
+         REAL     (kind = C_DOUBLE), DIMENSION(*) :: data_k8
+         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize, data_Ysize
+      END SUBROUTINE cxios_read_data_k82_hdl
 
       SUBROUTINE cxios_read_data_k82(fieldid, fieldid_size, data_k8, data_Xsize, data_Ysize) BIND(C)
@@ -233,5 +396,12 @@
       END SUBROUTINE cxios_read_data_k82
 
-      SUBROUTINE cxios_read_data_k83(fieldid, fieldid_size, data_k8, data_Xsize, data_Ysize, data_Zsize) BIND(C)
+      SUBROUTINE cxios_read_data_k83_hdl(field_hdl, data_k8, data_Xsize, data_Ysize, data_Zsize) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE      :: field_hdl
+         REAL     (kind = C_DOUBLE), DIMENSION(*) :: data_k8
+         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize, data_Ysize, data_Zsize
+      END SUBROUTINE cxios_read_data_k83_hdl
+
+       SUBROUTINE cxios_read_data_k83(fieldid, fieldid_size, data_k8, data_Xsize, data_Ysize, data_Zsize) BIND(C)
          USE ISO_C_BINDING
          CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: fieldid
@@ -241,5 +411,15 @@
       END SUBROUTINE cxios_read_data_k83
 
-      SUBROUTINE cxios_read_data_k84(fieldid, fieldid_size, data_k8, &
+     SUBROUTINE cxios_read_data_k84_hdl(field_hdl, data_k8, &
+                                      data_0size, data_1size, data_2size, &
+                                      data_3size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE      :: field_hdl
+         REAL     (kind = C_DOUBLE), DIMENSION(*) :: data_k8
+         INTEGER  (kind = C_INT)   , VALUE        :: data_0size, data_1size, data_2size
+         INTEGER  (kind = C_INT)   , VALUE        :: data_3size
+      END SUBROUTINE cxios_read_data_k84_hdl
+
+     SUBROUTINE cxios_read_data_k84(fieldid, fieldid_size, data_k8, &
                                       data_0size, data_1size, data_2size, &
                                       data_3size) BIND(C)
@@ -252,4 +432,14 @@
       END SUBROUTINE cxios_read_data_k84
 
+      SUBROUTINE cxios_read_data_k85_hdl(field_hdl, data_k8, &
+                                      data_0size, data_1size, data_2size, &
+                                      data_3size, data_4size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE      :: field_hdl
+         REAL     (kind = C_DOUBLE), DIMENSION(*) :: data_k8
+         INTEGER  (kind = C_INT)   , VALUE        :: data_0size, data_1size, data_2size
+         INTEGER  (kind = C_INT)   , VALUE        :: data_3size, data_4size
+      END SUBROUTINE cxios_read_data_k85_hdl
+
       SUBROUTINE cxios_read_data_k85(fieldid, fieldid_size, data_k8, &
                                       data_0size, data_1size, data_2size, &
@@ -263,4 +453,14 @@
       END SUBROUTINE cxios_read_data_k85
 
+      SUBROUTINE cxios_read_data_k86_hdl(field_hdl, data_k8, &
+                                      data_0size, data_1size, data_2size, &
+                                      data_3size, data_4size, data_5size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE      :: field_hdl
+         REAL     (kind = C_DOUBLE), DIMENSION(*) :: data_k8
+         INTEGER  (kind = C_INT)   , VALUE        :: data_0size, data_1size, data_2size
+         INTEGER  (kind = C_INT)   , VALUE        :: data_3size, data_4size, data_5size
+      END SUBROUTINE cxios_read_data_k86_hdl
+ 
       SUBROUTINE cxios_read_data_k86(fieldid, fieldid_size, data_k8, &
                                       data_0size, data_1size, data_2size, &
@@ -274,9 +474,21 @@
       END SUBROUTINE cxios_read_data_k86
 
-      SUBROUTINE cxios_read_data_k87(fieldid, fieldid_size, data_k8, &
+      SUBROUTINE cxios_read_data_k87_hdl(field_hdl, data_k8, &
                                       data_0size, data_1size, data_2size, &
                                       data_3size, data_4size, data_5size, &
                                       data_6size) BIND(C)
          USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE      :: field_hdl
+         REAL     (kind = C_DOUBLE), DIMENSION(*) :: data_k8
+         INTEGER  (kind = C_INT)   , VALUE        :: data_0size, data_1size, data_2size
+         INTEGER  (kind = C_INT)   , VALUE        :: data_3size, data_4size, data_5size
+         INTEGER  (kind = C_INT)   , VALUE        :: data_6size
+      END SUBROUTINE cxios_read_data_k87_hdl
+
+      SUBROUTINE cxios_read_data_k87(fieldid, fieldid_size, data_k8, &
+                                      data_0size, data_1size, data_2size, &
+                                      data_3size, data_4size, data_5size, &
+                                      data_6size) BIND(C)
+         USE ISO_C_BINDING
          CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: fieldid
          REAL     (kind = C_DOUBLE), DIMENSION(*) :: data_k8
@@ -287,4 +499,11 @@
       END SUBROUTINE cxios_read_data_k87
 
+      SUBROUTINE cxios_read_data_k40_hdl(field_hdl, data_k4, data_Xsize) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE      :: field_hdl
+         REAL     (kind = C_FLOAT)                :: data_k4
+         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize
+      END SUBROUTINE cxios_read_data_k40_hdl
+
       SUBROUTINE cxios_read_data_k40(fieldid, fieldid_size, data_k4, data_Xsize) BIND(C)
          USE ISO_C_BINDING
@@ -295,4 +514,11 @@
       END SUBROUTINE cxios_read_data_k40
 
+      SUBROUTINE cxios_read_data_k41_hdl(field_hdl, data_k4, data_Xsize) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE      :: field_hdl
+         REAL     (kind = C_FLOAT) , DIMENSION(*) :: data_k4
+         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize
+      END SUBROUTINE cxios_read_data_k41_hdl
+
       SUBROUTINE cxios_read_data_k41(fieldid, fieldid_size, data_k4, data_Xsize) BIND(C)
          USE ISO_C_BINDING
@@ -302,4 +528,11 @@
          INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize
       END SUBROUTINE cxios_read_data_k41
+
+      SUBROUTINE cxios_read_data_k42_hdl(field_hdl, data_k4, data_Xsize, data_Ysize) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE      :: field_hdl
+         REAL     (kind = C_FLOAT) , DIMENSION(*) :: data_k4
+         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize, data_Ysize
+      END SUBROUTINE cxios_read_data_k42_hdl
 
       SUBROUTINE cxios_read_data_k42(fieldid, fieldid_size, data_k4, data_Xsize, data_Ysize) BIND(C)
@@ -311,4 +544,11 @@
       END SUBROUTINE cxios_read_data_k42
 
+      SUBROUTINE cxios_read_data_k43_hdl(field_hdl, data_k4, data_Xsize, data_Ysize, data_Zsize) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE      :: field_hdl
+         REAL     (kind = C_FLOAT) , DIMENSION(*) :: data_k4
+         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize, data_Ysize, data_Zsize
+      END SUBROUTINE cxios_read_data_k43_hdl
+
       SUBROUTINE cxios_read_data_k43(fieldid, fieldid_size, data_k4, data_Xsize, data_Ysize, data_Zsize) BIND(C)
          USE ISO_C_BINDING
@@ -319,4 +559,14 @@
       END SUBROUTINE cxios_read_data_k43
 
+      SUBROUTINE cxios_read_data_k44_hdl(field_hdl, data_k4, &
+                                      data_0size, data_1size, data_2size, &
+                                      data_3size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE      :: field_hdl
+         REAL     (kind = C_FLOAT) , DIMENSION(*) :: data_k4
+         INTEGER  (kind = C_INT)   , VALUE        :: data_0size, data_1size, data_2size
+         INTEGER  (kind = C_INT)   , VALUE        :: data_3size
+      END SUBROUTINE cxios_read_data_k44_hdl
+ 
       SUBROUTINE cxios_read_data_k44(fieldid, fieldid_size, data_k4, &
                                       data_0size, data_1size, data_2size, &
@@ -330,4 +580,14 @@
       END SUBROUTINE cxios_read_data_k44
 
+      SUBROUTINE cxios_read_data_k45_hdl(field_hdl, data_k4, &
+                                      data_0size, data_1size, data_2size, &
+                                      data_3size, data_4size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE      :: field_hdl
+         REAL     (kind = C_FLOAT) , DIMENSION(*) :: data_k4
+         INTEGER  (kind = C_INT)   , VALUE        :: data_0size, data_1size, data_2size
+         INTEGER  (kind = C_INT)   , VALUE        :: data_3size, data_4size
+      END SUBROUTINE cxios_read_data_k45_hdl
+
       SUBROUTINE cxios_read_data_k45(fieldid, fieldid_size, data_k4, &
                                       data_0size, data_1size, data_2size, &
@@ -341,4 +601,14 @@
       END SUBROUTINE cxios_read_data_k45
 
+      SUBROUTINE cxios_read_data_k46_hdl(field_hdl, data_k4, &
+                                      data_0size, data_1size, data_2size, &
+                                      data_3size, data_4size, data_5size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE      :: field_hdl
+         REAL     (kind = C_FLOAT) , DIMENSION(*) :: data_k4
+         INTEGER  (kind = C_INT)   , VALUE        :: data_0size, data_1size, data_2size
+         INTEGER  (kind = C_INT)   , VALUE        :: data_3size, data_4size, data_5size
+      END SUBROUTINE cxios_read_data_k46_hdl
+ 
       SUBROUTINE cxios_read_data_k46(fieldid, fieldid_size, data_k4, &
                                       data_0size, data_1size, data_2size, &
@@ -351,4 +621,16 @@
          INTEGER  (kind = C_INT)   , VALUE        :: data_3size, data_4size, data_5size
       END SUBROUTINE cxios_read_data_k46
+
+      SUBROUTINE cxios_read_data_k47_hdl(field_hdl, data_k4, &
+                                      data_0size, data_1size, data_2size, &
+                                      data_3size, data_4size, data_5size, &
+                                      data_6size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE      :: field_hdl
+         REAL     (kind = C_FLOAT) , DIMENSION(*) :: data_k4
+         INTEGER  (kind = C_INT)   , VALUE        :: data_0size, data_1size, data_2size
+         INTEGER  (kind = C_INT)   , VALUE        :: data_3size, data_4size, data_5size
+         INTEGER  (kind = C_INT)   , VALUE        :: data_6size
+      END SUBROUTINE cxios_read_data_k47_hdl
 
       SUBROUTINE cxios_read_data_k47(fieldid, fieldid_size, data_k4, &
@@ -394,5 +676,5 @@
          CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: vardid
          INTEGER  (kind = C_INT)   , VALUE        :: varid_size
-         LOGICAL  (kind = 4)                      :: data_logic
+         LOGICAL  (kind = C_BOOL)                 :: data_logic
          LOGICAL  (kind = C_BOOL)                 :: is_var_existed
       END SUBROUTINE cxios_get_variable_data_logic
@@ -436,5 +718,5 @@
          CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: vardid
          INTEGER  (kind = C_INT)   , VALUE        :: varid_size
-         LOGICAL  (kind = 4)       , VALUE        :: data_logic
+         LOGICAL  (kind = C_BOOL)       , VALUE   :: data_logic
          LOGICAL  (kind = C_BOOL)                 :: is_var_existed
       END SUBROUTINE cxios_set_variable_data_logic
@@ -534,4 +816,11 @@
 
    ! Send field functions
+   SUBROUTINE xios(send_field_r8_0d_hdl)(field_hdl, data_k8)
+   IMPLICIT NONE
+      TYPE(txios(field))              :: field_hdl
+      REAL     (kind = 8), INTENT(IN) :: data_k8
+      CALL cxios_write_data_k80_hdl(field_hdl%daddr, data_k8, 1)
+   END SUBROUTINE xios(send_field_r8_0d_hdl)
+
    SUBROUTINE xios(send_field_r8_0d)(fieldid, data_k8)
    IMPLICIT NONE
@@ -541,4 +830,11 @@
    END SUBROUTINE xios(send_field_r8_0d)
 
+   SUBROUTINE xios(send_field_r8_1d_hdl)(field_hdl, data1d_k8)
+   IMPLICIT NONE
+      TYPE(txios(field))              :: field_hdl
+      REAL     (kind = 8), DIMENSION(*), INTENT(IN) :: data1d_k8(:)
+      CALL cxios_write_data_k81_hdl(field_hdl%daddr, data1d_k8, size(data1d_k8, 1))
+   END SUBROUTINE xios(send_field_r8_1d_hdl)
+
    SUBROUTINE xios(send_field_r8_1d)(fieldid, data1d_k8)
    IMPLICIT NONE
@@ -548,4 +844,11 @@
    END SUBROUTINE xios(send_field_r8_1d)
 
+   SUBROUTINE  xios(send_field_r8_2d_hdl)(field_hdl, data2d_k8)
+   IMPLICIT NONE
+      TYPE(txios(field))              :: field_hdl
+      REAL     (kind = 8), DIMENSION(*), INTENT(IN) :: data2d_k8(:,:)
+      CALL cxios_write_data_k82_hdl(field_hdl%daddr, data2d_k8, size(data2d_k8, 1), size(data2d_k8, 2))
+   END SUBROUTINE  xios(send_field_r8_2d_hdl)
+
    SUBROUTINE  xios(send_field_r8_2d)(fieldid, data2d_k8)
    IMPLICIT NONE
@@ -555,4 +858,11 @@
    END SUBROUTINE  xios(send_field_r8_2d)
 
+   SUBROUTINE  xios(send_field_r8_3d_hdl)(field_hdl, data3d_k8)
+   IMPLICIT NONE
+      TYPE(txios(field))              :: field_hdl
+      REAL     (kind = 8), DIMENSION(*), INTENT(IN) :: data3d_k8(:,:,:)
+      CALL cxios_write_data_k83_hdl(field_hdl%daddr, data3d_k8, size(data3d_k8, 1), size(data3d_k8, 2), size(data3d_k8, 3))
+   END SUBROUTINE  xios(send_field_r8_3d_hdl)
+
    SUBROUTINE  xios(send_field_r8_3d)(fieldid, data3d_k8)
    IMPLICIT NONE
@@ -561,4 +871,13 @@
       CALL cxios_write_data_k83(fieldid, len(fieldid), data3d_k8, size(data3d_k8, 1), size(data3d_k8, 2), size(data3d_k8, 3))
    END SUBROUTINE  xios(send_field_r8_3d)
+
+   SUBROUTINE  xios(send_field_r8_4d_hdl)(field_hdl, data4d_k8)
+   IMPLICIT NONE
+      TYPE(txios(field))              :: field_hdl
+      REAL     (kind = 8), DIMENSION(*), INTENT(IN) :: data4d_k8(:,:,:,:)
+      CALL cxios_write_data_k84_hdl(field_hdl%daddr, data4d_k8, &
+                                size(data4d_k8, 1), size(data4d_k8, 2), size(data4d_k8, 3), &
+                                size(data4d_k8, 4))
+   END SUBROUTINE  xios(send_field_r8_4d_hdl)
 
    SUBROUTINE  xios(send_field_r8_4d)(fieldid, data4d_k8)
@@ -571,4 +890,13 @@
    END SUBROUTINE  xios(send_field_r8_4d)
 
+   SUBROUTINE  xios(send_field_r8_5d_hdl)(field_hdl, data5d_k8)
+   IMPLICIT NONE
+      TYPE(txios(field))              :: field_hdl
+      REAL     (kind = 8), DIMENSION(*), INTENT(IN) :: data5d_k8(:,:,:,:,:)
+      CALL cxios_write_data_k85_hdl(field_hdl%daddr, data5d_k8, &
+                                size(data5d_k8, 1), size(data5d_k8, 2), size(data5d_k8, 3), &
+                                size(data5d_k8, 4), size(data5d_k8, 5))
+   END SUBROUTINE  xios(send_field_r8_5d_hdl)
+
    SUBROUTINE  xios(send_field_r8_5d)(fieldid, data5d_k8)
    IMPLICIT NONE
@@ -580,4 +908,13 @@
    END SUBROUTINE  xios(send_field_r8_5d)
 
+   SUBROUTINE  xios(send_field_r8_6d_hdl)(field_hdl, data6d_k8)
+   IMPLICIT NONE
+      TYPE(txios(field))              :: field_hdl
+      REAL     (kind = 8), DIMENSION(*), INTENT(IN) :: data6d_k8(:,:,:,:,:,:)
+      CALL cxios_write_data_k86_hdl(field_hdl%daddr, data6d_k8, &
+                                size(data6d_k8, 1), size(data6d_k8, 2), size(data6d_k8, 3), &
+                                size(data6d_k8, 4), size(data6d_k8, 5), size(data6d_k8, 6))
+   END SUBROUTINE  xios(send_field_r8_6d_hdl)
+
    SUBROUTINE  xios(send_field_r8_6d)(fieldid, data6d_k8)
    IMPLICIT NONE
@@ -588,4 +925,14 @@
                                 size(data6d_k8, 4), size(data6d_k8, 5), size(data6d_k8, 6))
    END SUBROUTINE  xios(send_field_r8_6d)
+
+   SUBROUTINE  xios(send_field_r8_7d_hdl)(field_hdl, data7d_k8)
+   IMPLICIT NONE
+      TYPE(txios(field))              :: field_hdl
+      REAL     (kind = 8), DIMENSION(*), INTENT(IN) :: data7d_k8(:,:,:,:,:,:,:)
+      CALL cxios_write_data_k87_hdl(field_hdl%daddr, data7d_k8, &
+                                size(data7d_k8, 1), size(data7d_k8, 2), size(data7d_k8, 3), &
+                                size(data7d_k8, 4), size(data7d_k8, 5), size(data7d_k8, 6), &
+                                size(data7d_k8, 7))
+   END SUBROUTINE  xios(send_field_r8_7d_hdl)
 
    SUBROUTINE  xios(send_field_r8_7d)(fieldid, data7d_k8)
@@ -599,4 +946,11 @@
    END SUBROUTINE  xios(send_field_r8_7d)
 
+   SUBROUTINE xios(send_field_r4_0d_hdl)(field_hdl, data_k4)
+   IMPLICIT NONE
+      TYPE(txios(field))              :: field_hdl
+      REAL     (kind = 4), INTENT(IN) :: data_k4
+      CALL cxios_write_data_k40_hdl(field_hdl%daddr, data_k4, 1)
+   END SUBROUTINE xios(send_field_r4_0d_hdl)
+
    SUBROUTINE xios(send_field_r4_0d)(fieldid, data_k4)
    IMPLICIT NONE
@@ -606,4 +960,11 @@
    END SUBROUTINE xios(send_field_r4_0d)
 
+   SUBROUTINE xios(send_field_r4_1d_hdl)(field_hdl, data1d_k4)
+   IMPLICIT NONE
+      TYPE(txios(field))              :: field_hdl
+      REAL     (kind = 4), DIMENSION(*), INTENT(IN) :: data1d_k4(:)
+      CALL cxios_write_data_k41_hdl(field_hdl%daddr, data1d_k4, size(data1d_k4, 1))
+   END SUBROUTINE xios(send_field_r4_1d_hdl)
+
    SUBROUTINE xios(send_field_r4_1d)(fieldid, data1d_k4)
    IMPLICIT NONE
@@ -613,4 +974,11 @@
    END SUBROUTINE xios(send_field_r4_1d)
 
+   SUBROUTINE xios(send_field_r4_2d_hdl)(field_hdl, data2d_k4)
+   IMPLICIT NONE
+      TYPE(txios(field))              :: field_hdl
+      REAL     (kind = 4), DIMENSION(*), INTENT(IN) :: data2d_k4(:,:)
+      CALL cxios_write_data_k42_hdl(field_hdl%daddr, data2d_k4, size(data2d_k4, 1), size(data2d_k4, 2))
+   END SUBROUTINE xios(send_field_r4_2d_hdl)
+
    SUBROUTINE xios(send_field_r4_2d)(fieldid, data2d_k4)
    IMPLICIT NONE
@@ -620,4 +988,11 @@
    END SUBROUTINE xios(send_field_r4_2d)
 
+   SUBROUTINE xios(send_field_r4_3d_hdl)(field_hdl, data3d_k4)
+   IMPLICIT NONE
+      TYPE(txios(field))              :: field_hdl
+      REAL     (kind = 4), DIMENSION(*), INTENT(IN) :: data3d_k4(:,:,:)
+      CALL cxios_write_data_k43_hdl(field_hdl%daddr, data3d_k4, size(data3d_k4, 1), size(data3d_k4, 2), size(data3d_k4, 3))
+   END SUBROUTINE xios(send_field_r4_3d_hdl)
+
    SUBROUTINE xios(send_field_r4_3d)(fieldid, data3d_k4)
    IMPLICIT NONE
@@ -627,4 +1002,13 @@
    END SUBROUTINE xios(send_field_r4_3d)
 
+   SUBROUTINE  xios(send_field_r4_4d_hdl)(field_hdl, data4d_k4)
+   IMPLICIT NONE
+      TYPE(txios(field))              :: field_hdl
+      REAL     (kind = 4), DIMENSION(*), INTENT(IN) :: data4d_k4(:,:,:,:)
+      CALL cxios_write_data_k44_hdl(field_hdl%daddr, data4d_k4, &
+                                size(data4d_k4, 1), size(data4d_k4, 2), size(data4d_k4, 3), &
+                                size(data4d_k4, 4))
+   END SUBROUTINE  xios(send_field_r4_4d_hdl)
+   
    SUBROUTINE  xios(send_field_r4_4d)(fieldid, data4d_k4)
    IMPLICIT NONE
@@ -636,4 +1020,13 @@
    END SUBROUTINE  xios(send_field_r4_4d)
 
+   SUBROUTINE  xios(send_field_r4_5d_hdl)(field_hdl, data5d_k4)
+   IMPLICIT NONE
+      TYPE(txios(field))              :: field_hdl
+      REAL     (kind = 4), DIMENSION(*), INTENT(IN) :: data5d_k4(:,:,:,:,:)
+      CALL cxios_write_data_k45_hdl(field_hdl%daddr, data5d_k4, &
+                                size(data5d_k4, 1), size(data5d_k4, 2), size(data5d_k4, 3), &
+                                size(data5d_k4, 4), size(data5d_k4, 5))
+   END SUBROUTINE  xios(send_field_r4_5d_hdl)
+
    SUBROUTINE  xios(send_field_r4_5d)(fieldid, data5d_k4)
    IMPLICIT NONE
@@ -645,4 +1038,13 @@
    END SUBROUTINE  xios(send_field_r4_5d)
 
+   SUBROUTINE  xios(send_field_r4_6d_hdl)(field_hdl, data6d_k4)
+   IMPLICIT NONE
+      TYPE(txios(field))              :: field_hdl
+      REAL     (kind = 4), DIMENSION(*), INTENT(IN) :: data6d_k4(:,:,:,:,:,:)
+      CALL cxios_write_data_k46_hdl(field_hdl%daddr, data6d_k4, &
+                                size(data6d_k4, 1), size(data6d_k4, 2), size(data6d_k4, 3), &
+                                size(data6d_k4, 4), size(data6d_k4, 5), size(data6d_k4, 6))
+   END SUBROUTINE  xios(send_field_r4_6d_hdl)
+   
    SUBROUTINE  xios(send_field_r4_6d)(fieldid, data6d_k4)
    IMPLICIT NONE
@@ -654,4 +1056,14 @@
    END SUBROUTINE  xios(send_field_r4_6d)
 
+   SUBROUTINE  xios(send_field_r4_7d_hdl)(field_hdl, data7d_k4)
+   IMPLICIT NONE
+      TYPE(txios(field))              :: field_hdl
+      REAL     (kind = 4), DIMENSION(*), INTENT(IN) :: data7d_k4(:,:,:,:,:,:,:)
+      CALL cxios_write_data_k47_hdl(field_hdl%daddr, data7d_k4, &
+                                size(data7d_k4, 1), size(data7d_k4, 2), size(data7d_k4, 3), &
+                                size(data7d_k4, 4), size(data7d_k4, 5), size(data7d_k4, 6), &
+                                size(data7d_k4, 7))
+   END SUBROUTINE  xios(send_field_r4_7d_hdl)
+   
    SUBROUTINE  xios(send_field_r4_7d)(fieldid, data7d_k4)
    IMPLICIT NONE
@@ -665,4 +1077,11 @@
 
    ! Receive field functions
+   SUBROUTINE xios(recv_field_r8_0d_hdl)(field_hdl, data0d_k8)
+   IMPLICIT NONE
+      TYPE(txios(field))              :: field_hdl
+      REAL     (kind = 8)              , INTENT(OUT):: data0d_k8
+      CALL cxios_read_data_k80_hdl(field_hdl%daddr, data0d_k8, 1)
+   END SUBROUTINE xios(recv_field_r8_0d_hdl)
+
    SUBROUTINE xios(recv_field_r8_0d)(fieldid, data0d_k8)
    IMPLICIT NONE
@@ -672,4 +1091,11 @@
    END SUBROUTINE xios(recv_field_r8_0d)
 
+   SUBROUTINE xios(recv_field_r8_1d_hdl)(field_hdl, data1d_k8)
+   IMPLICIT NONE
+      TYPE(txios(field))              :: field_hdl
+      REAL     (kind = 8), DIMENSION(*), INTENT(OUT) :: data1d_k8(:)
+      CALL cxios_read_data_k81_hdl(field_hdl%daddr, data1d_k8, size(data1d_k8, 1))
+   END SUBROUTINE xios(recv_field_r8_1d_hdl)
+
    SUBROUTINE xios(recv_field_r8_1d)(fieldid, data1d_k8)
    IMPLICIT NONE
@@ -679,4 +1105,11 @@
    END SUBROUTINE xios(recv_field_r8_1d)
 
+   SUBROUTINE  xios(recv_field_r8_2d_hdl)(field_hdl, data2d_k8)
+   IMPLICIT NONE
+      TYPE(txios(field))              :: field_hdl
+      REAL     (kind = 8), DIMENSION(*), INTENT(OUT) :: data2d_k8(:,:)
+      CALL cxios_read_data_k82_hdl(field_hdl%daddr, data2d_k8, size(data2d_k8, 1), size(data2d_k8, 2))
+   END SUBROUTINE  xios(recv_field_r8_2d_hdl)
+
    SUBROUTINE  xios(recv_field_r8_2d)(fieldid, data2d_k8)
    IMPLICIT NONE
@@ -686,4 +1119,11 @@
    END SUBROUTINE  xios(recv_field_r8_2d)
 
+   SUBROUTINE  xios(recv_field_r8_3d_hdl)(field_hdl, data3d_k8)
+   IMPLICIT NONE
+      TYPE(txios(field))              :: field_hdl
+      REAL     (kind = 8), DIMENSION(*), INTENT(OUT) :: data3d_k8(:,:,:)
+      CALL cxios_read_data_k83_hdl(field_hdl%daddr, data3d_k8, size(data3d_k8, 1), size(data3d_k8, 2), size(data3d_k8, 3))
+   END SUBROUTINE  xios(recv_field_r8_3d_hdl)
+
    SUBROUTINE  xios(recv_field_r8_3d)(fieldid, data3d_k8)
    IMPLICIT NONE
@@ -692,4 +1132,13 @@
       CALL cxios_read_data_k83(fieldid, len(fieldid), data3d_k8, size(data3d_k8, 1), size(data3d_k8, 2), size(data3d_k8, 3))
    END SUBROUTINE  xios(recv_field_r8_3d)
+
+   SUBROUTINE  xios(recv_field_r8_4d_hdl)(field_hdl, data4d_k8)
+   IMPLICIT NONE
+      TYPE(txios(field))              :: field_hdl
+      REAL     (kind = 8), DIMENSION(*), INTENT(OUT) :: data4d_k8(:,:,:,:)
+      CALL cxios_read_data_k84_hdl(field_hdl%daddr, data4d_k8, &
+                                size(data4d_k8, 1), size(data4d_k8, 2), size(data4d_k8, 3), &
+                                size(data4d_k8, 4))
+   END SUBROUTINE  xios(recv_field_r8_4d_hdl)
 
    SUBROUTINE  xios(recv_field_r8_4d)(fieldid, data4d_k8)
@@ -702,4 +1151,13 @@
    END SUBROUTINE  xios(recv_field_r8_4d)
 
+   SUBROUTINE  xios(recv_field_r8_5d_hdl)(field_hdl, data5d_k8)
+   IMPLICIT NONE
+      TYPE(txios(field))              :: field_hdl
+      REAL     (kind = 8), DIMENSION(*), INTENT(OUT) :: data5d_k8(:,:,:,:,:)
+      CALL cxios_read_data_k85_hdl(field_hdl%daddr, data5d_k8, &
+                                size(data5d_k8, 1), size(data5d_k8, 2), size(data5d_k8, 3), &
+                                size(data5d_k8, 4), size(data5d_k8, 5))
+   END SUBROUTINE  xios(recv_field_r8_5d_hdl)
+
    SUBROUTINE  xios(recv_field_r8_5d)(fieldid, data5d_k8)
    IMPLICIT NONE
@@ -711,4 +1169,13 @@
    END SUBROUTINE  xios(recv_field_r8_5d)
 
+   SUBROUTINE  xios(recv_field_r8_6d_hdl)(field_hdl, data6d_k8)
+   IMPLICIT NONE
+      TYPE(txios(field))              :: field_hdl
+      REAL     (kind = 8), DIMENSION(*), INTENT(OUT) :: data6d_k8(:,:,:,:,:,:)
+      CALL cxios_read_data_k86_hdl(field_hdl%daddr, data6d_k8, &
+                                size(data6d_k8, 1), size(data6d_k8, 2), size(data6d_k8, 3), &
+                                size(data6d_k8, 4), size(data6d_k8, 5), size(data6d_k8, 6))
+   END SUBROUTINE  xios(recv_field_r8_6d_hdl)
+
    SUBROUTINE  xios(recv_field_r8_6d)(fieldid, data6d_k8)
    IMPLICIT NONE
@@ -720,5 +1187,15 @@
    END SUBROUTINE  xios(recv_field_r8_6d)
 
-   SUBROUTINE  xios(recv_field_r8_7d)(fieldid, data7d_k8)
+  SUBROUTINE  xios(recv_field_r8_7d_hdl)(field_hdl, data7d_k8)
+   IMPLICIT NONE
+      TYPE(txios(field))              :: field_hdl
+      REAL     (kind = 8), DIMENSION(*), INTENT(OUT) :: data7d_k8(:,:,:,:,:,:,:)
+      CALL cxios_read_data_k87_hdl(field_hdl%daddr, data7d_k8, &
+                                size(data7d_k8, 1), size(data7d_k8, 2), size(data7d_k8, 3), &
+                                size(data7d_k8, 4), size(data7d_k8, 5), size(data7d_k8, 6), &
+                                size(data7d_k8, 7))
+   END SUBROUTINE  xios(recv_field_r8_7d_hdl)
+
+  SUBROUTINE  xios(recv_field_r8_7d)(fieldid, data7d_k8)
    IMPLICIT NONE
       CHARACTER(len = *)               , INTENT(IN) :: fieldid
@@ -730,4 +1207,11 @@
    END SUBROUTINE  xios(recv_field_r8_7d)
 
+   SUBROUTINE xios(recv_field_r4_0d_hdl)(field_hdl, data0d_k4)
+   IMPLICIT NONE
+      TYPE(txios(field))              :: field_hdl
+      REAL     (kind = 4)              , INTENT(OUT):: data0d_k4
+      CALL cxios_read_data_k40_hdl(field_hdl%daddr, data0d_k4, 1)
+   END SUBROUTINE xios(recv_field_r4_0d_hdl)
+
    SUBROUTINE xios(recv_field_r4_0d)(fieldid, data0d_k4)
    IMPLICIT NONE
@@ -737,4 +1221,11 @@
    END SUBROUTINE xios(recv_field_r4_0d)
 
+   SUBROUTINE xios(recv_field_r4_1d_hdl)(field_hdl, data1d_k4)
+   IMPLICIT NONE
+      TYPE(txios(field))              :: field_hdl
+      REAL     (kind = 4), DIMENSION(*), INTENT(OUT) :: data1d_k4(:)
+      CALL cxios_read_data_k41_hdl(field_hdl%daddr, data1d_k4, size(data1d_k4, 1))
+   END SUBROUTINE xios(recv_field_r4_1d_hdl)
+
    SUBROUTINE xios(recv_field_r4_1d)(fieldid, data1d_k4)
    IMPLICIT NONE
@@ -744,4 +1235,11 @@
    END SUBROUTINE xios(recv_field_r4_1d)
 
+   SUBROUTINE xios(recv_field_r4_2d_hdl)(field_hdl, data2d_k4)
+   IMPLICIT NONE
+      TYPE(txios(field))              :: field_hdl
+      REAL     (kind = 4), DIMENSION(*), INTENT(OUT) :: data2d_k4(:,:)
+      CALL cxios_read_data_k42_hdl(field_hdl%daddr, data2d_k4, size(data2d_k4, 1), size(data2d_k4, 2))
+   END SUBROUTINE xios(recv_field_r4_2d_hdl)
+
    SUBROUTINE xios(recv_field_r4_2d)(fieldid, data2d_k4)
    IMPLICIT NONE
@@ -751,4 +1249,11 @@
    END SUBROUTINE xios(recv_field_r4_2d)
 
+   SUBROUTINE xios(recv_field_r4_3d_hdl)(field_hdl, data3d_k4)
+   IMPLICIT NONE
+      TYPE(txios(field))              :: field_hdl
+      REAL     (kind = 4), DIMENSION(*), INTENT(OUT) :: data3d_k4(:,:,:)
+      CALL cxios_read_data_k43_hdl(field_hdl%daddr, data3d_k4, size(data3d_k4, 1), size(data3d_k4, 2), size(data3d_k4, 3))
+   END SUBROUTINE xios(recv_field_r4_3d_hdl)
+
    SUBROUTINE xios(recv_field_r4_3d)(fieldid, data3d_k4)
    IMPLICIT NONE
@@ -757,4 +1262,13 @@
       CALL cxios_read_data_k43(fieldid, len(fieldid), data3d_k4, size(data3d_k4, 1), size(data3d_k4, 2), size(data3d_k4, 3))
    END SUBROUTINE xios(recv_field_r4_3d)
+
+   SUBROUTINE  xios(recv_field_r4_4d_hdl)(field_hdl, data4d_k4)
+   IMPLICIT NONE
+      TYPE(txios(field))              :: field_hdl
+      REAL     (kind = 4), DIMENSION(*), INTENT(OUT) :: data4d_k4(:,:,:,:)
+      CALL cxios_read_data_k44_hdl(field_hdl%daddr, data4d_k4, &
+                                size(data4d_k4, 1), size(data4d_k4, 2), size(data4d_k4, 3), &
+                                size(data4d_k4, 4))
+   END SUBROUTINE  xios(recv_field_r4_4d_hdl)
 
    SUBROUTINE  xios(recv_field_r4_4d)(fieldid, data4d_k4)
@@ -767,4 +1281,13 @@
    END SUBROUTINE  xios(recv_field_r4_4d)
 
+   SUBROUTINE  xios(recv_field_r4_5d_hdl)(field_hdl, data5d_k4)
+   IMPLICIT NONE
+      TYPE(txios(field))              :: field_hdl
+      REAL     (kind = 4), DIMENSION(*), INTENT(OUT) :: data5d_k4(:,:,:,:,:)
+      CALL cxios_read_data_k45_hdl(field_hdl%daddr, data5d_k4, &
+                                size(data5d_k4, 1), size(data5d_k4, 2), size(data5d_k4, 3), &
+                                size(data5d_k4, 4), size(data5d_k4, 5))
+   END SUBROUTINE  xios(recv_field_r4_5d_hdl)
+
    SUBROUTINE  xios(recv_field_r4_5d)(fieldid, data5d_k4)
    IMPLICIT NONE
@@ -776,4 +1299,13 @@
    END SUBROUTINE  xios(recv_field_r4_5d)
 
+   SUBROUTINE  xios(recv_field_r4_6d_hdl)(field_hdl, data6d_k4)
+   IMPLICIT NONE
+      TYPE(txios(field))              :: field_hdl
+      REAL     (kind = 4), DIMENSION(*), INTENT(OUT) :: data6d_k4(:,:,:,:,:,:)
+      CALL cxios_read_data_k46_hdl(field_hdl%daddr, data6d_k4, &
+                                size(data6d_k4, 1), size(data6d_k4, 2), size(data6d_k4, 3), &
+                                size(data6d_k4, 4), size(data6d_k4, 5), size(data6d_k4, 6))
+   END SUBROUTINE  xios(recv_field_r4_6d_hdl)
+
    SUBROUTINE  xios(recv_field_r4_6d)(fieldid, data6d_k4)
    IMPLICIT NONE
@@ -784,4 +1316,14 @@
                                 size(data6d_k4, 4), size(data6d_k4, 5), size(data6d_k4, 6))
    END SUBROUTINE  xios(recv_field_r4_6d)
+
+   SUBROUTINE  xios(recv_field_r4_7d_hdl)(field_hdl, data7d_k4)
+   IMPLICIT NONE
+      TYPE(txios(field))              :: field_hdl
+      REAL     (kind = 4), DIMENSION(*), INTENT(OUT) :: data7d_k4(:,:,:,:,:,:,:)
+      CALL cxios_read_data_k47_hdl(field_hdl%daddr, data7d_k4, &
+                                size(data7d_k4, 1), size(data7d_k4, 2), size(data7d_k4, 3), &
+                                size(data7d_k4, 4), size(data7d_k4, 5), size(data7d_k4, 6), &
+                                size(data7d_k4, 7))
+   END SUBROUTINE  xios(recv_field_r4_7d_hdl)
 
    SUBROUTINE  xios(recv_field_r4_7d)(fieldid, data7d_k4)
@@ -797,6 +1339,7 @@
    ! Get variable functions
    LOGICAL FUNCTION xios(getVar_k8)(varId, data_k8)
-   IMPLICIT NONE
-      LOGICAL  (kind = 1)                           :: val
+   USE ISO_C_BINDING
+   IMPLICIT NONE
+      LOGICAL  (kind = C_BOOL)                      :: val
       CHARACTER(len = *)               , INTENT(IN) :: varId
       REAL     (kind = 8)              , INTENT(OUT):: data_k8
@@ -808,6 +1351,7 @@
 
    LOGICAL FUNCTION xios(getVar_k4)(varId, data_k4)
-   IMPLICIT NONE
-      LOGICAL  (kind = 1)                           :: val
+   USE ISO_C_BINDING
+   IMPLICIT NONE
+      LOGICAL  (kind = C_BOOL)                      :: val
       CHARACTER(len = *)               , INTENT(IN) :: varId
       REAL     (kind = 4)              , INTENT(OUT):: data_k4
@@ -819,6 +1363,7 @@
 
    LOGICAL FUNCTION xios(getVar_int)(varId, data_int)
-   IMPLICIT NONE
-      LOGICAL  (kind = 1)                           :: val
+   USE ISO_C_BINDING
+   IMPLICIT NONE
+      LOGICAL  (kind = C_BOOL)                      :: val
       CHARACTER(len = *)               , INTENT(IN) :: varId
       INTEGER                          , INTENT(OUT):: data_int
@@ -830,17 +1375,20 @@
 
    LOGICAL FUNCTION xios(getVar_logic)(varId, data_logic)
-   IMPLICIT NONE
-      LOGICAL  (kind = 1)                           :: val
+   USE ISO_C_BINDING
+   IMPLICIT NONE
+      LOGICAL  (kind = C_BOOL)                      :: val
       CHARACTER(len  = *)              , INTENT(IN) :: varId
-      LOGICAL  (kind = 4)              , INTENT(OUT):: data_logic
-
-      CALL cxios_get_variable_data_logic(varId, len(varId), data_logic, val)
-
+      LOGICAL  ,INTENT(OUT)                         :: data_logic
+      LOGICAL (C_BOOL)                              :: data_tmp
+
+      CALL cxios_get_variable_data_logic(varId, len(varId), data_tmp, val)
       xios(getVar_logic) = val
+      IF (val) data_logic = data_tmp
    END FUNCTION xios(getVar_logic)
 
    LOGICAL FUNCTION xios(getVar_char)(varId, data_char)
-   IMPLICIT NONE
-      LOGICAL  (kind = 1)                           :: val
+   USE ISO_C_BINDING
+   IMPLICIT NONE
+      LOGICAL  (kind = C_BOOL)                      :: val
       CHARACTER(len  = *)              , INTENT(IN) :: varId
       CHARACTER(len  = *)              , INTENT(OUT):: data_char
@@ -853,6 +1401,7 @@
    ! Set variable functions
    LOGICAL FUNCTION xios(setVar_k8)(varId, data_k8)
-   IMPLICIT NONE
-      LOGICAL  (kind = 1)                           :: val
+   USE ISO_C_BINDING
+   IMPLICIT NONE
+      LOGICAL  (kind = C_BOOL)                      :: val
       CHARACTER(len = *)               , INTENT(IN) :: varId
       REAL     (kind = 8)              , INTENT(IN) :: data_k8
@@ -864,6 +1413,7 @@
 
    LOGICAL FUNCTION xios(setVar_k4)(varId, data_k4)
-   IMPLICIT NONE
-      LOGICAL  (kind = 1)                           :: val
+   USE ISO_C_BINDING
+   IMPLICIT NONE
+      LOGICAL  (kind = C_BOOL)                      :: val
       CHARACTER(len = *)               , INTENT(IN) :: varId
       REAL     (kind = 4)              , INTENT(IN) :: data_k4
@@ -875,6 +1425,7 @@
 
    LOGICAL FUNCTION xios(setVar_int)(varId, data_int)
-   IMPLICIT NONE
-      LOGICAL  (kind = 1)                           :: val
+   USE ISO_C_BINDING
+   IMPLICIT NONE
+      LOGICAL  (kind = C_BOOL)                           :: val
       CHARACTER(len = *)               , INTENT(IN) :: varId
       INTEGER                          , INTENT(IN) :: data_int
@@ -886,10 +1437,13 @@
 
    LOGICAL FUNCTION xios(setVar_logic)(varId, data_logic)
-   IMPLICIT NONE
-      LOGICAL  (kind = 1)                           :: val
+   USE ISO_C_BINDING
+   IMPLICIT NONE
+      LOGICAL(kind = C_BOOL)                        :: val
       CHARACTER(len  = *)              , INTENT(IN) :: varId
-      LOGICAL  (kind = 4)              , INTENT(IN) :: data_logic
-
-      CALL cxios_set_variable_data_logic(varId, len(varId), data_logic, val)
+      LOGICAL                          , INTENT(IN) :: data_logic
+      LOGICAL  (kind = C_BOOL)                      :: data_tmp
+
+      data_tmp = data_logic
+      CALL cxios_set_variable_data_logic(varId, len(varId), data_tmp, val)
 
       xios(setVar_logic) = val
@@ -897,6 +1451,7 @@
 
    LOGICAL FUNCTION xios(setVar_char)(varId, data_char)
-   IMPLICIT NONE
-      LOGICAL  (kind = 1)                           :: val
+   USE ISO_C_BINDING
+   IMPLICIT NONE
+      LOGICAL  (kind = C_BOOL)                      :: val
       CHARACTER(len  = *)              , INTENT(IN) :: varId
       CHARACTER(len  = *)              , INTENT(IN) :: data_char
Index: XIOS/dev/dev_trunk_graph/src/interface/fortran/ixios_interfaces.F90
===================================================================
--- XIOS/dev/dev_trunk_graph/src/interface/fortran/ixios_interfaces.F90	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/interface/fortran/ixios_interfaces.F90	(revision 2137)
@@ -11,8 +11,16 @@
                   xios(send_field_r4_0d), xios(send_field_r4_1d), xios(send_field_r4_2d), xios(send_field_r4_3d), &
                   xios(send_field_r4_4d), xios(send_field_r4_5d), xios(send_field_r4_6d), xios(send_field_r4_7d), &
+                  xios(send_field_r8_0d_hdl), xios(send_field_r8_1d_hdl), xios(send_field_r8_2d_hdl), xios(send_field_r8_3d_hdl), &
+                  xios(send_field_r8_4d_hdl), xios(send_field_r8_5d_hdl), xios(send_field_r8_6d_hdl), xios(send_field_r8_7d_hdl), &
+                  xios(send_field_r4_0d_hdl), xios(send_field_r4_1d_hdl), xios(send_field_r4_2d_hdl), xios(send_field_r4_3d_hdl), &
+                  xios(send_field_r4_4d_hdl), xios(send_field_r4_5d_hdl), xios(send_field_r4_6d_hdl), xios(send_field_r4_7d_hdl), &
                   xios(recv_field_r8_0d), xios(recv_field_r8_1d), xios(recv_field_r8_2d), xios(recv_field_r8_3d), &
                   xios(recv_field_r8_4d), xios(recv_field_r8_5d), xios(recv_field_r8_6d), xios(recv_field_r8_7d), &
                   xios(recv_field_r4_0d), xios(recv_field_r4_1d), xios(recv_field_r4_2d), xios(recv_field_r4_3d), &
                   xios(recv_field_r4_4d), xios(recv_field_r4_5d), xios(recv_field_r4_6d), xios(recv_field_r4_7d), &
+                  xios(recv_field_r8_0d_hdl), xios(recv_field_r8_1d_hdl), xios(recv_field_r8_2d_hdl), xios(recv_field_r8_3d_hdl), &
+                  xios(recv_field_r8_4d_hdl), xios(recv_field_r8_5d_hdl), xios(recv_field_r8_6d_hdl), xios(recv_field_r8_7d_hdl), &
+                  xios(recv_field_r4_0d_hdl), xios(recv_field_r4_1d_hdl), xios(recv_field_r4_2d_hdl), xios(recv_field_r4_3d_hdl), &
+                  xios(recv_field_r4_4d_hdl), xios(recv_field_r4_5d_hdl), xios(recv_field_r4_6d_hdl), xios(recv_field_r4_7d_hdl), &
                   xios(getVar_k8), xios(getVar_k4), xios(getVar_int), xios(getVar_logic), xios(getVar_char),      &
                   xios(setVar_k8), xios(setVar_k4), xios(setVar_int), xios(setVar_logic), xios(setVar_char)
@@ -239,5 +247,9 @@
                    xios(send_field_r8_4d), xios(send_field_r8_5d), xios(send_field_r8_6d), xios(send_field_r8_7d), &
                    xios(send_field_r4_0d), xios(send_field_r4_1d), xios(send_field_r4_2d), xios(send_field_r4_3d), &
-                   xios(send_field_r4_4d), xios(send_field_r4_5d), xios(send_field_r4_6d), xios(send_field_r4_7d)
+                   xios(send_field_r4_4d), xios(send_field_r4_5d), xios(send_field_r4_6d), xios(send_field_r4_7d), &
+                   xios(send_field_r8_0d_hdl), xios(send_field_r8_1d_hdl), xios(send_field_r8_2d_hdl), xios(send_field_r8_3d_hdl), &
+                   xios(send_field_r8_4d_hdl), xios(send_field_r8_5d_hdl), xios(send_field_r8_6d_hdl), xios(send_field_r8_7d_hdl), &
+                   xios(send_field_r4_0d_hdl), xios(send_field_r4_1d_hdl), xios(send_field_r4_2d_hdl), xios(send_field_r4_3d_hdl), &
+                   xios(send_field_r4_4d_hdl), xios(send_field_r4_5d_hdl), xios(send_field_r4_6d_hdl), xios(send_field_r4_7d_hdl)
 END INTERFACE xios(send_field)
 
@@ -246,5 +258,9 @@
                    xios(recv_field_r8_4d), xios(recv_field_r8_5d), xios(recv_field_r8_6d), xios(recv_field_r8_7d), &
                    xios(recv_field_r4_0d), xios(recv_field_r4_1d), xios(recv_field_r4_2d), xios(recv_field_r4_3d), &
-                   xios(recv_field_r4_4d), xios(recv_field_r4_5d), xios(recv_field_r4_6d), xios(recv_field_r4_7d)
+                   xios(recv_field_r4_4d), xios(recv_field_r4_5d), xios(recv_field_r4_6d), xios(recv_field_r4_7d), &
+                   xios(recv_field_r8_0d_hdl), xios(recv_field_r8_1d_hdl), xios(recv_field_r8_2d_hdl), xios(recv_field_r8_3d_hdl), &
+                   xios(recv_field_r8_4d_hdl), xios(recv_field_r8_5d_hdl), xios(recv_field_r8_6d_hdl), xios(recv_field_r8_7d_hdl), &
+                   xios(recv_field_r4_0d_hdl), xios(recv_field_r4_1d_hdl), xios(recv_field_r4_2d_hdl), xios(recv_field_r4_3d_hdl), &
+                   xios(recv_field_r4_4d_hdl), xios(recv_field_r4_5d_hdl), xios(recv_field_r4_6d_hdl), xios(recv_field_r4_7d_hdl)
 END INTERFACE xios(recv_field)
 
Index: XIOS/dev/dev_trunk_graph/src/manager/daemons_manager.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/manager/daemons_manager.hpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/manager/daemons_manager.hpp	(revision 2137)
@@ -1,4 +1,5 @@
 #ifndef __DAEMONS_MANAGER_HPP__
 #define __DAEMONS_MANAGER_HPP__
+#include <cstddef>
 
 namespace xios
@@ -16,6 +17,11 @@
     bool servicesEventLoop(void) ;
     
+    void scheduleContext(size_t hashId) { scheduledContext_=hashId ;} //!< for attached mode, give the hand to the associated context server
+    bool isScheduledContext(size_t hashId) { return scheduledContext_==hashId ;} //!< for attached mode, return true if context server is sceduled
+    void unscheduleContext(void) { scheduledContext_=0 ;} //!< for attached mode : unschedule context
+
     private:
     bool isServer_ ;
+    size_t scheduledContext_ = 0 ; //!< Hash id of the next scehduled context for attached mode
   } ;
 }
Index: XIOS/dev/dev_trunk_graph/src/manager/server_context.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/manager/server_context.hpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/manager/server_context.hpp	(revision 2137)
@@ -33,4 +33,6 @@
     void freeComm(void) ;
     bool isAttachedMode(void) { return isAttachedMode_ ;}
+    CService* getParentService(void) {return parentService_ ; }
+
     private:
     void createIntercomm(void) ;
Index: XIOS/dev/dev_trunk_graph/src/manager/services.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/manager/services.hpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/manager/services.hpp	(revision 2137)
@@ -37,5 +37,5 @@
     int getType(void) {return type_;}
     int getNbPartitions(void) {return nbPartitions_;}
-
+    
     private:
     void sendNotification(int rank) ;
Index: XIOS/dev/dev_trunk_graph/src/mpi_tools.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/mpi_tools.cpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/mpi_tools.cpp	(revision 2137)
@@ -27,3 +27,24 @@
   }
 
+  template<>
+  MPI_Datatype MPI_GetType<char>(void) { return MPI_CHAR ;}
+
+  template<>
+  MPI_Datatype MPI_GetType<short int>(void) { return MPI_SHORT ;}
+
+  template<>
+  MPI_Datatype MPI_GetType<int>(void) { return MPI_INT ;}
+
+  template<>
+  MPI_Datatype MPI_GetType<size_t>(void) { return MPI_SIZE_T ;}
+
+  template<>
+  MPI_Datatype MPI_GetType<float>(void) { return MPI_FLOAT ;}
+
+  template<>
+  MPI_Datatype MPI_GetType<double>(void) { return MPI_DOUBLE ;}
+
+  template<>
+  MPI_Datatype MPI_GetType<long double>(void) { return MPI_LONG_DOUBLE ;}
+
 }
Index: XIOS/dev/dev_trunk_graph/src/mpi_tools.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/mpi_tools.hpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/mpi_tools.hpp	(revision 2137)
@@ -13,23 +13,23 @@
 
   template<>
-  MPI_Datatype MPI_GetType<char>(void) { return MPI_CHAR ;}
+  MPI_Datatype MPI_GetType<char>(void);
 
   template<>
-  MPI_Datatype MPI_GetType<short int>(void) { return MPI_SHORT ;}
+  MPI_Datatype MPI_GetType<short int>(void);
 
   template<>
-  MPI_Datatype MPI_GetType<int>(void) { return MPI_INT ;}
+  MPI_Datatype MPI_GetType<int>(void);
 
   template<>
-  MPI_Datatype MPI_GetType<size_t>(void) { return MPI_SIZE_T ;}
+  MPI_Datatype MPI_GetType<size_t>(void);
 
   template<>
-  MPI_Datatype MPI_GetType<float>(void) { return MPI_FLOAT ;}
+  MPI_Datatype MPI_GetType<float>(void);
 
   template<>
-  MPI_Datatype MPI_GetType<double>(void) { return MPI_DOUBLE ;}
+  MPI_Datatype MPI_GetType<double>(void);
 
   template<>
-  MPI_Datatype MPI_GetType<long double>(void) { return MPI_LONG_DOUBLE ;}
+  MPI_Datatype MPI_GetType<long double>(void);
 
 
Index: XIOS/dev/dev_trunk_graph/src/node/axis.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/node/axis.cpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/node/axis.cpp	(revision 2137)
@@ -451,5 +451,5 @@
 
     }
-  
+
   string CAxis::getCouplingAlias(const string& fieldId, int posInGrid)
   {
Index: XIOS/dev/dev_trunk_graph/src/node/axis.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/node/axis.hpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/node/axis.hpp	(revision 2137)
@@ -176,5 +176,4 @@
          void makeAliasForCoupling(const string& fieldId, int posInGrid) ;
          string getCouplingAlias(const string& fieldId, int posInGrid) ;
-
 
       private:
Index: XIOS/dev/dev_trunk_graph/src/node/context.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/node/context.cpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/node/context.cpp	(revision 2137)
@@ -73,19 +73,19 @@
 
    //----------------------------------------------------------------
-   void CContext::initEventScheduler(void)
-   {
-     SRegisterContextInfo contextInfo ;
-     CXios::getContextsManager()->getContextInfo(this->getId(), contextInfo, getIntraComm()) ;
-
-     eventScheduler_=CXios::getPoolRessource()->getService(contextInfo.serviceId,contextInfo.partitionId)->getEventScheduler() ;
+
+  void CContext::initEventScheduler(void)
+  {
+    SRegisterContextInfo contextInfo ;
+    CXios::getContextsManager()->getContextInfo(this->getId(), contextInfo, getIntraComm()) ;
+
+    eventScheduler_=CXios::getPoolRessource()->getService(contextInfo.serviceId,contextInfo.partitionId)->getEventScheduler() ;
  
-     // generate unique hash for server
-     auto time=chrono::system_clock::now().time_since_epoch().count() ;
-     std::default_random_engine rd(time); // not reproducible from a run to another
-     std::uniform_int_distribution<size_t> dist;
-     hashId_=dist(rd) ;
-     MPI_Bcast(&hashId_,1,MPI_SIZE_T,0,getIntraComm()) ; // Bcast to all server of the context
-   }
- 
+    // generate unique hash for server
+    auto time=chrono::system_clock::now().time_since_epoch().count() ;
+    std::default_random_engine rd(time); // not reproducible from a run to another
+    std::uniform_int_distribution<size_t> dist;
+    hashId_=dist(rd) ;
+    MPI_Bcast(&hashId_,1,MPI_SIZE_T,0,getIntraComm()) ; // Bcast to all server of the context
+  }
    /*!
    \brief Get context group (context root)
@@ -291,121 +291,4 @@
    ///---------------------------------------------------------------
 
-
-   void CContext::setClientServerBuffer(vector<CField*>& fields, bool bufferForWriting)
-   TRY
-   {
-      // Estimated minimum event size for small events (20 is an arbitrary constant just for safety)
-     const size_t minEventSize = CEventClient::headerSize + 20 * sizeof(int);
-      // Ensure there is at least some room for 20 of such events in the buffers
-     size_t minBufferSize = std::max(CXios::minBufferSize, 20 * minEventSize);
-
-#define DECLARE_NODE(Name_, name_)    \
-     if (minBufferSize < sizeof(C##Name_##Definition)) minBufferSize = sizeof(C##Name_##Definition);
-#define DECLARE_NODE_PAR(Name_, name_)
-#include "node_type.conf"
-#undef DECLARE_NODE
-#undef DECLARE_NODE_PAR
-
-
-     map<CContextClient*,map<int,size_t>> dataSize ;
-     map<CContextClient*,map<int,size_t>> maxEventSize ;
-     map<CContextClient*,map<int,size_t>> attributesSize ;  
-
-     for(auto field : fields)
-     {
-       field->setContextClientDataBufferSize(dataSize, maxEventSize, bufferForWriting) ;
-       field->setContextClientAttributesBufferSize(attributesSize, maxEventSize, bufferForWriting) ;
-     }
-     
-
-     for(auto& it : attributesSize)
-     {
-       auto contextClient = it.first ;
-       auto& contextDataSize =  dataSize[contextClient] ;
-       auto& contextAttributesSize =  attributesSize[contextClient] ;
-       auto& contextMaxEventSize =  maxEventSize[contextClient] ;
-   
-       for (auto& it : contextAttributesSize)
-       {
-         auto serverRank=it.first ;
-         auto& buffer = contextAttributesSize[serverRank] ;
-         if (contextDataSize[serverRank] > buffer) buffer=contextDataSize[serverRank] ;
-         buffer *= CXios::bufferSizeFactor;
-         if (buffer < minBufferSize) buffer = minBufferSize;
-         if (buffer > CXios::maxBufferSize ) buffer = CXios::maxBufferSize;
-       }
-
-       // Leaders will have to send some control events so ensure there is some room for those in the buffers
-       if (contextClient->isServerLeader())
-         for(auto& rank : contextClient->getRanksServerLeader())
-           if (!contextAttributesSize.count(rank))
-           {
-             contextAttributesSize[rank] = minBufferSize;
-             contextMaxEventSize[rank] = minEventSize;
-           }
-      
-       contextClient->setBufferSize(contextAttributesSize, contextMaxEventSize);    
-     }
-   }
-   CATCH_DUMP_ATTR
-
-
-    /*!
-    Sets client buffers.
-    \param [in] contextClient
-    \param [in] bufferForWriting True if buffers are used for sending data for writing
-    This flag is only true for client and server-1 for communication with server-2
-  */
-  // ym obsolete to be removed
-   void CContext::setClientServerBuffer(CContextClient* contextClient, bool bufferForWriting)
-   TRY
-   {
-      // Estimated minimum event size for small events (20 is an arbitrary constant just for safety)
-     const size_t minEventSize = CEventClient::headerSize + 20 * sizeof(int);
-
-      // Ensure there is at least some room for 20 of such events in the buffers
-      size_t minBufferSize = std::max(CXios::minBufferSize, 20 * minEventSize);
-
-#define DECLARE_NODE(Name_, name_)    \
-     if (minBufferSize < sizeof(C##Name_##Definition)) minBufferSize = sizeof(C##Name_##Definition);
-#define DECLARE_NODE_PAR(Name_, name_)
-#include "node_type.conf"
-#undef DECLARE_NODE
-#undef DECLARE_NODE_PAR
-
-     // Compute the buffer sizes needed to send the attributes and data corresponding to fields
-     std::map<int, StdSize> maxEventSize;
-     std::map<int, StdSize> bufferSize = getAttributesBufferSize(maxEventSize, contextClient, bufferForWriting);
-     std::map<int, StdSize> dataBufferSize = getDataBufferSize(maxEventSize, contextClient, bufferForWriting);
-
-     std::map<int, StdSize>::iterator it, ite = dataBufferSize.end();
-     for (it = dataBufferSize.begin(); it != ite; ++it)
-       if (it->second > bufferSize[it->first]) bufferSize[it->first] = it->second;
-
-     // Apply the buffer size factor, check that we are above the minimum buffer size and below the maximum size
-     ite = bufferSize.end();
-     for (it = bufferSize.begin(); it != ite; ++it)
-     {
-       it->second *= CXios::bufferSizeFactor;
-       if (it->second < minBufferSize) it->second = minBufferSize;
-       if (it->second > CXios::maxBufferSize) it->second = CXios::maxBufferSize;
-     }
-
-     // Leaders will have to send some control events so ensure there is some room for those in the buffers
-     if (contextClient->isServerLeader())
-     {
-       const std::list<int>& ranks = contextClient->getRanksServerLeader();
-       for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank)
-       {
-         if (!bufferSize.count(*itRank))
-         {
-           bufferSize[*itRank] = minBufferSize;
-           maxEventSize[*itRank] = minEventSize;
-         }
-       }
-     }
-     contextClient->setBufferSize(bufferSize, maxEventSize);
-   }
-   CATCH_DUMP_ATTR
 
  /*!
@@ -716,9 +599,15 @@
   CATCH_DUMP_ATTR
 
-   
-  bool CContext::eventLoop(bool enableEventsProcessing)
+  void CContext::globalEventLoop(void)
   {
-    bool finished=true; 
-    bool out; 
+    lockContext() ;
+    CXios::getDaemonsManager()->eventLoop() ;
+    unlockContext() ;
+    setCurrent(getId()) ;
+  }
+
+  bool CContext::scheduledEventLoop(bool enableEventsProcessing) 
+  {
+    bool out, finished; 
     size_t timeLine=timeLine_ ;
     if (serviceType_==CServicesManager::CLIENT)
@@ -730,29 +619,41 @@
     do
     { 
-      if (client!=nullptr && !finalized) client->checkBuffers();
-    
-      for (int i = 0; i < clientPrimServer.size(); ++i)
-      {
-        if (!finalized) clientPrimServer[i]->checkBuffers();
-        if (!finalized) finished &= serverPrimServer[i]->eventLoop(enableEventsProcessing);
-      }
-
-      for (auto couplerOut : couplerOutClient_)
-        if (!finalized) couplerOut.second->checkBuffers();
-    
-      for (auto couplerIn : couplerInClient_)
-        if (!finalized) couplerIn.second->checkBuffers();
-    
-      for (auto couplerOut : couplerOutServer_)
-        if (!finalized) couplerOut.second->eventLoop(enableEventsProcessing);
-
-      for (auto couplerIn : couplerInServer_)
-        if (!finalized) couplerIn.second->eventLoop(enableEventsProcessing);
-    
-      if (server!=nullptr) if (!finalized) finished &= server->eventLoop(enableEventsProcessing);
-  
+      finished=eventLoop(enableEventsProcessing) ;
       if (serviceType_==CServicesManager::CLIENT) out = eventScheduler_->queryEvent(timeLine,hashId_) ;
       else out=true ;
     }  while(!out) ;
+    
+    return finished ;
+  }
+
+  bool CContext::eventLoop(bool enableEventsProcessing)
+  {
+    bool  finished; 
+    if (isLockedContext()) return ;
+    
+    setCurrent(getId()) ;
+
+    if (client!=nullptr && !finalized) client->checkBuffers();
+    
+    for (int i = 0; i < clientPrimServer.size(); ++i)
+    {
+      if (!finalized) clientPrimServer[i]->checkBuffers();
+      if (!finalized) finished &= serverPrimServer[i]->eventLoop(enableEventsProcessing);
+    }
+
+    for (auto couplerOut : couplerOutClient_)
+      if (!finalized) couplerOut.second->checkBuffers();
+    
+    for (auto couplerIn : couplerInClient_)
+      if (!finalized) couplerIn.second->checkBuffers();
+    
+    for (auto couplerOut : couplerOutServer_)
+      if (!finalized) couplerOut.second->eventLoop(enableEventsProcessing);
+
+    for (auto couplerIn : couplerInServer_)
+      if (!finalized) couplerIn.second->eventLoop(enableEventsProcessing);
+    
+    if (server!=nullptr) if (!finalized) finished &= server->eventLoop(enableEventsProcessing);
+    setCurrent(getId()) ;
     return finalized && finished ;
   }
@@ -784,18 +685,4 @@
         couplerOutClient_[fullContextId] = client ;
         couplerOutServer_[fullContextId] = server ;
-
-/*
-      // for now, we don't now which beffer size must be used for client coupler
-      // It will be evaluated later. Fix a constant size for now...
-      // set to 10Mb for development
-       map<int,size_t> bufferSize, maxEventSize ;
-       for(int i=0;i<client->getRemoteSize();i++)
-       {
-         bufferSize[i]=10000000 ;
-         maxEventSize[i]=10000000 ;
-       }
-
-       client->setBufferSize(bufferSize, maxEventSize);    
-*/
       }
     }
@@ -819,12 +706,4 @@
        MPI_Comm_free(&interComm) ;
 
-       map<int,size_t> bufferSize, maxEventSize ;
-       for(int i=0;i<client->getRemoteSize();i++)
-       {
-         bufferSize[i]=10000000 ;
-         maxEventSize[i]=10000000 ;
-       }
-
-       client->setBufferSize(bufferSize, maxEventSize);    
        couplerInClient_[fullContextId] = client ;
        couplerInServer_[fullContextId] = server ;        
@@ -832,11 +711,4 @@
   }
   
-  void CContext::globalEventLoop(void)
-  {
-    CXios::getDaemonsManager()->eventLoop() ;
-    setCurrent(getId()) ;
-  }
-
-
    void CContext::finalize(void)
    TRY
@@ -1023,6 +895,7 @@
 
     bool workflowGraphIsCompleted ;
-
+    
     bool first=true ;
+   
     do
     {
@@ -1032,5 +905,5 @@
         workflowGraphIsCompleted &= endWorkflowField->buildWorkflowGraph(garbageCollector) ;
       }
-
+   
       for(auto couplerIn : enabledCouplerIn) couplerIn->assignContext() ;
       for(auto field : couplerInField) field->makeGridAliasForCoupling();
@@ -1045,6 +918,5 @@
         // connect to couplerOut -> to do
       }
-      if (first) setClientServerBuffer(couplerOutField, true) ; // set buffer context --> to check
-   
+
       bool couplersReady ;
       do 
@@ -1057,10 +929,13 @@
           couplersReady &= ready ;
         }
-        this->eventLoop() ;
+        this->scheduledEventLoop() ;
+
       } while (!couplersReady) ;
-
+      
       first=false ;
-      this->eventLoop() ;
+      this->scheduledEventLoop() ;
+
     } while (!workflowGraphIsCompleted) ;
+
 
     for( auto field : couplerInField) couplerInFields_.push_back(field) ;
@@ -1087,5 +962,4 @@
         field->connectToFileServer(garbageCollector) ; // connect the field to server filter
       }
-      setClientServerBuffer(fileOutField, true) ; // set buffer context --> to review
       for(auto field : fileOutField) field->sendFieldToFileServer() ;
     }
@@ -1193,6 +1067,16 @@
       ok = true ;
       for(auto& couplerOutClient : couplerOutClient_) ok &= isCouplerInCloseDefinition(couplerOutClient.second) ;
-      this->eventLoop() ; 
+      this->scheduledEventLoop() ;
     } while (!ok) ;
+
+    // Now evaluate the size of the context client buffers
+    map<CContextClient*,map<int,size_t>> fieldBufferEvaluation ;
+    for(auto field : fileOutField) field->evaluateBufferSize(fieldBufferEvaluation, CXios::isOptPerformance) ; // output to server
+    for(auto field : couplerOutField) field->evaluateBufferSize(fieldBufferEvaluation, CXios::isOptPerformance) ; // output to coupler
+    for(auto field : fieldModelIn) field->evaluateBufferSize(fieldBufferEvaluation, CXios::isOptPerformance) ; // server to client (for io servers)
+    
+    // fix size for each context client
+    for(auto& it : fieldBufferEvaluation) it.first->setBufferSize(it.second) ;
+
 
      CTimer::get("Context : close definition").suspend() ;
Index: XIOS/dev/dev_trunk_graph/src/node/context.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/node/context.hpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/node/context.hpp	(revision 2137)
@@ -15,4 +15,5 @@
 #include "server_context.hpp"
 #include "event_scheduler.hpp"
+
 
 namespace xios
@@ -108,4 +109,5 @@
          // Put sever or client into loop state
          bool eventLoop(bool enableEventsProcessing=true);
+         bool scheduledEventLoop(bool enableEventsProcessing=true) ; 
          void globalEventLoop(void);
 
@@ -148,6 +150,4 @@
          std::map<int, StdSize> getAttributesBufferSize(std::map<int, StdSize>& maxEventSize, CContextClient* contextClient, bool bufferForWriting = false);
          std::map<int, StdSize> getDataBufferSize(std::map<int, StdSize>& maxEventSize, CContextClient* contextClient, bool bufferForWriting = false);
-         void setClientServerBuffer(CContextClient* contextClient, bool bufferForWriting = false); // old interface to be removed
-         void setClientServerBuffer(vector<CField*>& fields, bool bufferForWriting) ; 
 
          // Distribute files (in write mode) among secondary-server pools according to the estimated data flux
@@ -355,6 +355,14 @@
          string contextId_ ; //!< context client id for the servers. For clients this is same as getId() 
          bool isProcessingEvent_ ;
+    private:     
          CServerContext* parentServerContext_ ;
-
+    public:
+         CServerContext* getParentServerContext(void) { return parentServerContext_; }
+    private: 
+      bool lockedContext_=false;
+    public: 
+        void lockContext(void) {lockedContext_=true; }
+        void unlockContext(void) {lockedContext_=true; }
+        bool isLockedContext(void) { return lockedContext_;}
       public: // Some function maybe removed in the near future
         // virtual void toBinary  (StdOStream & os) const;
Index: XIOS/dev/dev_trunk_graph/src/node/domain.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/node/domain.cpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/node/domain.cpp	(revision 2137)
@@ -805,10 +805,13 @@
         nj = 1;
         jbegin = 0;
-        if (!i_index.isEmpty()) ni = i_index.numElements();
-        j_index.resize(ni);
-        for(int i=0;i<ni;++i) j_index(i)=0;
-
-        if (!area.isEmpty())
-          area.transposeSelf(1, 0);
+        if (!i_index.isEmpty()) 
+        {
+          ni = i_index.numElements();
+          j_index.resize(ni);
+          for(int i=0;i<ni;++i) j_index(i)=0;
+        }
+        
+
+        if (!area.isEmpty()) area.transposeSelf(1, 0); // => to be checked why is it transposed
      }
 
@@ -1780,4 +1783,5 @@
    }
 
+
   string CDomain::getCouplingAlias(const string& fieldId, int posInGrid)
   {
@@ -1808,5 +1812,5 @@
   void CDomain::makeAliasForCoupling(const string& fieldId, int posInGrid)
   {
-     const string domainId = getCouplingAlias(fieldId, posInGrid);
+    const string domainId = getCouplingAlias(fieldId, posInGrid);
     this->createAlias(domainId) ;
   }
Index: XIOS/dev/dev_trunk_graph/src/node/domain.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/node/domain.hpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/node/domain.hpp	(revision 2137)
@@ -241,5 +241,4 @@
         void makeAliasForCoupling(const string& fieldId, int posInGrid) ;
         string getCouplingAlias(const string& fieldId, int posInGrid) ;
-
        private:
 
Index: XIOS/dev/dev_trunk_graph/src/node/extract_domain_to_axis.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/node/extract_domain_to_axis.cpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/node/extract_domain_to_axis.cpp	(revision 2137)
@@ -67,13 +67,13 @@
     {
       case direction_attr::jDir:
-        if (axis_n_glo != domain_ni_glo)
+        if (axis_n_glo != domain_nj_glo)
           ERROR("CExtractDomainToAxis::checkValid(CAxis* axisDst, CDomain* domainSrc)",
-            << "Extract domain along j, axis destination should have n_glo equal to ni_glo of domain source"
-            << "Domain source " <<domainSrc->getId() << " has nj_glo " << domain_ni_glo << std::endl
+            << "Extract domain along j, axis destination should have n_glo equal to nj_glo of domain source"
+            << "Domain source " <<domainSrc->getId() << " has nj_glo " << domain_nj_glo << std::endl
             << "Axis destination " << axisDst->getId() << " has n_glo " << axis_n_glo);
-        if ((position < 0) || (position > domain_ni_glo))
+        if ((position < 0) || (position >= domain_ni_glo))
         ERROR("CExtractDomainToAxis::checkValid(CAxis* axisDst, CDomain* domainSrc)",
-          << "Extract domain along j, position should be inside 0 and ni_glo of domain source"
-          << "Domain source " <<domainSrc->getId() << " has nj_glo " << domain_ni_glo << std::endl
+          << "Extract domain along j, position should be inside 0 and ni_glo-1 of domain source"
+          << "Domain source " <<domainSrc->getId() << " has ni_glo " << domain_ni_glo << std::endl
           << "Axis destination " << axisDst->getId() << std::endl
           << "Position " << position);
@@ -81,13 +81,13 @@
 
       case direction_attr::iDir:
-        if (axis_n_glo != domain_nj_glo)
+        if (axis_n_glo != domain_ni_glo)
           ERROR("CExtractDomainToAxis::checkValid(CAxis* axisDst, CDomain* domainSrc)",
-            << "Extract domain along i, axis destination should have n_glo equal to nj_glo of domain source"
-            << "Domain source " <<domainSrc->getId() << " has nj_glo " << domain_nj_glo << std::endl
+            << "Extract domain along i, axis destination should have n_glo equal to ni_glo of domain source"
+            << "Domain source " <<domainSrc->getId() << " has ni_glo " << domain_ni_glo << std::endl
             << "Axis destination " << axisDst->getId() << " has n_glo " << axis_n_glo);
-        if ((position < 0) || (position > domain_nj_glo))
+        if ((position < 0) || (position >= domain_nj_glo))
         ERROR("CExtractDomainToAxis::checkValid(CAxis* axisDst, CDomain* domainSrc)",
-          << "Extract domain along i, position should be inside 0 and nj_glo of domain source"
-          << "Domain source " <<domainSrc->getId() << " has nj_glo " << domain_ni_glo << std::endl
+          << "Extract domain along i, position should be inside 0 and nj_glo-1 of domain source"
+          << "Domain source " <<domainSrc->getId() << " has nj_glo " << domain_nj_glo << std::endl
           << "Axis destination " << axisDst->getId() << std::endl
           << "Position " << position);
Index: XIOS/dev/dev_trunk_graph/src/node/field.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/node/field.cpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/node/field.cpp	(revision 2137)
@@ -383,4 +383,5 @@
   CATCH_DUMP_ATTR
 
+  
   //----------------------------------------------------------------
 
@@ -497,4 +498,42 @@
   CATCH_DUMP_ATTR
 
+  bool CField::evaluateBufferSize(map<CContextClient*,map<int,size_t>>& evaluateBuffer, bool isOptPerformance)
+  {
+    CContextClient* client=nullptr ;
+
+    for(int i=0;i<2;i++)
+    {
+      map<int,int> dataSize ;
+      if (i==0  && clientToServerStoreFilter_) client = clientToServerStoreFilter_-> getTransferedDataSize(dataSize) ;
+      if (i==1  && serverToClientStoreFilter_) client = serverToClientStoreFilter_-> getTransferedDataSize(dataSize) ;
+
+      if (client!=nullptr)
+      {
+        map<int,size_t> bufferSize ;
+   
+        if (evaluateBuffer.count(client)!=0) bufferSize = evaluateBuffer[client] ;
+        if (isOptPerformance)
+        {
+          for(auto& it : dataSize) 
+          {
+            if (bufferSize.count(it.first)==0) bufferSize[it.first]=it.second ;
+            else bufferSize[it.first]+=it.second ;
+          }
+        }
+        else
+        {
+          for(auto& it : dataSize) 
+          {
+            if (bufferSize.count(it.first)==0) bufferSize[it.first]=it.second ;
+            else bufferSize[it.first]=std::max(bufferSize[it.first],(size_t)it.second) ;
+          }
+        }
+        evaluateBuffer[client] = bufferSize ;
+        client=nullptr ;
+      }
+    }
+    if (client==nullptr) return false ;
+    else return true;
+  }  
 
 
@@ -550,21 +589,11 @@
     bool buildGraph_ = !build_workflow_graph.isEmpty() && build_workflow_graph == true ;
     std::cout<<"field id="<<this->getId()<<" build_workflow_graph="<<buildGraph_<<std::endl;
-
-    if (!inputFilter) 
-    {
-      inputFilter = std::shared_ptr<CPassThroughFilter>(new CPassThroughFilter(gc)); 
-      /*if(buildGraph_)
-      {
-        std::cout<<"============== field "<<this->getId()<<" calls a pass through filter ============== "<<inputFilter<<" ***** "<<CXios::isClient<<std::endl;
-        inputFilter->graphEnabled = true;
-        inputFilter->graphPackage = new CGraphPackage;
-        inputFilter->graphPackage->inFields.push_back(this);
-      }*/
-    }
+    if (!inputFilter) inputFilter = std::shared_ptr<CPassThroughFilter>(new CPassThroughFilter(gc)); 
      
     if (hasDirectFieldReference())
     {
-      
       CField* fieldRef = getDirectFieldReference();
+
+      //------ build_workflow_graph start
       if(buildGraph_)
       {
@@ -580,4 +609,6 @@
       
       if(buildGraph_) this->build_workflow_graph.set(build_workflow_graph);
+      //------ build_workflow_graph end
+
       bool ret=fieldRef->buildWorkflowGraph(gc); 
       if (!ret) return false ; // workflow graph cannot be built at this stage
@@ -612,20 +643,8 @@
       {
         grid->solveElementsRefInheritance() ;
-       
-        // new
-        
         std::pair<std::shared_ptr<CFilter>, std::shared_ptr<CFilter> > filters = grid->buildTransformationGraph(gc, false,  gridSrc, detectMissingValues, defaultValue, newGrid, buildGraph_, this) ;
         lastFilter->connectOutput(filters.first, 0);
-        /*if(buildGraph_)
-        {
-          std::cout<<"============== field "<<this->getId()<<" calls a transformation filter 1 ============== "<<lastFilter<<" _ "<<filters.first<<" ***** "<<CXios::isClient<<std::endl;
-          filters.first->graphEnabled=true;
-          filters.first->graphPackage = new CGraphPackage;
-          filters.first->graphPackage->inFields.push_back(this);
-        }*/
         lastFilter = filters.second;
         gridSrc = newGrid ;
-
-        // end new
       }
 
@@ -658,6 +677,8 @@
          grid_ = newGrid ;
          grid_ref=grid_->getId() ; // for server 
+         //grid_->completeGrid(); // grid generation, to be checked
          if (fileIn_->isClientSide()) fileIn_->readFieldAttributesValues(this);
          grid_->checkElementsAttributes() ;
+//         grid_->solveDomainAxisBaseRef();
          // probably in future tag grid incomplete if coming from a reading
          instantDataFilter=inputFilter ;
@@ -927,4 +948,52 @@
    * \return the output pin corresponding to a self reference
    */
+
+/* old version
+  std::shared_ptr<COutputPin> CField::getSelfReference(CGarbageCollector& gc)
+  TRY
+  {
+    if (instantDataFilter || !hasExpression())
+      ERROR("COutputPin* CField::getSelfReference(CGarbageCollector& gc)",
+            "Impossible to add a self reference to a field which has already been parsed or which does not have an expression.");
+
+    if (!selfReferenceFilter)
+    {
+      const bool detectMissingValues = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true);
+      const double defaultValue  = detectMissingValues ? default_value : (!default_value.isEmpty() ? default_value : 0.0);
+
+      if (file && !file->mode.isEmpty() && file->mode == CFile::mode_attr::read)
+      {
+        if (!serverSourceFilter)
+        {
+          checkTimeAttributes();
+          serverSourceFilter = std::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid_, true, false, freq_offset, true,
+                                                              detectMissingValues, defaultValue));
+         }
+
+        selfReferenceFilter = serverSourceFilter;
+      }
+      else if (!field_ref.isEmpty())
+      {
+        CField* fieldRef = CField::get(field_ref);
+        fieldRef->buildFilterGraph(gc, false);
+        selfReferenceFilter = fieldRef->getInstantDataFilter();
+      }
+      else
+      {
+        if (!clientSourceFilter)
+        {
+          if (check_if_active.isEmpty()) check_if_active = false;
+          clientSourceFilter = std::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid_, true, true, NoneDu, false,
+                                                                                detectMissingValues, defaultValue));
+        }
+
+        selfReferenceFilter = clientSourceFilter;
+      }
+    }
+
+    return selfReferenceFilter;
+  }
+  CATCH_DUMP_ATTR
+*/
   std::shared_ptr<COutputPin> CField::getSelfReference(CGarbageCollector& gc)
   TRY
@@ -1030,4 +1099,39 @@
   CATCH_DUMP_ATTR
 
+/* old version   
+  std::shared_ptr<COutputPin> CField::getSelfTemporalDataFilter(CGarbageCollector& gc, CDuration outFreq)
+  TRY
+  {
+    if (instantDataFilter || !hasExpression())
+      ERROR("COutputPin* CField::getSelfTemporalDataFilter(CGarbageCollector& gc)",
+            "Impossible to add a self reference to a field which has already been parsed or which does not have an expression.");
+
+    if (!selfReferenceFilter) getSelfReference(gc) ;
+
+    if (serverSourceFilter || clientSourceFilter)
+    {
+      if (operation.isEmpty())
+        ERROR("void CField::getSelfTemporalDataFilter(CGarbageCollector& gc, CDuration outFreq)",
+              << "An operation must be defined for field \"" << getId() << "\".");
+
+      checkTimeAttributes(&outFreq);
+
+      const bool detectMissingValues = (!detect_missing_value.isEmpty() && detect_missing_value == true);
+      std::shared_ptr<CTemporalFilter> temporalFilter(new CTemporalFilter(gc, operation,
+                                                                          CContext::getCurrent()->getCalendar()->getInitDate(),
+                                                                          freq_op, freq_offset, outFreq, detectMissingValues));
+
+      selfReferenceFilter->connectOutput(temporalFilter, 0);
+      return temporalFilter ;
+    }
+    else if (!field_ref.isEmpty())
+    {
+      CField* fieldRef = CField::get(field_ref);
+      fieldRef->buildFilterGraph(gc, false); 
+      return fieldRef->getTemporalDataFilter(gc, outFreq) ;
+    }
+  }
+  CATCH_DUMP_ATTR
+*/
 
   //----------------------------------------------------------------
@@ -1355,15 +1459,13 @@
    CATCH_DUMP_ATTR
 
-
-   bool CField::isGridCompleted(void)
-   TRY
-   { 
-     bool isFullCompleted ;
-     MPI_Allreduce(&isGridCompleted_,&isFullCompleted,1,MPI_C_BOOL, MPI_LAND, CContext::getCurrent()->getIntraComm() ) ;
-     if ( (isGridCompleted_==false && isFullCompleted==true) ) ERROR("bool CField::isGridCompleted(void)",<< "incoherecy in MPI_AllReduce") ;
-     return isFullCompleted ; 
-   }
-   CATCH_DUMP_ATTR
-
+  bool CField::isGridCompleted(void)
+  TRY
+  { 
+    bool isFullCompleted ;
+    MPI_Allreduce(&isGridCompleted_,&isFullCompleted,1,MPI_C_BOOL, MPI_LAND, CContext::getCurrent()->getIntraComm() ) ;
+    if ( (isGridCompleted_==false && isFullCompleted==true) ) ERROR("bool CField::isGridCompleted(void)",<< "incoherecy in MPI_AllReduce") ;
+    return isFullCompleted ; 
+  }
+  CATCH_DUMP_ATTR
 
   void CField::sendAddAllVariables(CContextClient* client)
Index: XIOS/dev/dev_trunk_graph/src/node/field.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/node/field.hpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/node/field.hpp	(revision 2137)
@@ -110,5 +110,7 @@
          // Grid data buffer size for each connection of contextclient
          std::map<int, StdSize> getGridDataBufferSize(CContextClient* client, bool bufferForWriting = false);
-
+         
+         // evaluation the size of the buffer for the field
+         bool evaluateBufferSize(map<CContextClient*,map<int,size_t>>& evaluateBuffer, bool isOptPerformance) ;
        public:
           void makeGridAliasForCoupling(void) ;
@@ -236,5 +238,5 @@
           bool isGridCompleted_ = true ;
       public:
-          bool isGridCompleted() ; 
+          bool isGridCompleted()  ; 
           void setGridCompleted(void) { isGridCompleted_= true; }
           void unsetGridCompleted(void) { isGridCompleted_ = false ;}
Index: XIOS/dev/dev_trunk_graph/src/node/grid.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/node/grid.cpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/node/grid.cpp	(revision 2137)
@@ -1210,4 +1210,5 @@
   }
 
+
   void CGrid::sendGridToCouplerOut(CContextClient* client, const string& fieldId)
   {
@@ -1217,4 +1218,5 @@
     distributeGridToServer(client,fieldId) ;
   }
+
 
   void CGrid::distributeGridToServer(CContextClient* client, const string& fieldId)
@@ -1312,5 +1314,5 @@
     CMessage message ;
     if (isCoupling) message<<getCouplingAlias(fieldId) ;
-    else message<<getId() ;
+    else message<<getId() ; 
     gridScattererConnector.transfer(maskOut, client, event, message) ;
     for(auto& it : scattererConnectors) delete it ;
@@ -1342,6 +1344,6 @@
     clientFromServerConnector_[client] = new CGridGathererConnector(clientFromServerConnectors) ;
 
-
-  }
+  }
+
 
   void CGrid::recvMask(CEventServer& event)
@@ -1394,10 +1396,8 @@
   }
 
-
   string CGrid::getCouplingAlias(const string& fieldId)
   {
     return "_grid_of_"+fieldId;
   }
-
 
   void CGrid::makeAliasForCoupling(const string& fieldId)
@@ -1650,9 +1650,6 @@
     std::shared_ptr<CFilter> inputFilter = std::shared_ptr<CPassThroughFilter>(new CPassThroughFilter(gc));
     std::shared_ptr<CFilter> outputFilter = inputFilter ;
-    cout<<"***************CGrid::buildTransformationGraph Pass through filter ***************"<<transformationGoing<<field->getId()<<endl;
-    /*inputFilter->graphEnabled = true;
-    inputFilter->graphPackage = new CGraphPackage;
-    inputFilter->graphPackage->inFields.push_back(field);
-*/
+
+
     string newId ;
     if (gridSrc!=nullptr) newId = gridSrc->getId() + " --> " + this->getId()  ;
@@ -1667,6 +1664,5 @@
     else  
     {
-      StdString role = CXios::isClient? "Client ": "Server ";
-      cout<<role<<"Create new grid : "<<newId<<endl ;
+      cout<<"Create new grid : "<<newId<<endl ;
       newGrid = CGrid::create(newId) ;
       isNewGrid = true ;
@@ -1715,5 +1711,6 @@
         else if (srcElement.type==TYPE_AXIS)   tmpGridSrc->addAxis(srcElement.axis->getId()) ;
         else if (srcElement.type==TYPE_SCALAR) tmpGridSrc->addScalar(srcElement.scalar->getId()) ;
-        tmpGridSrc->checkElementsAttributes() ;
+        // WARNING -> suppress checkElement attribute ? What append ?
+        // tmpGridSrc->checkElementsAttributes() ;
         CGrid* tmpGridDst=CGrid::create(); // destination Grid
         map<int,int> posInGrid={{0,0}} ;
@@ -1956,5 +1953,4 @@
           auxField->getInstantDataFilter()->connectOutput(transformFilter,i) ;
           i++ ;
-          
         }
         outputFilter = transformFilter ;
Index: XIOS/dev/dev_trunk_graph/src/node/grid.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/node/grid.hpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/node/grid.hpp	(revision 2137)
@@ -336,5 +336,5 @@
 
       private:
-        CGridLocalConnector* workflowToModelConnector_ ;
+        CGridLocalConnector* workflowToModelConnector_ = nullptr;
       public:
         void computeWorkflowToModelConnector(void) ;
Index: XIOS/dev/dev_trunk_graph/src/node/interpolate_axis.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/node/interpolate_axis.cpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/node/interpolate_axis.cpp	(revision 2137)
@@ -60,11 +60,32 @@
     }
 
+    if (!this->coordinate.isEmpty() && (!this->coordinate_src.isEmpty() || !this->coordinate_dst.isEmpty()))
+    {
+       ERROR("CInterpolateAxis::checkValid(CAxis* axisSrc)",
+               << "<coordinate> is incompatible with <coordinate_src> or <coordinate_dst> attributes. <coordinate> attribute is present only for backward"
+               << "compatibility and is now declared obsolete") ;
+    }
 
     if (!this->coordinate.isEmpty())
     {
-      StdString coordinate = this->coordinate.getValue();
       if (!CField::has(coordinate))
         ERROR("CInterpolateAxis::checkValid(CAxis* axisSrc)",
                << "Coordinate field whose id " << coordinate << "does not exist "
+               << "Please define one");
+    }
+
+    if (!this->coordinate_src.isEmpty())
+    {
+      if (!CField::has(coordinate_src))
+        ERROR("CInterpolateAxis::checkValid(CAxis* axisSrc)",
+               << "Coordinate field whose id " << coordinate_src << "does not exist "
+               << "Please define one");
+    }
+
+    if (!this->coordinate_dst.isEmpty())
+    {
+      if (!CField::has(coordinate_dst))
+        ERROR("CInterpolateAxis::checkValid(CAxis* axisSrc)",
+               << "Coordinate field whose id " << coordinate_dst << "does not exist "
                << "Please define one");
     }
@@ -74,9 +95,37 @@
   {
     std::vector<StdString> auxInputs;
+    
+    if (!this->coordinate.isEmpty() && (!this->coordinate_src.isEmpty() || !this->coordinate_dst.isEmpty()))
+    {
+       ERROR("std::vector<StdString> CInterpolateAxis::checkAuxInputs_()",
+               << "<coordinate> is incompatible with <coordinate_src> or <coordinate_dst> attributes. <coordinate> attribute is present only for backward"
+               << "compatibility and is now declared obsolete") ;
+    }
+
     if (!this->coordinate.isEmpty())
     {
       StdString coordinate = this->coordinate.getValue();
       if (!CField::has(coordinate))
-        ERROR("CInterpolateAxis::checkValid(CAxis* axisSrc)",
+        ERROR("std::vector<StdString> CInterpolateAxis::checkAuxInputs_()",
+               << "Coordinate field whose id " << coordinate << "does not exist "
+               << "Please define one");
+      auxInputs.push_back(coordinate);
+    }
+
+    if (!this->coordinate_src.isEmpty())
+    {
+      StdString coordinate = this->coordinate_src.getValue();
+      if (!CField::has(coordinate))
+        ERROR("std::vector<StdString> CInterpolateAxis::checkAuxInputs_()",
+               << "Coordinate field whose id " << coordinate << "does not exist "
+               << "Please define one");
+      auxInputs.push_back(coordinate);
+    }
+
+    if (!this->coordinate_dst.isEmpty())
+    {
+      StdString coordinate = this->coordinate_dst.getValue();
+      if (!CField::has(coordinate))
+        ERROR("std::vector<StdString> CInterpolateAxis::checkAuxInputs_()",
                << "Coordinate field whose id " << coordinate << "does not exist "
                << "Please define one");
@@ -97,7 +146,9 @@
                                                         std::map<int, int>& elementPositionInGridDst2DomainPosition)
   {
-    if (!coordinate.isEmpty())  return CAxisAlgorithmInterpolateCoordinate::create(isSource, gridDst,  gridSrc, this, elementPositionInGrid, 
-                                      elementPositionInGridSrc2ScalarPosition, elementPositionInGridSrc2AxisPosition, elementPositionInGridSrc2DomainPosition,
-                                      elementPositionInGridDst2ScalarPosition, elementPositionInGridDst2AxisPosition, elementPositionInGridDst2DomainPosition);
+    if (!coordinate.isEmpty() || !coordinate_src.isEmpty() || !coordinate_dst.isEmpty()) 
+       return CAxisAlgorithmInterpolateCoordinate::create(isSource, gridDst,  gridSrc, this, elementPositionInGrid, 
+              elementPositionInGridSrc2ScalarPosition, elementPositionInGridSrc2AxisPosition, elementPositionInGridSrc2DomainPosition,
+              elementPositionInGridDst2ScalarPosition, elementPositionInGridDst2AxisPosition, elementPositionInGridDst2DomainPosition);
+    
     else return CAxisAlgorithmInterpolate::create(isSource, gridDst,  gridSrc, this, elementPositionInGrid, 
                 elementPositionInGridSrc2ScalarPosition, elementPositionInGridSrc2AxisPosition, elementPositionInGridSrc2DomainPosition,
Index: XIOS/dev/dev_trunk_graph/src/node/scalar.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/node/scalar.cpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/node/scalar.cpp	(revision 2137)
@@ -201,5 +201,5 @@
     this->sendAllAttributesToServer(client, scalarId);
   }  
-  
+
   string CScalar::getCouplingAlias(const string& fieldId, int posInGrid)
   {
Index: XIOS/dev/dev_trunk_graph/src/object_factory_decl_macro.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/object_factory_decl_macro.hpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/object_factory_decl_macro.hpp	(revision 2137)
@@ -19,2 +19,3 @@
 
 
+
Index: XIOS/dev/dev_trunk_graph/src/object_factory_impl.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/object_factory_impl.hpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/object_factory_impl.hpp	(revision 2137)
@@ -149,5 +149,6 @@
    const StdString& CObjectFactory::GetUIdBase(void)
    {
-      static const StdString base = "__"+CObjectFactory::CurrContext + "::" + U::GetName() + "_undef_id_";
+      static StdString base ; 
+      base = "__"+CObjectFactory::CurrContext + "::" + U::GetName() + "_undef_id_";
       return base;
    }
Index: XIOS/dev/dev_trunk_graph/src/test/generic_testcase.f90
===================================================================
--- XIOS/dev/dev_trunk_graph/src/test/generic_testcase.f90	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/test/generic_testcase.f90	(revision 2137)
@@ -113,10 +113,4 @@
   CALL MPI_FINALIZE(ierr)
   
-  if(i_am_server) then
-    print*, "server ",rank, " finished"
-  else
-    print*, "client ",rank, " finished"
-  endif
-
 CONTAINS
 
@@ -368,5 +362,5 @@
     pressure=1e20
     DO j=0,z-1
-      pressure(:,j)=axis_value(j)*100000 ; ! Pa 
+      pressure(:,j)=axis_value(j)*100000 ; ! Pa
       DO i=0,xy-1
         IF (domain_index(i)/=-1) THEN
Index: XIOS/dev/dev_trunk_graph/src/timeline_events.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/timeline_events.hpp	(revision 2137)
+++ XIOS/dev/dev_trunk_graph/src/timeline_events.hpp	(revision 2137)
@@ -0,0 +1,14 @@
+#ifndef __TIMELINE_EVENTS_HPP__
+#define __TIMELINE_EVENTS_HPP__
+
+#include <limits>
+
+namespace xios
+{
+  const size_t timeLineEventbase = std::numeric_limits<size_t>::max()-100 ; 
+  const size_t timelineEventNotifyChangeBufferSize = timeLineEventbase + 0  ; 
+  const size_t timelineEventChangeBufferSize = timeLineEventbase + 1  ; 
+}
+
+
+#endif
Index: XIOS/dev/dev_trunk_graph/src/transformation/axis_algorithm/axis_algorithm_extract_domain.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/transformation/axis_algorithm/axis_algorithm_extract_domain.cpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/transformation/axis_algorithm/axis_algorithm_extract_domain.cpp	(revision 2137)
@@ -51,4 +51,5 @@
 TRY
 {
+  axisDestination->checkAttributes() ;
   algo->checkValid(axisDestination, domainSource);
   StdString op = "extract";
Index: XIOS/dev/dev_trunk_graph/src/transformation/axis_algorithm/axis_algorithm_interpolate_coordinate.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/transformation/axis_algorithm/axis_algorithm_interpolate_coordinate.cpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/transformation/axis_algorithm/axis_algorithm_interpolate_coordinate.cpp	(revision 2137)
@@ -55,6 +55,18 @@
   vector<string> CAxisAlgorithmInterpolateCoordinate::getAuxFieldId(void)
   {
-    if (hasCoordinate_) return vector<string>(1,coordinate_) ;
+    if (hasCoordinateSrc_ && hasCoordinateDest_) return {coordinateSrc_,coordinateDest_} ;
+    else if (hasCoordinateSrc_) return {coordinateSrc_} ;
+    else if (hasCoordinateDest_) return {coordinateDest_} ;
     else return vector<string>() ;
+  }
+  
+  bool CAxisAlgorithmInterpolateCoordinate::transformAuxField(int pos)
+  {
+    if (pos==0)
+    {
+      if (hasCoordinateSrc_) return true ;
+      else if(hasCoordinateDest_) return false ;
+    }
+    if (pos==1) return false ;
   }
 
@@ -69,16 +81,35 @@
     if (!interpAxis->coordinate.isEmpty())
     {
-      coordinate_ = interpAxis->coordinate.getValue();
+      coordinateSrc_ = interpAxis->coordinate.getValue();
       hasCoordinate_=true ;
-    }
-  
-    ngloSrc_=axisSource->n_glo ;
+      hasCoordinateSrc_=true ;
+    }
+
+    if (!interpAxis->coordinate_src.isEmpty())
+    {
+      coordinateSrc_ = interpAxis->coordinate_src.getValue();
+      hasCoordinate_=true ;
+      hasCoordinateSrc_=true ;
+    }
+
+    if (!interpAxis->coordinate_dst.isEmpty())
+    {
+      coordinateDest_ = interpAxis->coordinate_dst.getValue();
+      hasCoordinate_=true ;
+      hasCoordinateDest_=true ;
+    }
+
+    ngloSrc_=axisSource->n_glo ; 
     nDest_ =  axisDest_-> getLocalView(CElementView::WORKFLOW)->getSize() ;
-    CArray<double,1> coord ;
-    CLocalConnector destConnector(axisDest_->getLocalView(CElementView::FULL), axisDest_->getLocalView(CElementView::WORKFLOW)) ;
-    destConnector.computeConnector() ;
-    destConnector.transfer(axisDest_->value, coord) ;
-    destCoordinate_ = vector<double>(coord.dataFirst(), coord.dataFirst()+nDest_) ;
     
+    if (!hasCoordinateDest_)
+    {
+      CArray<double,1> coord ;
+      CLocalConnector destConnector(axisDest_->getLocalView(CElementView::FULL), axisDest_->getLocalView(CElementView::WORKFLOW)) ;
+      destConnector.computeConnector() ;
+      destConnector.transfer(axisDest_->value, coord) ;
+      destCoordinate_ = vector<double>(coord.dataFirst(), coord.dataFirst()+nDest_) ;
+    }
+
     CArray<size_t,1> globalIndex(ngloSrc_) ;
     for(int i=0;i<ngloSrc_;i++) 
@@ -93,4 +124,15 @@
 
     this->computeAlgorithm(axisSource->getLocalView(CElementView::WORKFLOW), axisSourceGlo.getView(CElementView::FULL)) ;
+
+    if (!hasCoordinateSrc_)
+    {
+      CArray<double,1> coord ;
+      CArray<double,1> coordGlo ;
+      CLocalConnector srcConnector(axisSrc_->getLocalView(CElementView::FULL), axisSrc_->getLocalView(CElementView::WORKFLOW)) ;
+      srcConnector.computeConnector() ;
+      srcConnector.transfer(axisSrc_->value, coord) ; // full view value -> workflow value
+      transferTransformConnector_ -> transfer(coord, coordGlo) ; // workflow view -> full global view
+      srcCoordinate_ = vector<double>(coordGlo.dataFirst(), coordGlo.dataFirst()+ngloSrc_) ;
+    }
   }
   CATCH
@@ -98,5 +140,6 @@
   CTransformFilter* CAxisAlgorithmInterpolateCoordinate::createTransformFilter(CGarbageCollector& gc, CGridAlgorithm* algo, bool detectMissingValues, double defaultValue)
   {
-    return new CTransformFilter(gc, 2, algo, detectMissingValues, defaultValue) ;  
+    if (hasCoordinateSrc_ && hasCoordinateDest_) return new CTransformFilter(gc, 3, algo, detectMissingValues, defaultValue) ;
+    else return new CTransformFilter(gc, 2, algo, detectMissingValues, defaultValue) ;  
   }
 
@@ -105,14 +148,20 @@
   {
     CArray<double,1> dataInTmp;
-    CArray<double,1> auxDataInTmp ;
+    CArray<double,1> auxDataInSrc ;
     transferTransformConnector_ -> transfer(dimBefore, dimAfter, dataIn, dataInTmp) ;
-    transferTransformConnector_ -> transfer(dimBefore, dimAfter, auxDataIn[0], auxDataInTmp) ;
-  
+    if (hasCoordinateSrc_)  transferTransformConnector_ -> transfer(dimBefore, dimAfter, auxDataIn[0], auxDataInSrc) ;
+
+   
     dataOut.resize(dimBefore*dimAfter*nDest_) ;
-    const double* pressure = auxDataInTmp.dataFirst() ;
+    const double* pressureSrc ;
+    const double* pressureDest ;
+    if (hasCoordinateSrc_)  pressureSrc = auxDataInSrc.dataFirst() ;
+    if (hasCoordinateDest_ && hasCoordinateSrc_) pressureDest = auxDataIn[1].dataFirst() ;
+    else if (hasCoordinateDest_ && !hasCoordinateSrc_ ) pressureDest = auxDataIn[0].dataFirst() ;
+    
     const double* in = dataInTmp.dataFirst() ;
     double* out = dataOut.dataFirst() ;
 
-    size_t sliceSrc = dimAfter*ngloSrc_ ;
+    size_t sliceSrc  = dimAfter*ngloSrc_ ;
     size_t sliceDest = dimAfter*nDest_ ;
     vector<double> srcCoordinate(ngloSrc_) ;
@@ -123,24 +172,90 @@
     std::vector<int> destIndex(nDest_);
 
-    size_t nsrc ;
+    size_t nsrc, nDest ;
+
     for(size_t j=0, posJsrc=0, posJdest=0 ;  j<dimBefore ; j++, posJsrc+=sliceSrc, posJdest+=sliceDest )
       for(size_t k=0, posKsrc=posJsrc, posKdest=posJdest ; k<dimAfter ; k++, posKsrc++,posKdest++)
       {
-        nsrc=0 ;
-        for(size_t i=0, posIsrc=posKsrc, posIdest=posKdest ; i<ngloSrc_ ; i++, posIsrc+=dimAfter, posIdest+=dimAfter)
-        {
-          if ( !( std::isnan(pressure[posIsrc]) || std::isnan(in[posIsrc]) ) )
-          {
-            srcCoordinate[nsrc]=pressure[posIsrc] ;
-            srcValue[nsrc] = in[posIsrc] ;
-            nsrc++ ;
-          }
-        }
-        destCoordinate = destCoordinate_ ;    
-        computeInterp(nsrc, srcCoordinate, srcValue, srcIndex, nDest_, destCoordinate, destValue, destIndex) ;
-
-        for(size_t i=0, posIdest=posKdest ; i<nDest_ ; i++, posIdest+=dimAfter)  out[posIdest] = destValue[i] ;
+        if (hasCoordinateSrc_)
+        {
+          nsrc=0 ;
+          for(size_t i=0, posIsrc=posKsrc, posIdest=posKdest ; i<ngloSrc_ ; i++, posIsrc+=dimAfter, posIdest+=dimAfter)
+          {
+            if ( !( std::isnan(pressureSrc[posIsrc]) || std::isnan(in[posIsrc]) ) )
+            {
+              srcCoordinate[nsrc]=pressureSrc[posIsrc] ;
+              srcValue[nsrc] = in[posIsrc] ;
+              nsrc++ ;
+            }
+          }
+        }
+        else
+        {
+          nsrc=0 ;
+          for(size_t i=0, posIsrc=posKsrc ; i<ngloSrc_ ; i++, posIsrc+=dimAfter)
+          {
+            if ( !( std::isnan(srcCoordinate_[i]) || std::isnan(in[posIsrc]) ) )
+            {
+              srcCoordinate[nsrc]=srcCoordinate_[i] ;
+              srcValue[nsrc] = in[posIsrc] ;
+              nsrc++ ;
+            }
+          }
+        }  
+
+        if (hasCoordinateDest_)
+        {
+          nDest=0 ;
+          for(size_t i=0, posIdest=posKdest ; i<nDest_ ; i++, posIdest+=dimAfter)
+          {
+            if ( !( std::isnan(pressureDest[posIdest]) ) )
+            {
+              destCoordinate[nDest]=pressureDest[posIdest] ;
+              nDest++ ;
+            }
+          }
+        }
+        else
+        {
+          nDest=0 ;
+          for(size_t i=0, posIdest=posKdest ; i<nDest_ ; i++, posIdest+=dimAfter)
+          {
+            if ( !( std::isnan(destCoordinate[i]) ) )
+            {
+              destCoordinate[nDest]=destCoordinate_[i] ;
+              nDest++ ;
+            }
+          }
+        }
+  
+        computeInterp(nsrc, srcCoordinate, srcValue, srcIndex, nDest, destCoordinate, destValue, destIndex) ;
+        
+        if (hasCoordinateDest_)
+        {
+          nDest=0 ;
+          for(size_t i=0, posIdest=posKdest ; i<nDest_ ; i++, posIdest+=dimAfter)  
+          {
+            if ( !( std::isnan(pressureDest[posIdest]) ) )  
+            {
+              out[posIdest] = destValue[nDest] ;
+              nDest++ ;
+            }
+            else out[posIdest] = std::numeric_limits<double>::quiet_NaN() ;
+          }
+        }
+        else
+        {
+          nDest=0 ;
+          for(size_t i=0, posIdest=posKdest ; i<nDest_ ; i++, posIdest+=dimAfter)  
+          {
+            if ( !( std::isnan(destCoordinate[i]) ) )  
+            {
+              out[posIdest] = destValue[nDest] ;
+              nDest++ ;
+            }
+            else out[posIdest] = std::numeric_limits<double>::quiet_NaN() ;
+          }
+        }
       }
-
   }
 
@@ -176,7 +291,6 @@
             for(int j=lastj; j<nsrc; j++)
             { 
-              if (x >= srcCoordinate[srcIndex[j]] && x<srcCoordinate[srcIndex[j+1]]) ;
               lastj=j ;
-              break ;
+              if (x >= srcCoordinate[srcIndex[j]] && x<srcCoordinate[srcIndex[j+1]]) break ;
             }  
           }
@@ -205,8 +319,6 @@
           for(int j=lastj; j<nsrc; j++)
           { 
-            if (x >= srcCoordinate[srcIndex[j]] && x<srcCoordinate[srcIndex[j+1]]) ;
-            
             lastj=j ;
-            break ;
+            if (x >= srcCoordinate[srcIndex[j]] && x<srcCoordinate[srcIndex[j+1]])  break ;
           }  
         }
Index: XIOS/dev/dev_trunk_graph/src/transformation/axis_algorithm/axis_algorithm_interpolate_coordinate.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/transformation/axis_algorithm/axis_algorithm_interpolate_coordinate.hpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/transformation/axis_algorithm/axis_algorithm_interpolate_coordinate.hpp	(revision 2137)
@@ -32,4 +32,5 @@
   virtual ~CAxisAlgorithmInterpolateCoordinate() {}
   virtual vector<string> getAuxFieldId(void)  ;
+  virtual bool transformAuxField(int pos) ;
   virtual void apply(int dimBefore, int dimAfter, const CArray<double,1>& dataIn, 
                      const vector<CArray<double,1>>& auxDataIn, CArray<double,1>& dataOut) ;
@@ -44,6 +45,9 @@
   // Interpolation order
   int order_;
-  StdString coordinate_;
+  StdString coordinateSrc_; // pressure src
+  StdString coordinateDest_; // pressure dst
   bool hasCoordinate_=false ;
+  bool hasCoordinateSrc_=false ;
+  bool hasCoordinateDest_=false ;
 
   CAxis* axisSrc_=nullptr ;
@@ -51,5 +55,6 @@
   size_t ngloSrc_ ;
   size_t nDest_ ;
-  vector<double> destCoordinate_ ;
+  vector<double> srcCoordinate_  ; // src axis value
+  vector<double> destCoordinate_ ; // dst axis value
 
 public:
Index: XIOS/dev/dev_trunk_graph/src/transformation/axis_algorithm/axis_algorithm_inverse.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/transformation/axis_algorithm/axis_algorithm_inverse.cpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/transformation/axis_algorithm/axis_algorithm_inverse.cpp	(revision 2137)
@@ -52,4 +52,5 @@
 TRY
 {
+  axisDestination->checkAttributes() ;
   if (axisDestination->n_glo.getValue() != axisSource->n_glo.getValue())
   {
@@ -62,9 +63,8 @@
   auto& transMap = this->transformationMapping_;
 
-  int globalIndexSize = axisSource->index.numElements();
-  for (int idx = 0; idx < globalIndexSize; ++idx)
-  {
-    //transMap[axisDestination->index(idx)] = globalIndexSize-axisDestination->index(idx)-1;
-    transMap[axisSource->index(idx)] = globalIndexSize-axisSource->index(idx)-1;
+  int globalIndexSize = axisDestination->n_glo.getValue();
+  for (int idx = 0; idx < axisDestination->index.numElements(); ++idx)
+  {
+    transMap[axisDestination->index(idx)] = globalIndexSize-axisDestination->index(idx)-1;
   }
 
Index: XIOS/dev/dev_trunk_graph/src/transformation/domain_algorithm/domain_algorithm_reorder.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/transformation/domain_algorithm/domain_algorithm_reorder.cpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/transformation/domain_algorithm/domain_algorithm_reorder.cpp	(revision 2137)
@@ -44,11 +44,16 @@
 TRY
 {
+  domainDestination->type.setValue( CDomain::type_attr::rectilinear );
+  domainDestination->ni_glo = domainSource->ni_glo;
+  domainDestination->nj_glo = domainSource->nj_glo;
+  domainDestination->ni = domainSource->ni;
+  domainDestination->nj = domainSource->nj;
+  domainDestination->ibegin = domainSource->ibegin;
+  domainDestination->jbegin = domainSource->jbegin;
+
   reorderDomain->checkValid(domainSource);
-  domainDestination->type = domainSource->type;
-  domainDestination->ni_glo.setValue(domainSource->ni_glo.getValue());
-  domainDestination->nj_glo.setValue(domainSource->nj_glo.getValue());
   domainDestination->checkAttributes() ; // for now but maybe use domainSource as template for domain destination
 
-  if (domainDestination->type !=  CDomain::type_attr::rectilinear)
+  if (domainSource->type !=  CDomain::type_attr::rectilinear)
   {
       ERROR("CDomainAlgorithmReorder::CDomainAlgorithmReorder(CDomain* domainDestination, CDomain* domainSource, CReorderDomain* reorderDomain)",
@@ -65,10 +70,9 @@
   }
   
-  if (!reorderDomain->invert_lat.isEmpty())
+  if (!reorderDomain->invert_lat.isEmpty() && reorderDomain->invert_lat.getValue() )
   {
     CArray<int,1>& j_index=domainDestination->j_index ;
     int nglo = j_index.numElements() ;
     int nj_glo =domainDestination->nj_glo ;
-    
     for (size_t i = 0; i < nglo ; ++i)
     {
@@ -83,5 +87,4 @@
     CArray<int,1>& i_index=domainDestination->i_index ;
     int nglo = i_index.numElements() ;
-    
     for (size_t i = 0; i < nglo ; ++i)
     {
Index: XIOS/dev/dev_trunk_graph/src/transformation/domain_algorithm/domain_algorithm_zoom.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/transformation/domain_algorithm/domain_algorithm_zoom.cpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/transformation/domain_algorithm/domain_algorithm_zoom.cpp	(revision 2137)
@@ -95,11 +95,4 @@
   ibeginDest = destIBegin + domainSrc_->ibegin - zoomIBegin_;
   jbeginDest = destJBegin + domainSrc_->jbegin - zoomJBegin_;
-  
-  if (niDest==0) ibeginDest=0 ;
-  if (njDest==0) jbeginDest=0 ;
-    
-  domainDest_->type = domainSrc_ -> type ;
-  domainDest_->data_dim = domainSrc_->data_dim ;
-
   domainDest_->ni_glo.setValue(zoomNi_);
   domainDest_->nj_glo.setValue(zoomNj_);
Index: XIOS/dev/dev_trunk_graph/src/transformation/generic_algorithm_transformation.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/transformation/generic_algorithm_transformation.hpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/transformation/generic_algorithm_transformation.hpp	(revision 2137)
@@ -42,5 +42,5 @@
     virtual bool isGenerateTransformation(void) { return false ;}
     virtual StdString getAlgoName() { return "\\nGeneric algorithm transformation";}
-
+    virtual bool transformAuxField(int pos) { return true ;}
     virtual vector<string> getAuxFieldId(void) ;
   protected :
Index: XIOS/dev/dev_trunk_graph/src/transformation/grid_algorithm_generic.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/transformation/grid_algorithm_generic.cpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/transformation/grid_algorithm_generic.cpp	(revision 2137)
@@ -64,5 +64,9 @@
 
     gridTransformConnector_->transfer(dataIn, dataOutTmp) ;
-    for (int i=0; i<auxData.size();i++)  gridTransformConnector_->transfer(auxData[i], auxDataOutTmp[i]) ;
+    for (int i=0; i<auxData.size();i++)  
+    {
+      if (algorithm_->transformAuxField(i)) gridTransformConnector_->transfer(auxData[i], auxDataOutTmp[i]) ;
+      else auxDataOutTmp[i].reference(auxData[i]) ;
+    }
 
     algorithm_->apply(dimBefore_, dimAfter_, dataOutTmp, auxDataOutTmp, dataOut) ;
Index: XIOS/dev/dev_trunk_graph/src/transformation/transformation.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/transformation/transformation.hpp	(revision 2030)
+++ XIOS/dev/dev_trunk_graph/src/transformation/transformation.hpp	(revision 2137)
@@ -5,4 +5,5 @@
 #include "xml_node.hpp"
 #include "transformation_enum.hpp"
+#include "exception.hpp"
 
 namespace xios {
