Index: XMLIO_V2/dev/common/make_xios
===================================================================
--- XMLIO_V2/dev/common/make_xios	(revision 273)
+++ XMLIO_V2/dev/common/make_xios	(revision 274)
@@ -79,6 +79,6 @@
 export PATH=$PWD/tools/FCM/bin:$PATH
 
-$make_dir/tools/preprocess_cpp $make_dir/src/xmlio/iface/interface.cpp      $make_dir/src/xmlio/iface/interface.cpp.in
-$make_dir/tools/preprocess_f03 $make_dir/src/xmlio/fortran/ixmlioserver.f90 $make_dir/src/xmlio/fortran/ixmlioserver.f03.in
+#$make_dir/tools/preprocess_cpp $make_dir/src/xmlio/iface/interface.cpp      $make_dir/src/xmlio/iface/interface.cpp.in
+#$make_dir/tools/preprocess_f03 $make_dir/src/xmlio/fortran/ixmlioserver.f90 $make_dir/src/xmlio/fortran/ixmlioserver.f03.in
 
 fcm build
Index: XMLIO_V2/dev/common/src/xmlio/attribute_template_impl.hpp
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/attribute_template_impl.hpp	(revision 273)
+++ XMLIO_V2/dev/common/src/xmlio/attribute_template_impl.hpp	(revision 274)
@@ -60,7 +60,9 @@
       {
          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>());
       }
Index: XMLIO_V2/dev/common/src/xmlio/buffer_impl.hpp
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/buffer_impl.hpp	(revision 273)
+++ XMLIO_V2/dev/common/src/xmlio/buffer_impl.hpp	(revision 274)
@@ -8,5 +8,5 @@
       /// ////////////////// DÃ©finitions (inline) /////////////////// ///
 
-#define DATA_HEADER_SIZE  sizeof(CBufferDataType) + 2 * sizeof(StdSize) + sizeof(bool)
+#define DATA_HEADER_SIZE  sizeof(CBuffer::CBufferDataType) + 2 * sizeof(StdSize) + sizeof(bool)
 
       template <class T>
Index: XMLIO_V2/dev/common/src/xmlio/config/context_attribute.conf
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/config/context_attribute.conf	(revision 273)
+++ XMLIO_V2/dev/common/src/xmlio/config/context_attribute.conf	(revision 274)
@@ -2,3 +2,4 @@
 DECLARE_ATTRIBUTE(StdString, start_date)
 
-   DECLARE_ATTRIBUTE(StdString, output_dir)
+DECLARE_ATTRIBUTE(StdString, output_dir)
+
Index: XMLIO_V2/dev/common/src/xmlio/config/method_attribute.conf
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/config/method_attribute.conf	(revision 273)
+++ 	(revision )
@@ -1,1 +1,0 @@
-
Index: XMLIO_V2/dev/common/src/xmlio/config/var_attribute.conf
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/config/var_attribute.conf	(revision 273)
+++ XMLIO_V2/dev/common/src/xmlio/config/var_attribute.conf	(revision 274)
@@ -1,1 +1,1 @@
-
+DECLARE_ATTRIBUTE(StdString, type)
Index: XMLIO_V2/dev/common/src/xmlio/data_output.cpp
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/data_output.cpp	(revision 273)
+++ XMLIO_V2/dev/common/src/xmlio/data_output.cpp	(revision 274)
@@ -2,4 +2,5 @@
 
 #include "attribute_template_impl.hpp"
+#include "group_template_impl.hpp"
 #include "context.hpp"
 
Index: XMLIO_V2/dev/common/src/xmlio/data_treatment.hpp
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/data_treatment.hpp	(revision 273)
+++ XMLIO_V2/dev/common/src/xmlio/data_treatment.hpp	(revision 274)
@@ -125,10 +125,8 @@
          std::vector<boost::shared_ptr<CField> >::const_iterator
                it = refField.begin(), end = refField.end();
-//	 std::cout << "nb :" << refField.size() << std::endl;
          for (; it != end; it++)
          {
             boost::shared_ptr<CField> field = *it;
             boost::shared_ptr<CFile>  file  = field->getRelFile();
-//  std::cout << ">> " << fieldId << ", " << file->getId() << std::endl;
             if (field->updateData(currDate, timestep, data))
             {
Index: XMLIO_V2/dev/common/src/xmlio/declare_group.hpp
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/declare_group.hpp	(revision 273)
+++ XMLIO_V2/dev/common/src/xmlio/declare_group.hpp	(revision 274)
@@ -27,4 +27,32 @@
    };                                                                 \
    typedef type##Group type##Definition
+   
+#define DECLARE_GROUP_PARSE_REDEF(type)                                  \
+   class type##Group                                                     \
+      : public CGroupTemplate<type, type##Group, type##Attributes>       \
+   {                                                                     \
+      public:                                                            \
+         typedef type              RelChild;                             \
+         typedef type##Group       RelGroup;                             \
+         typedef type##Attributes  RelAttributes;                        \
+         typedef CGroupTemplate<type, type##Group, type##Attributes>     \
+                 SuperClass;                                             \
+                                                                         \
+         type##Group(void)                                               \
+            : CGroupTemplate<RelChild, RelGroup, RelAttributes> ()       \
+         { /* Ne rien faire de plus */ }                                 \
+         type##Group(const StdString& _id)                               \
+            : CGroupTemplate<RelChild, RelGroup, RelAttributes> (_id)    \
+         { /* Ne rien faire de plus */ }                                 \
+                                                                         \
+         static ENodeType GetType(void)                                  \
+         { return static_cast<ENodeType>(RelChild::GetType()+1); }       \
+                                                                         \
+         virtual void parse(xml::CXMLNode & node, bool withAttr = true); \
+                                                                         \
+         virtual ~type##Group(void)                                      \
+         { /* Ne rien faire de plus */ }                                 \
+   };                                                                    \
+   typedef type##Group type##Definition
 
 #endif // __XMLIO_DECLARE_GROUP__
Index: XMLIO_V2/dev/common/src/xmlio/fortran/axis_interface.f90
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/fortran/axis_interface.f90	(revision 274)
+++ XMLIO_V2/dev/common/src/xmlio/fortran/axis_interface.f90	(revision 274)
@@ -0,0 +1,56 @@
+MODULE AXIS_INTERFACE
+   USE, INTRINSIC :: ISO_C_BINDING
+     
+   INTERFACE ! Ne pas appeler directement/Interface FORTRAN 2003 <-> C99
+     
+      SUBROUTINE xios_set_axis_name(axis_hdl, name, name_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: axis_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: name
+         INTEGER  (kind = C_INT)     , VALUE        :: name_size
+      END SUBROUTINE xios_set_axis_name
+
+      SUBROUTINE xios_set_axis_standard_name(axis_hdl, standard_name, standard_name_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: axis_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: standard_name
+         INTEGER  (kind = C_INT)     , VALUE        :: standard_name_size
+      END SUBROUTINE xios_set_axis_standard_name
+
+      SUBROUTINE xios_set_axis_long_name(axis_hdl, long_name, long_name_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE       :: axis_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: long_name
+         INTEGER  (kind = C_INT)     , VALUE        :: long_name_size
+      END SUBROUTINE xios_set_axis_long_name
+
+      SUBROUTINE xios_set_axis_unit(axis_hdl, unit, unit_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE       :: axis_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: unit
+         INTEGER  (kind = C_INT)     , VALUE        :: unit_size
+      END SUBROUTINE xios_set_axis_unit
+
+      SUBROUTINE xios_set_axis_size(axis_hdl, size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: axis_hdl
+         INTEGER (kind = C_INT)     , VALUE :: size
+      END SUBROUTINE xios_set_axis_size
+
+      SUBROUTINE xios_set_axis_zvalue(axis_hdl, zvalue, zvalue_extent1) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE        :: axis_hdl
+         REAL    (kind = C_DOUBLE)  , DIMENSION(*) :: zvalue
+         INTEGER (kind = C_INT)     , VALUE        :: zvalue_extent1
+      END SUBROUTINE xios_set_axis_zvalue
+      
+      SUBROUTINE xios_axis_handle_create(ret, idt, idt_size) BIND(C)
+         import C_CHAR, C_INTPTR_T, C_INT
+         INTEGER  (kind = C_INTPTR_T)               :: ret
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: idt
+         INTEGER  (kind = C_INT)     , VALUE        :: idt_size
+      END SUBROUTINE xios_axis_handle_create
+       
+   END INTERFACE
+     
+END MODULE AXIS_INTERFACE
Index: XMLIO_V2/dev/common/src/xmlio/fortran/axisgroup_interface.f90
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/fortran/axisgroup_interface.f90	(revision 274)
+++ XMLIO_V2/dev/common/src/xmlio/fortran/axisgroup_interface.f90	(revision 274)
@@ -0,0 +1,56 @@
+MODULE AXISGROUP_INTERFACE
+   USE, INTRINSIC :: ISO_C_BINDING
+     
+   INTERFACE ! Ne pas appeler directement/Interface FORTRAN 2003 <-> C99
+     
+      SUBROUTINE xios_set_axisgroup_name(axisgroup_hdl, name, name_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: axisgroup_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: name
+         INTEGER  (kind = C_INT)     , VALUE        :: name_size
+      END SUBROUTINE xios_set_axisgroup_name
+
+      SUBROUTINE xios_set_axisgroup_standard_name(axisgroup_hdl, standard_name, standard_name_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: axisgroup_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: standard_name
+         INTEGER  (kind = C_INT)     , VALUE        :: standard_name_size
+      END SUBROUTINE xios_set_axisgroup_standard_name
+
+      SUBROUTINE xios_set_axisgroup_long_name(axisgroup_hdl, long_name, long_name_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: axisgroup_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: long_name
+         INTEGER  (kind = C_INT)     , VALUE        :: long_name_size
+      END SUBROUTINE xios_set_axisgroup_long_name
+
+      SUBROUTINE xios_set_axisgroup_unit(axisgroup_hdl, unit, unit_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: axisgroup_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: unit
+         INTEGER  (kind = C_INT)     , VALUE        :: unit_size
+      END SUBROUTINE xios_set_axisgroup_unit
+
+      SUBROUTINE xios_set_axisgroup_size(axisgroup_hdl, size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: axisgroup_hdl
+         INTEGER (kind = C_INT)     , VALUE :: size
+      END SUBROUTINE xios_set_axisgroup_size
+
+      SUBROUTINE xios_set_axisgroup_zvalue(axisgroup_hdl, zvalue, zvalue_extent1) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE        :: axisgroup_hdl
+         REAL    (kind = C_DOUBLE)  , DIMENSION(*) :: zvalue
+         INTEGER (kind = C_INT)     , VALUE        :: zvalue_extent1
+      END SUBROUTINE xios_set_axisgroup_zvalue
+  
+      SUBROUTINE xios_axisgroup_handle_create(ret, idt, idt_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T)               :: ret
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: idt
+         INTEGER  (kind = C_INT)     , VALUE        :: idt_size
+      END SUBROUTINE xios_axisgroup_handle_create
+     
+   END INTERFACE
+     
+END MODULE AXISGROUP_INTERFACE
Index: XMLIO_V2/dev/common/src/xmlio/fortran/context_interface.f90
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/fortran/context_interface.f90	(revision 274)
+++ XMLIO_V2/dev/common/src/xmlio/fortran/context_interface.f90	(revision 274)
@@ -0,0 +1,51 @@
+MODULE CONTEXT_INTERFACE
+   USE, INTRINSIC :: ISO_C_BINDING
+     
+   INTERFACE ! Ne pas appeler directement/Interface FORTRAN 2003 <-> C99
+     
+      SUBROUTINE xios_set_context_calendar_type(context_hdl, calendar_type ,calendar_type_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: context_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: calendar_type
+         INTEGER  (kind = C_INT)     , VALUE        :: calendar_type_size
+      END SUBROUTINE xios_set_context_calendar_type
+
+      SUBROUTINE xios_set_context_start_date(context_hdl, start_date ,start_date_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: context_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: start_date
+         INTEGER  (kind = C_INT)     , VALUE        :: start_date_size
+      END SUBROUTINE xios_set_context_start_date
+
+      SUBROUTINE xios_set_context_output_dir(context_hdl, output_dir ,output_dir_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: context_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: output_dir
+         INTEGER  (kind = C_INT)     , VALUE        :: output_dir_size
+      END SUBROUTINE xios_set_context_output_dir
+      
+      SUBROUTINE xios_context_handle_create(ret, idt, idt_size) BIND(C)
+         import C_CHAR, C_INTPTR_T, C_INT
+         INTEGER  (kind = C_INTPTR_T)               :: ret
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: idt
+         INTEGER  (kind = C_INT)     , VALUE        :: idt_size
+      END SUBROUTINE xios_context_handle_create
+      
+      SUBROUTINE xios_context_set_current(context, withswap) BIND(C)
+         import C_BOOL, C_INT, C_INTPTR_T
+         INTEGER (kind = C_INTPTR_T), VALUE :: context
+         LOGICAL (kind = C_BOOL)    , VALUE :: withswap
+      END SUBROUTINE xios_context_set_current
+
+      SUBROUTINE xios_context_create(context, context_id, context_id_size, calendar_type, &
+                                     year, month, day, hour, minute, second) BIND(C)
+         import C_CHAR, C_INT, C_INTPTR_T
+         INTEGER  (kind = C_INTPTR_T)               :: context
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: context_id
+         INTEGER  (kind = C_INT)     , VALUE        :: context_id_size
+         INTEGER  (kind = C_INT)     , VALUE        :: calendar_type, year, month, day, hour, minute, second
+      END SUBROUTINE xios_context_create
+     
+   END INTERFACE
+     
+END MODULE CONTEXT_INTERFACE
Index: XMLIO_V2/dev/common/src/xmlio/fortran/domain_interface.f90
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/fortran/domain_interface.f90	(revision 274)
+++ XMLIO_V2/dev/common/src/xmlio/fortran/domain_interface.f90	(revision 274)
@@ -0,0 +1,211 @@
+MODULE DOMAIN_INTERFACE
+   USE, INTRINSIC :: ISO_C_BINDING
+       
+   INTERFACE ! Ne pas appeler directement/Interface FORTRAN 2003 <-> C99
+       
+      SUBROUTINE xios_set_domain_name(domain_hdl, name, name_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: domain_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: name
+         INTEGER  (kind = C_INT)     , VALUE        :: name_size
+      END SUBROUTINE xios_set_domain_name
+
+      SUBROUTINE xios_set_domain_standard_name(domain_hdl, standard_name, standard_name_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: domain_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: standard_name
+         INTEGER  (kind = C_INT)     , VALUE        :: standard_name_size
+      END SUBROUTINE xios_set_domain_standard_name
+
+      SUBROUTINE xios_set_domain_long_name(domain_hdl, long_name, long_name_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: domain_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: long_name
+         INTEGER  (kind = C_INT)     , VALUE        :: long_name_size
+      END SUBROUTINE xios_set_domain_long_name
+
+      SUBROUTINE xios_set_domain_domain_group_ref(domain_hdl, domain_group_ref, domain_group_ref_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: domain_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: domain_group_ref
+         INTEGER  (kind = C_INT)     , VALUE        :: domain_group_ref_size
+      END SUBROUTINE xios_set_domain_domain_group_ref
+
+      SUBROUTINE xios_set_domain_ni_glo(domain_hdl, ni_glo) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
+         INTEGER (kind = C_INT)     , VALUE :: ni_glo
+      END SUBROUTINE xios_set_domain_ni_glo
+
+      SUBROUTINE xios_set_domain_nj_glo(domain_hdl, nj_glo) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
+         INTEGER (kind = C_INT)     , VALUE :: nj_glo
+      END SUBROUTINE xios_set_domain_nj_glo
+
+      SUBROUTINE xios_set_domain_ibegin(domain_hdl, ibegin) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
+         INTEGER (kind = C_INT)     , VALUE :: ibegin
+      END SUBROUTINE xios_set_domain_ibegin
+
+      SUBROUTINE xios_set_domain_iend(domain_hdl, iend) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
+         INTEGER (kind = C_INT)     , VALUE :: iend
+      END SUBROUTINE xios_set_domain_iend
+
+      SUBROUTINE xios_set_domain_ni(domain_hdl, ni) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
+         INTEGER (kind = C_INT)     , VALUE :: ni
+      END SUBROUTINE xios_set_domain_ni
+
+      SUBROUTINE xios_set_domain_jbegin(domain_hdl, jbegin) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
+         INTEGER (kind = C_INT)     , VALUE :: jbegin
+      END SUBROUTINE xios_set_domain_jbegin
+
+      SUBROUTINE xios_set_domain_jend(domain_hdl, jend) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
+         INTEGER (kind = C_INT)     , VALUE :: jend
+      END SUBROUTINE xios_set_domain_jend
+
+      SUBROUTINE xios_set_domain_nj(domain_hdl, nj) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
+         INTEGER (kind = C_INT)     , VALUE :: nj
+      END SUBROUTINE xios_set_domain_nj
+
+      SUBROUTINE xios_set_domain_mask(domain_hdl, mask, mask_extent1, mask_extent2) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE        :: domain_hdl
+         LOGICAL(kind = C_BOOL)     , DIMENSION(*) :: mask
+         INTEGER (kind = C_INT)     , VALUE        :: mask_extent1
+         INTEGER (kind = C_INT)     , VALUE        :: mask_extent2
+      END SUBROUTINE xios_set_domain_mask
+
+      SUBROUTINE xios_set_domain_data_dim(domain_hdl, data_dim) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
+         INTEGER (kind = C_INT)     , VALUE :: data_dim
+      END SUBROUTINE xios_set_domain_data_dim
+
+      SUBROUTINE xios_set_domain_data_ni(domain_hdl, data_ni) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
+         INTEGER (kind = C_INT)     , VALUE :: data_ni
+      END SUBROUTINE xios_set_domain_data_ni
+
+      SUBROUTINE xios_set_domain_data_nj(domain_hdl, data_nj) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
+         INTEGER (kind = C_INT)     , VALUE :: data_nj
+      END SUBROUTINE xios_set_domain_data_nj
+
+      SUBROUTINE xios_set_domain_data_ibegin(domain_hdl, data_ibegin) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
+         INTEGER (kind = C_INT)     , VALUE :: data_ibegin
+      END SUBROUTINE xios_set_domain_data_ibegin
+
+      SUBROUTINE xios_set_domain_data_jbegin(domain_hdl, data_jbegin) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
+         INTEGER (kind = C_INT)     , VALUE :: data_jbegin
+      END SUBROUTINE xios_set_domain_data_jbegin
+
+      SUBROUTINE xios_set_domain_zoom_ni(domain_hdl, zoom_ni) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
+         INTEGER (kind = C_INT)     , VALUE :: zoom_ni
+      END SUBROUTINE xios_set_domain_zoom_ni
+
+      SUBROUTINE xios_set_domain_zoom_nj(domain_hdl, zoom_nj) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
+         INTEGER (kind = C_INT)     , VALUE :: zoom_nj
+      END SUBROUTINE xios_set_domain_zoom_nj
+
+      SUBROUTINE xios_set_domain_zoom_ibegin(domain_hdl, zoom_ibegin) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
+         INTEGER (kind = C_INT)     , VALUE :: zoom_ibegin
+      END SUBROUTINE xios_set_domain_zoom_ibegin
+
+      SUBROUTINE xios_set_domain_zoom_jbegin(domain_hdl, zoom_jbegin) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
+         INTEGER (kind = C_INT)     , VALUE :: zoom_jbegin
+      END SUBROUTINE xios_set_domain_zoom_jbegin
+
+      SUBROUTINE xios_set_domain_zoom_ni_loc(domain_hdl, zoom_ni_loc) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
+         INTEGER (kind = C_INT)     , VALUE :: zoom_ni_loc
+      END SUBROUTINE xios_set_domain_zoom_ni_loc
+
+      SUBROUTINE xios_set_domain_zoom_nj_loc(domain_hdl, zoom_nj_loc) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
+         INTEGER (kind = C_INT)     , VALUE :: zoom_nj_loc
+      END SUBROUTINE xios_set_domain_zoom_nj_loc
+
+      SUBROUTINE xios_set_domain_zoom_ibegin_loc(domain_hdl, zoom_ibegin_loc) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
+         INTEGER (kind = C_INT)     , VALUE :: zoom_ibegin_loc
+      END SUBROUTINE xios_set_domain_zoom_ibegin_loc
+
+      SUBROUTINE xios_set_domain_zoom_jbegin_loc(domain_hdl, zoom_jbegin_loc) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
+         INTEGER (kind = C_INT)     , VALUE :: zoom_jbegin_loc
+      END SUBROUTINE xios_set_domain_zoom_jbegin_loc
+
+      SUBROUTINE xios_set_domain_data_n_index(domain_hdl, data_n_index) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
+         INTEGER (kind = C_INT)     , VALUE :: data_n_index
+      END SUBROUTINE xios_set_domain_data_n_index
+
+      SUBROUTINE xios_set_domain_data_i_index(domain_hdl, data_i_index, data_i_index_extent1) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE        :: domain_hdl
+         INTEGER (kind = C_INT)     , DIMENSION(*) :: data_i_index
+         INTEGER (kind = C_INT)     , VALUE        :: data_i_index_extent1
+      END SUBROUTINE xios_set_domain_data_i_index
+
+      SUBROUTINE xios_set_domain_data_j_index(domain_hdl, data_j_index, data_j_index_extent1) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE        :: domain_hdl
+         INTEGER (kind = C_INT)     , DIMENSION(*) :: data_j_index
+         INTEGER (kind = C_INT)     , VALUE        :: data_j_index_extent1
+      END SUBROUTINE xios_set_domain_data_j_index
+
+      SUBROUTINE xios_set_domain_lonvalue(domain_hdl, lonvalue, lonvalue_extent1) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE        :: domain_hdl
+         REAL    (kind = C_DOUBLE)  , DIMENSION(*) :: lonvalue
+         INTEGER (kind = C_INT)     , VALUE        :: lonvalue_extent1
+      END SUBROUTINE xios_set_domain_lonvalue
+
+      SUBROUTINE xios_set_domain_latvalue(domain_hdl, latvalue, latvalue_extent1) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE        :: domain_hdl
+         REAL    (kind = C_DOUBLE)  , DIMENSION(*) :: latvalue
+         INTEGER (kind = C_INT)     , VALUE        :: latvalue_extent1
+      END SUBROUTINE xios_set_domain_latvalue
+       
+      SUBROUTINE xios_domain_handle_create(ret, idt, idt_size) BIND(C)
+         import C_CHAR, C_INTPTR_T, C_INT
+         INTEGER  (kind = C_INTPTR_T)               :: ret
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: idt
+         INTEGER  (kind = C_INT)     , VALUE        :: idt_size
+      END SUBROUTINE xios_domain_handle_create
+       
+   END INTERFACE
+       
+END MODULE DOMAIN_INTERFACE
Index: XMLIO_V2/dev/common/src/xmlio/fortran/domaingroup_interface.f90
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/fortran/domaingroup_interface.f90	(revision 274)
+++ XMLIO_V2/dev/common/src/xmlio/fortran/domaingroup_interface.f90	(revision 274)
@@ -0,0 +1,211 @@
+MODULE DOMAINGROUP_INTERFACE
+   USE, INTRINSIC :: ISO_C_BINDING
+       
+   INTERFACE ! Ne pas appeler directement/Interface FORTRAN 2003 <-> C99
+       
+      SUBROUTINE xios_set_domaingroup_name(domaingroup_hdl, name, name_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: domaingroup_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: name
+         INTEGER  (kind = C_INT)     , VALUE        :: name_size
+      END SUBROUTINE xios_set_domaingroup_name
+
+      SUBROUTINE xios_set_domaingroup_standard_name(domaingroup_hdl, standard_name, standard_name_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: domaingroup_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: standard_name
+         INTEGER  (kind = C_INT)     , VALUE        :: standard_name_size
+      END SUBROUTINE xios_set_domaingroup_standard_name
+
+      SUBROUTINE xios_set_domaingroup_long_name(domaingroup_hdl, long_name, long_name_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: domaingroup_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: long_name
+         INTEGER  (kind = C_INT)     , VALUE        :: long_name_size
+      END SUBROUTINE xios_set_domaingroup_long_name
+
+      SUBROUTINE xios_set_domaingroup_domain_group_ref(domaingroup_hdl, domain_group_ref, domain_group_ref_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: domaingroup_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: domain_group_ref
+         INTEGER  (kind = C_INT)     , VALUE        :: domain_group_ref_size
+      END SUBROUTINE xios_set_domaingroup_domain_group_ref
+
+      SUBROUTINE xios_set_domaingroup_ni_glo(domaingroup_hdl, ni_glo) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
+         INTEGER (kind = C_INT)     , VALUE :: ni_glo
+      END SUBROUTINE xios_set_domaingroup_ni_glo
+
+      SUBROUTINE xios_set_domaingroup_nj_glo(domaingroup_hdl, nj_glo) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
+         INTEGER (kind = C_INT)     , VALUE :: nj_glo
+      END SUBROUTINE xios_set_domaingroup_nj_glo
+
+      SUBROUTINE xios_set_domaingroup_ibegin(domaingroup_hdl, ibegin) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
+         INTEGER (kind = C_INT)     , VALUE :: ibegin
+      END SUBROUTINE xios_set_domaingroup_ibegin
+
+      SUBROUTINE xios_set_domaingroup_iend(domaingroup_hdl, iend) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
+         INTEGER (kind = C_INT)     , VALUE :: iend
+      END SUBROUTINE xios_set_domaingroup_iend
+
+      SUBROUTINE xios_set_domaingroup_ni(domaingroup_hdl, ni) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
+         INTEGER (kind = C_INT)     , VALUE :: ni
+      END SUBROUTINE xios_set_domaingroup_ni
+
+      SUBROUTINE xios_set_domaingroup_jbegin(domaingroup_hdl, jbegin) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
+         INTEGER (kind = C_INT)     , VALUE :: jbegin
+      END SUBROUTINE xios_set_domaingroup_jbegin
+
+      SUBROUTINE xios_set_domaingroup_jend(domaingroup_hdl, jend) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
+         INTEGER (kind = C_INT)     , VALUE :: jend
+      END SUBROUTINE xios_set_domaingroup_jend
+
+      SUBROUTINE xios_set_domaingroup_nj(domaingroup_hdl, nj) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
+         INTEGER (kind = C_INT)     , VALUE :: nj
+      END SUBROUTINE xios_set_domaingroup_nj
+
+      SUBROUTINE xios_set_domaingroup_mask(domaingroup_hdl, mask, mask_extent1, mask_extent2) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE        :: domaingroup_hdl
+         LOGICAL(kind = C_BOOL)     , DIMENSION(*) :: mask
+         INTEGER (kind = C_INT)     , VALUE        :: mask_extent1
+         INTEGER (kind = C_INT)     , VALUE        :: mask_extent2
+      END SUBROUTINE xios_set_domaingroup_mask
+
+      SUBROUTINE xios_set_domaingroup_data_dim(domaingroup_hdl, data_dim) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
+         INTEGER (kind = C_INT)     , VALUE :: data_dim
+      END SUBROUTINE xios_set_domaingroup_data_dim
+
+      SUBROUTINE xios_set_domaingroup_data_ni(domaingroup_hdl, data_ni) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
+         INTEGER (kind = C_INT)     , VALUE :: data_ni
+      END SUBROUTINE xios_set_domaingroup_data_ni
+
+      SUBROUTINE xios_set_domaingroup_data_nj(domaingroup_hdl, data_nj) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
+         INTEGER (kind = C_INT)     , VALUE :: data_nj
+      END SUBROUTINE xios_set_domaingroup_data_nj
+
+      SUBROUTINE xios_set_domaingroup_data_ibegin(domaingroup_hdl, data_ibegin) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
+         INTEGER (kind = C_INT)     , VALUE :: data_ibegin
+      END SUBROUTINE xios_set_domaingroup_data_ibegin
+
+      SUBROUTINE xios_set_domaingroup_data_jbegin(domaingroup_hdl, data_jbegin) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
+         INTEGER (kind = C_INT)     , VALUE  :: data_jbegin
+      END SUBROUTINE xios_set_domaingroup_data_jbegin
+
+      SUBROUTINE xios_set_domaingroup_zoom_ni(domaingroup_hdl, zoom_ni) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
+         INTEGER (kind = C_INT)     , VALUE :: zoom_ni
+      END SUBROUTINE xios_set_domaingroup_zoom_ni
+
+      SUBROUTINE xios_set_domaingroup_zoom_nj(domaingroup_hdl, zoom_nj) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
+         INTEGER (kind = C_INT)     , VALUE :: zoom_nj
+      END SUBROUTINE xios_set_domaingroup_zoom_nj
+
+      SUBROUTINE xios_set_domaingroup_zoom_ibegin(domaingroup_hdl, zoom_ibegin) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
+         INTEGER (kind = C_INT)     , VALUE :: zoom_ibegin
+      END SUBROUTINE xios_set_domaingroup_zoom_ibegin
+
+      SUBROUTINE xios_set_domaingroup_zoom_jbegin(domaingroup_hdl, zoom_jbegin) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
+         INTEGER (kind = C_INT)     , VALUE :: zoom_jbegin
+      END SUBROUTINE xios_set_domaingroup_zoom_jbegin
+
+      SUBROUTINE xios_set_domaingroup_zoom_ni_loc(domaingroup_hdl, zoom_ni_loc) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
+         INTEGER (kind = C_INT)     , VALUE :: zoom_ni_loc
+      END SUBROUTINE xios_set_domaingroup_zoom_ni_loc
+
+      SUBROUTINE xios_set_domaingroup_zoom_nj_loc(domaingroup_hdl, zoom_nj_loc) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
+         INTEGER (kind = C_INT)     , VALUE :: zoom_nj_loc
+      END SUBROUTINE xios_set_domaingroup_zoom_nj_loc
+
+      SUBROUTINE xios_set_domaingroup_zoom_ibegin_loc(domaingroup_hdl, zoom_ibegin_loc) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
+         INTEGER (kind = C_INT)     , VALUE :: zoom_ibegin_loc
+      END SUBROUTINE xios_set_domaingroup_zoom_ibegin_loc
+
+      SUBROUTINE xios_set_domaingroup_zoom_jbegin_loc(domaingroup_hdl, zoom_jbegin_loc) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
+         INTEGER (kind = C_INT)     , VALUE :: zoom_jbegin_loc
+      END SUBROUTINE xios_set_domaingroup_zoom_jbegin_loc
+
+      SUBROUTINE xios_set_domaingroup_data_n_index(domaingroup_hdl, data_n_index) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
+         INTEGER (kind = C_INT)     , VALUE :: data_n_index
+      END SUBROUTINE xios_set_domaingroup_data_n_index
+
+      SUBROUTINE xios_set_domaingroup_data_i_index(domaingroup_hdl, data_i_index, data_i_index_extent1) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE        :: domaingroup_hdl
+         INTEGER (kind = C_INT)     , DIMENSION(*) :: data_i_index
+         INTEGER (kind = C_INT)     , VALUE        :: data_i_index_extent1
+      END SUBROUTINE xios_set_domaingroup_data_i_index
+
+      SUBROUTINE xios_set_domaingroup_data_j_index(domaingroup_hdl, data_j_index, data_j_index_extent1) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE        :: domaingroup_hdl
+         INTEGER (kind = C_INT)     , DIMENSION(*) :: data_j_index
+         INTEGER (kind = C_INT)     , VALUE        :: data_j_index_extent1
+      END SUBROUTINE xios_set_domaingroup_data_j_index
+
+      SUBROUTINE xios_set_domaingroup_lonvalue(domaingroup_hdl, lonvalue, lonvalue_extent1) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE        :: domaingroup_hdl
+         REAL    (kind = C_DOUBLE)  , DIMENSION(*) :: lonvalue
+         INTEGER (kind = C_INT)     , VALUE        :: lonvalue_extent1
+      END SUBROUTINE xios_set_domaingroup_lonvalue
+
+      SUBROUTINE xios_set_domaingroup_latvalue(domaingroup_hdl, latvalue, latvalue_extent1) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE        :: domaingroup_hdl
+         REAL    (kind = C_DOUBLE)  , DIMENSION(*) :: latvalue
+         INTEGER (kind = C_INT)     , VALUE        :: latvalue_extent1
+      END SUBROUTINE xios_set_domaingroup_latvalue
+      
+      SUBROUTINE xios_domaingroup_handle_create(ret, idt, idt_size) BIND(C)
+         import C_CHAR, C_INTPTR_T, C_INT
+         INTEGER  (kind = C_INTPTR_T)               :: ret
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: idt
+         INTEGER  (kind = C_INT)     , VALUE        :: idt_size
+      END SUBROUTINE xios_domaingroup_handle_create
+       
+   END INTERFACE
+       
+END MODULE DOMAINGROUP_INTERFACE
Index: XMLIO_V2/dev/common/src/xmlio/fortran/field_interface.f90
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/fortran/field_interface.f90	(revision 274)
+++ XMLIO_V2/dev/common/src/xmlio/fortran/field_interface.f90	(revision 274)
@@ -0,0 +1,109 @@
+MODULE FIELD_INTERFACE
+   USE, INTRINSIC :: ISO_C_BINDING
+   
+   INTERFACE ! Ne pas appeler directement/Interface FORTRAN 2003 <-> C99
+   
+      SUBROUTINE xios_set_field_name(field_hdl, name ,name_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: field_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: name
+         INTEGER  (kind = C_INT)     , VALUE        :: name_size
+      END SUBROUTINE xios_set_field_name
+
+      SUBROUTINE xios_set_field_standard_name(field_hdl, standard_name ,standard_name_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: field_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: standard_name
+         INTEGER  (kind = C_INT)     , VALUE        :: standard_name_size
+      END SUBROUTINE xios_set_field_standard_name
+
+      SUBROUTINE xios_set_field_long_name(field_hdl, long_name ,long_name_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE        :: field_hdl
+         CHARACTER(kind = C_CHAR)   , DIMENSION(*) :: long_name
+         INTEGER (kind = C_INT)     , VALUE        :: long_name_size
+      END SUBROUTINE xios_set_field_long_name
+
+      SUBROUTINE xios_set_field_unit(field_hdl, unit ,unit_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: field_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: unit
+         INTEGER  (kind = C_INT)     , VALUE        :: unit_size
+      END SUBROUTINE xios_set_field_unit
+
+      SUBROUTINE xios_set_field_operation(field_hdl, operation ,operation_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: field_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: operation
+         INTEGER  (kind = C_INT)     , VALUE        :: operation_size
+      END SUBROUTINE xios_set_field_operation
+
+      SUBROUTINE xios_set_field_freq_op(field_hdl, freq_op ,freq_op_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: field_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: freq_op
+         INTEGER  (kind = C_INT)     , VALUE        :: freq_op_size
+      END SUBROUTINE xios_set_field_freq_op
+
+      SUBROUTINE xios_set_field_level(field_hdl, level) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl
+         INTEGER (kind = C_INT)     , VALUE :: level
+      END SUBROUTINE xios_set_field_level
+
+      SUBROUTINE xios_set_field_prec(field_hdl, prec) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl
+         INTEGER (kind = C_INT)     , VALUE :: prec
+      END SUBROUTINE xios_set_field_prec
+
+      SUBROUTINE xios_set_field_enabled(field_hdl, enabled) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl
+         LOGICAL (kind = C_BOOL)    , VALUE :: enabled
+         END SUBROUTINE xios_set_field_enabled
+
+      SUBROUTINE xios_set_field_domain_ref(field_hdl, domain_ref ,domain_ref_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: field_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: domain_ref
+         INTEGER  (kind = C_INT)     , VALUE        :: domain_ref_size
+      END SUBROUTINE xios_set_field_domain_ref
+
+      SUBROUTINE xios_set_field_axis_ref(field_hdl, axis_ref ,axis_ref_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: field_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: axis_ref
+         INTEGER  (kind = C_INT)     , VALUE        :: axis_ref_size
+      END SUBROUTINE xios_set_field_axis_ref
+
+      SUBROUTINE xios_set_field_grid_ref(field_hdl, grid_ref ,grid_ref_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: field_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: grid_ref
+         INTEGER  (kind = C_INT)     , VALUE        :: grid_ref_size
+      END SUBROUTINE xios_set_field_grid_ref
+
+      SUBROUTINE xios_set_field_field_ref(field_hdl, field_ref ,field_ref_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: field_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: field_ref
+         INTEGER  (kind = C_INT)     , VALUE        :: field_ref_size
+      END SUBROUTINE xios_set_field_field_ref
+
+      SUBROUTINE xios_set_field_default_value(field_hdl, default_value) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: field_hdl
+         REAL    (kind = C_DOUBLE)  , VALUE :: default_value
+      END SUBROUTINE xios_set_field_default_value
+   
+      SUBROUTINE xios_field_handle_create(ret, idt, idt_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T)               :: ret
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: idt
+         INTEGER  (kind = C_INT)     , VALUE        :: idt_size
+      END SUBROUTINE xios_field_handle_create
+   
+   END INTERFACE
+   
+END MODULE FIELD_INTERFACE
Index: XMLIO_V2/dev/common/src/xmlio/fortran/fieldgroup_interface.f90
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/fortran/fieldgroup_interface.f90	(revision 274)
+++ XMLIO_V2/dev/common/src/xmlio/fortran/fieldgroup_interface.f90	(revision 274)
@@ -0,0 +1,109 @@
+MODULE FIELDGROUP_INTERFACE
+   USE, INTRINSIC :: ISO_C_BINDING
+   
+   INTERFACE ! Ne pas appeler directement/Interface FORTRAN 2003 <-> C99
+   
+      SUBROUTINE xios_set_fieldgroup_name(fieldgroup_hdl, name ,name_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: fieldgroup_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: name
+         INTEGER  (kind = C_INT)     , VALUE        :: name_size
+      END SUBROUTINE xios_set_fieldgroup_name
+
+      SUBROUTINE xios_set_fieldgroup_standard_name(fieldgroup_hdl, standard_name ,standard_name_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: fieldgroup_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: standard_name
+         INTEGER  (kind = C_INT)     , VALUE        :: standard_name_size
+      END SUBROUTINE xios_set_fieldgroup_standard_name
+
+      SUBROUTINE xios_set_fieldgroup_long_name(fieldgroup_hdl, long_name ,long_name_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE        :: fieldgroup_hdl
+         CHARACTER(kind = C_CHAR)   , DIMENSION(*) :: long_name
+         INTEGER (kind = C_INT)     , VALUE        :: long_name_size
+      END SUBROUTINE xios_set_fieldgroup_long_name
+
+      SUBROUTINE xios_set_fieldgroup_unit(fieldgroup_hdl, unit ,unit_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: fieldgroup_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: unit
+         INTEGER  (kind = C_INT)     , VALUE        :: unit_size
+      END SUBROUTINE xios_set_fieldgroup_unit
+
+      SUBROUTINE xios_set_fieldgroup_operation(fieldgroup_hdl, operation ,operation_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: fieldgroup_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: operation
+         INTEGER  (kind = C_INT)     , VALUE        :: operation_size
+      END SUBROUTINE xios_set_fieldgroup_operation
+
+      SUBROUTINE xios_set_fieldgroup_freq_op(fieldgroup_hdl, freq_op ,freq_op_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: fieldgroup_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: freq_op
+         INTEGER  (kind = C_INT)     , VALUE        :: freq_op_size
+      END SUBROUTINE xios_set_fieldgroup_freq_op
+
+      SUBROUTINE xios_set_fieldgroup_level(fieldgroup_hdl, level) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: fieldgroup_hdl
+         INTEGER (kind = C_INT)     , VALUE :: level
+      END SUBROUTINE xios_set_fieldgroup_level
+
+      SUBROUTINE xios_set_fieldgroup_prec(fieldgroup_hdl, prec) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: fieldgroup_hdl
+         INTEGER (kind = C_INT)     , VALUE :: prec
+      END SUBROUTINE xios_set_fieldgroup_prec
+
+      SUBROUTINE xios_set_fieldgroup_enabled(fieldgroup_hdl, enabled) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: fieldgroup_hdl
+         LOGICAL (kind = C_BOOL)    , VALUE :: enabled
+         END SUBROUTINE xios_set_fieldgroup_enabled
+
+      SUBROUTINE xios_set_fieldgroup_domain_ref(fieldgroup_hdl, domain_ref ,domain_ref_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: fieldgroup_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: domain_ref
+         INTEGER  (kind = C_INT)     , VALUE        :: domain_ref_size
+      END SUBROUTINE xios_set_fieldgroup_domain_ref
+
+      SUBROUTINE xios_set_fieldgroup_axis_ref(fieldgroup_hdl, axis_ref ,axis_ref_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: fieldgroup_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: axis_ref
+         INTEGER  (kind = C_INT)     , VALUE        :: axis_ref_size
+      END SUBROUTINE xios_set_fieldgroup_axis_ref
+
+      SUBROUTINE xios_set_fieldgroup_grid_ref(fieldgroup_hdl, grid_ref ,grid_ref_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: fieldgroup_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: grid_ref
+         INTEGER  (kind = C_INT)     , VALUE        :: grid_ref_size
+      END SUBROUTINE xios_set_fieldgroup_grid_ref
+
+      SUBROUTINE xios_set_fieldgroup_field_ref(fieldgroup_hdl, field_ref ,field_ref_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: fieldgroup_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: field_ref
+         INTEGER  (kind = C_INT)     , VALUE        :: field_ref_size
+      END SUBROUTINE xios_set_fieldgroup_field_ref
+
+      SUBROUTINE xios_set_fieldgroup_default_value(fieldgroup_hdl, default_value) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: fieldgroup_hdl
+         REAL    (kind = C_DOUBLE)  , VALUE :: default_value
+      END SUBROUTINE xios_set_fieldgroup_default_value
+      
+      SUBROUTINE xios_domaingroup_handle_create(ret, idt, idt_size) BIND(C)
+         import C_CHAR, C_INTPTR_T, C_INT
+         INTEGER  (kind = C_INTPTR_T)               :: ret
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: idt
+         INTEGER  (kind = C_INT)     , VALUE        :: idt_size
+      END SUBROUTINE xios_domaingroup_handle_create
+   
+   END INTERFACE
+   
+END MODULE FIELDGROUP_INTERFACE
Index: XMLIO_V2/dev/common/src/xmlio/fortran/file_interface.f90
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/fortran/file_interface.f90	(revision 274)
+++ XMLIO_V2/dev/common/src/xmlio/fortran/file_interface.f90	(revision 274)
@@ -0,0 +1,48 @@
+MODULE FILE_INTERFACE
+   USE, INTRINSIC :: ISO_C_BINDING
+   
+   INTERFACE ! Ne pas appeler directement/Interface FORTRAN 2003 <-> C99
+   
+      SUBROUTINE xios_set_file_name(file_hdl, name, name_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: file_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: name
+         INTEGER  (kind = C_INT)     , VALUE        :: name_size
+      END SUBROUTINE xios_set_file_name
+
+      SUBROUTINE xios_set_file_description(file_hdl, description, description_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: file_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: description
+         INTEGER  (kind = C_INT)     , VALUE        :: description_size
+      END SUBROUTINE xios_set_file_description
+
+      SUBROUTINE xios_set_file_output_freq(file_hdl, output_freq, output_freq_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: file_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: output_freq
+         INTEGER  (kind = C_INT)     , VALUE        :: output_freq_size
+      END SUBROUTINE xios_set_file_output_freq
+
+      SUBROUTINE xios_set_file_output_level(file_hdl, output_level) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: file_hdl
+         INTEGER (kind = C_INT)     , VALUE :: output_level
+      END SUBROUTINE xios_set_file_output_level
+
+      SUBROUTINE xios_set_file_enabled(file_hdl, enabled) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: file_hdl
+         LOGICAL (kind = C_BOOL)    , VALUE :: enabled
+      END SUBROUTINE xios_set_file_enabled
+   
+      SUBROUTINE xios_file_handle_create(ret, idt, idt_size) BIND(C)
+         import C_CHAR, C_INTPTR_T, C_INT
+         INTEGER  (kind = C_INTPTR_T)               :: ret
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: idt
+         INTEGER  (kind = C_INT)     , VALUE        :: idt_size
+      END SUBROUTINE xios_file_handle_create
+    
+   END INTERFACE
+   
+END MODULE FILE_INTERFACE
Index: XMLIO_V2/dev/common/src/xmlio/fortran/filegroup_interface.f90
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/fortran/filegroup_interface.f90	(revision 274)
+++ XMLIO_V2/dev/common/src/xmlio/fortran/filegroup_interface.f90	(revision 274)
@@ -0,0 +1,48 @@
+MODULE FILEGROUP_INTERFACE
+   USE, INTRINSIC :: ISO_C_BINDING
+   
+   INTERFACE ! Ne pas appeler directement/Interface FORTRAN 2003 <-> C99
+   
+      SUBROUTINE xios_set_filegroup_name(filegroup_hdl, name ,name_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: filegroup_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: name
+         INTEGER  (kind = C_INT)     , VALUE        :: name_size
+      END SUBROUTINE xios_set_filegroup_name
+
+      SUBROUTINE xios_set_filegroup_description(filegroup_hdl, description ,description_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: filegroup_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: description
+         INTEGER  (kind = C_INT)     , VALUE        :: description_size
+      END SUBROUTINE xios_set_filegroup_description
+
+      SUBROUTINE xios_set_filegroup_output_freq(filegroup_hdl, output_freq ,output_freq_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: filegroup_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: output_freq
+         INTEGER  (kind = C_INT)     , VALUE        :: output_freq_size
+      END SUBROUTINE xios_set_filegroup_output_freq
+
+      SUBROUTINE xios_set_filegroup_output_level(filegroup_hdl, output_level) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: filegroup_hdl
+         INTEGER (kind = C_INT)     , VALUE :: output_level
+      END SUBROUTINE xios_set_filegroup_output_level
+
+      SUBROUTINE xios_set_filegroup_enabled(filegroup_hdl, enabled) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: filegroup_hdl
+         LOGICAL (kind = C_BOOL)    , VALUE :: enabled
+      END SUBROUTINE xios_set_filegroup_enabled
+      
+      SUBROUTINE xios_filegroup_handle_create(ret, idt, idt_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T)               :: ret
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: idt
+         INTEGER  (kind = C_INT)     , VALUE        :: idt_size
+      END SUBROUTINE xios_filegroup_handle_create
+
+   END INTERFACE
+   
+END MODULE FILEGROUP_INTERFACE
Index: XMLIO_V2/dev/common/src/xmlio/fortran/grid_interface.f90
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/fortran/grid_interface.f90	(revision 274)
+++ XMLIO_V2/dev/common/src/xmlio/fortran/grid_interface.f90	(revision 274)
@@ -0,0 +1,43 @@
+MODULE GRID_INTERFACE
+   USE, INTRINSIC :: ISO_C_BINDING
+     
+   INTERFACE ! Ne pas appeler directement/Interface FORTRAN 2003 <-> C99
+     
+      SUBROUTINE xios_set_grid_name(grid_hdl, name, name_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE        :: grid_hdl
+         CHARACTER(kind = C_CHAR)   , DIMENSION(*) :: name
+         INTEGER (kind = C_INT)     , VALUE        :: name_size
+      END SUBROUTINE xios_set_grid_name
+
+      SUBROUTINE xios_set_grid_description(grid_hdl, description, description_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE        :: grid_hdl
+         CHARACTER(kind = C_CHAR)   , DIMENSION(*) :: description
+         INTEGER (kind = C_INT)     , VALUE        :: description_size
+      END SUBROUTINE xios_set_grid_description
+
+      SUBROUTINE xios_set_grid_domain_ref(grid_hdl, domain_ref, domain_ref_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE        :: grid_hdl
+         CHARACTER(kind = C_CHAR)   , DIMENSION(*) :: domain_ref
+         INTEGER (kind = C_INT)     , VALUE        :: domain_ref_size
+      END SUBROUTINE xios_set_grid_domain_ref
+
+      SUBROUTINE xios_set_grid_axis_ref(grid_hdl, axis_ref, axis_ref_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: grid_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: axis_ref
+         INTEGER  (kind = C_INT)     , VALUE        :: axis_ref_size
+      END SUBROUTINE xios_set_grid_axis_ref
+      
+      SUBROUTINE xios_grid_handle_create(ret, idt, idt_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T)               :: ret
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: idt
+         INTEGER  (kind = C_INT)     , VALUE        :: idt_size
+      END SUBROUTINE xios_grid_handle_create
+     
+   END INTERFACE
+     
+END MODULE GRID_INTERFACE
Index: XMLIO_V2/dev/common/src/xmlio/fortran/gridgroup_interface.f90
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/fortran/gridgroup_interface.f90	(revision 274)
+++ XMLIO_V2/dev/common/src/xmlio/fortran/gridgroup_interface.f90	(revision 274)
@@ -0,0 +1,43 @@
+MODULE GRIDGROUP_INTERFACE
+   USE, INTRINSIC :: ISO_C_BINDING
+     
+   INTERFACE ! Ne pas appeler directement/Interface FORTRAN 2003 <-> C99
+     
+      SUBROUTINE xios_set_gridgroup_name(gridgroup_hdl, name, name_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE        :: gridgroup_hdl
+         CHARACTER(kind = C_CHAR)   , DIMENSION(*) :: name
+         INTEGER (kind = C_INT)     , VALUE        :: name_size
+      END SUBROUTINE xios_set_gridgroup_name
+
+      SUBROUTINE xios_set_gridgroup_description(gridgroup_hdl, description, description_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE        :: gridgroup_hdl
+         CHARACTER(kind = C_CHAR)   , DIMENSION(*) :: description
+         INTEGER (kind = C_INT)     , VALUE        :: description_size
+      END SUBROUTINE xios_set_gridgroup_description
+
+      SUBROUTINE xios_set_gridgroup_domain_ref(gridgroup_hdl, domain_ref, domain_ref_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE        :: gridgroup_hdl
+         CHARACTER(kind = C_CHAR)   , DIMENSION(*) :: domain_ref
+         INTEGER (kind = C_INT)     , VALUE        :: domain_ref_size
+      END SUBROUTINE xios_set_gridgroup_domain_ref
+
+      SUBROUTINE xios_set_gridgroup_axis_ref(gridgroup_hdl, axis_ref, axis_ref_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: gridgroup_hdl
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: axis_ref
+         INTEGER  (kind = C_INT)     , VALUE        :: axis_ref_size
+      END SUBROUTINE xios_set_gridgroup_axis_ref
+      
+      SUBROUTINE xios_domaingroup_handle_create(ret, idt, idt_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T)               :: ret
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: idt
+         INTEGER  (kind = C_INT)     , VALUE        :: idt_size
+      END SUBROUTINE xios_domaingroup_handle_create
+      
+   END INTERFACE
+     
+END MODULE GRIDGROUP_INTERFACE
Index: XMLIO_V2/dev/common/src/xmlio/fortran/iaxis.f90
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/fortran/iaxis.f90	(revision 274)
+++ XMLIO_V2/dev/common/src/xmlio/fortran/iaxis.f90	(revision 274)
@@ -0,0 +1,132 @@
+MODULE IAXIS
+   USE, INTRINSIC :: ISO_C_BINDING
+   USE AXIS_INTERFACE
+   USE AXISGROUP_INTERFACE
+   
+   TYPE XAxisHandle
+      INTEGER(kind = C_INTPTR_T) :: daddr
+   END TYPE XAxisHandle
+   
+   TYPE XAxisGroupHandle
+      INTEGER(kind = C_INTPTR_T) :: daddr
+   END TYPE XAxisGroupHandle
+   
+   !----------------------------------------------------------------------------
+   INTERFACE set_axis_attributes
+      MODULE PROCEDURE set_axis_attributes_id,set_axis_attributes_hdl
+   END INTERFACE  
+   
+   INTERFACE set_axis_group_attributes
+      MODULE PROCEDURE set_axisgroup_attributes_id,set_axisgroup_attributes_hdl
+   END INTERFACE  
+   !----------------------------------------------------------------------------
+     
+   CONTAINS ! Fonctions disponibles pour les utilisateurs.
+
+   SUBROUTINE set_axis_attributes_id(axis_id, name_, standard_name_, long_name_, unit_, size_, zvalue_)
+      IMPLICIT NONE
+      TYPE(XAxisHandle)                                      :: axis_hdl
+      CHARACTER(len = *)                        , INTENT(IN) :: axis_id
+      CHARACTER(len = *)              , OPTIONAL, INTENT(IN) :: name_
+      CHARACTER(len = *)              , OPTIONAL, INTENT(IN) :: standard_name_
+      CHARACTER(len = *)              , OPTIONAL, INTENT(IN) :: long_name_
+      CHARACTER(len = *)              , OPTIONAL, INTENT(IN) :: unit_
+      INTEGER                         , OPTIONAL, INTENT(IN) :: size_
+      REAL    (kind = 8), dimension(*), OPTIONAL, INTENT(IN) :: zvalue_(:)
+      
+      CALL axis_handle_create(axis_hdl, axis_id)
+      CALL set_axis_attributes_hdl(axis_hdl, name_, standard_name_, long_name_, unit_, size_, zvalue_)
+
+   END SUBROUTINE set_axis_attributes_id
+
+   SUBROUTINE set_axis_attributes_hdl(axis_hdl, name_, standard_name_, long_name_, unit_, size_, zvalue_)
+      IMPLICIT NONE
+      TYPE(XAxisHandle)                         , INTENT(IN) :: axis_hdl
+      CHARACTER(len = *)              , OPTIONAL, INTENT(IN) :: name_
+      CHARACTER(len = *)              , OPTIONAL, INTENT(IN) :: standard_name_
+      CHARACTER(len = *)              , OPTIONAL, INTENT(IN) :: long_name_
+      CHARACTER(len = *)              , OPTIONAL, INTENT(IN) :: unit_
+      INTEGER                         , OPTIONAL, INTENT(IN) :: size_
+      REAL    (kind = 8), dimension(*), OPTIONAL, INTENT(IN) :: zvalue_(:)
+      
+      IF (PRESENT(name_))           THEN
+         CALL xios_set_axis_name(axis_hdl%daddr, name_, len(name_))
+      END IF
+      IF (PRESENT(standard_name_))  THEN
+         CALL xios_set_axis_standard_name(axis_hdl%daddr, standard_name_, len(standard_name_))
+      END IF
+      IF (PRESENT(long_name_))      THEN
+         CALL xios_set_axis_long_name(axis_hdl%daddr, long_name_, len(long_name_))
+      END IF
+      IF (PRESENT(unit_))           THEN
+         CALL xios_set_axis_unit(axis_hdl%daddr, unit_, len(unit_))
+      END IF
+      IF (PRESENT(size_))           THEN
+         CALL xios_set_axis_size(axis_hdl%daddr, size_)
+      END IF
+      IF (PRESENT(zvalue_))         THEN
+         CALL xios_set_axis_zvalue(axis_hdl%daddr, zvalue_, size(zvalue_, 1))
+      END IF
+   END SUBROUTINE set_axis_attributes_hdl
+   
+   SUBROUTINE set_axisgroup_attributes_id(axisgroup_id, name_, standard_name_, long_name_, unit_, size_, zvalue_)
+      IMPLICIT NONE
+      TYPE(XAxisGroupHandle)                                 :: axisgroup_hdl
+      CHARACTER(len = *)                        , INTENT(IN) :: axisgroup_id
+      CHARACTER(len = *)              , OPTIONAL, INTENT(IN) :: name_
+      CHARACTER(len = *)              , OPTIONAL, INTENT(IN) :: standard_name_
+      CHARACTER(len = *)              , OPTIONAL, INTENT(IN) :: long_name_
+      CHARACTER(len = *)              , OPTIONAL, INTENT(IN) :: unit_
+      INTEGER                         , OPTIONAL, INTENT(IN) :: size_
+      REAL    (kind = 8), dimension(*), OPTIONAL, INTENT(IN) :: zvalue_(:)
+      
+      CALL axisgroup_handle_create(axisgroup_hdl, axisgroup_id)
+      CALL set_axisgroup_attributes_hdl(axisgroup_hdl, name_, standard_name_, long_name_, unit_, size_, zvalue_)
+
+   END SUBROUTINE set_axisgroup_attributes_id
+   
+   SUBROUTINE set_axisgroup_attributes_hdl(axisgroup_hdl, name_, standard_name_, long_name_, unit_, size_, zvalue_)
+      IMPLICIT NONE
+      TYPE(XAxisGroupHandle)                    , INTENT(IN) :: axisgroup_hdl
+      CHARACTER(len = *)              , OPTIONAL, INTENT(IN) :: name_
+      CHARACTER(len = *)              , OPTIONAL, INTENT(IN) :: standard_name_
+      CHARACTER(len = *)              , OPTIONAL, INTENT(IN) :: long_name_
+      CHARACTER(len = *)              , OPTIONAL, INTENT(IN) :: unit_
+      INTEGER                         , OPTIONAL, INTENT(IN) :: size_
+      REAL    (kind = 8), dimension(*), OPTIONAL, INTENT(IN) :: zvalue_(:)
+      
+      IF (PRESENT(name_))           THEN
+         CALL xios_set_axisgroup_name(axisgroup_hdl%daddr, name_, len(name_))
+      END IF
+      IF (PRESENT(standard_name_))  THEN
+         CALL xios_set_axisgroup_standard_name(axisgroup_hdl%daddr, standard_name_, len(standard_name_))
+      END IF
+      IF (PRESENT(long_name_))      THEN
+         CALL xios_set_axisgroup_long_name(axisgroup_hdl%daddr, long_name_, len(long_name_))
+      END IF
+      IF (PRESENT(unit_))           THEN
+         CALL xios_set_axisgroup_unit(axisgroup_hdl%daddr, unit_, len(unit_))
+      END IF
+      IF (PRESENT(size_))           THEN
+         CALL xios_set_axisgroup_size(axisgroup_hdl%daddr, size_)
+      END IF
+      IF (PRESENT(zvalue_))         THEN
+         CALL xios_set_axisgroup_zvalue(axisgroup_hdl%daddr, zvalue_, size(zvalue_, 1))
+      END IF
+   END SUBROUTINE set_axisgroup_attributes_hdl
+
+   SUBROUTINE axis_handle_create(ret, idt)
+      IMPLICIT NONE
+      TYPE(XAxisHandle) , INTENT(OUT):: ret
+      CHARACTER(len = *), INTENT(IN) :: idt      
+      CALL xios_axis_handle_create(ret%daddr, idt, len(idt))            
+   END SUBROUTINE axis_handle_create
+   
+   SUBROUTINE axisgroup_handle_create(ret, idt)
+      IMPLICIT NONE
+      TYPE(XAxisGroupHandle), INTENT(OUT):: ret
+      CHARACTER(len = *)    , INTENT(IN) :: idt      
+      CALL xios_axisgroup_handle_create(ret%daddr, idt, len(idt))            
+   END SUBROUTINE axisgroup_handle_create
+
+END MODULE IAXIS
Index: XMLIO_V2/dev/common/src/xmlio/fortran/icaxis.cpp
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/fortran/icaxis.cpp	(revision 274)
+++ XMLIO_V2/dev/common/src/xmlio/fortran/icaxis.cpp	(revision 274)
@@ -0,0 +1,147 @@
+/* ************************************************************************** *
+ *      Copyright Â© IPSL/LSCE, XMLIOServer, Avril 2010 - Octobre 2011         *
+ * ************************************************************************** */
+
+#include <boost/multi_array.hpp>
+#include <boost/shared_ptr.hpp>
+
+#include "xmlioserver.hpp"
+
+#include "object_template_impl.hpp"
+#include "group_template_impl.hpp"
+#include "attribute_template_impl.hpp"
+
+#include "icutil.hpp"
+
+extern "C"
+{
+// /////////////////////////////// DÃ©finitions ////////////////////////////// //
+
+   // ----------------------- RedÃ©finition de types ----------------------------
+   
+   typedef xmlioserver::tree::CAxis      * XAxisPtr;
+   typedef xmlioserver::tree::CAxisGroup * XAxisGroupPtr;
+
+   // ------------------------- Attributs des axes -----------------------------
+   void xios_set_axis_name 
+      (XAxisPtr axis_hdl, const char * name , int name_size)
+   {
+      std::string name_str; 
+      if (!cstr2string(name, name_size, name_str)) return;
+
+      axis_hdl->name.setValue(name_str);
+   }
+
+   void xios_set_axis_standard_name
+      (XAxisPtr axis_hdl, const char * standard_name , int standard_name_size)
+   {
+      std::string standard_name_str; 
+      if (!cstr2string(standard_name, standard_name_size, standard_name_str)) return;
+
+      axis_hdl->standard_name.setValue(standard_name_str);
+   }
+    
+   void xios_set_axis_long_name 
+      (XAxisPtr axis_hdl, const char * long_name , int long_name_size)
+   {
+      std::string long_name_str; 
+      if (!cstr2string(long_name, long_name_size, long_name_str)) return;
+
+      axis_hdl->long_name.setValue(long_name_str);
+   }
+
+   void xios_set_axis_unit 
+      (XAxisPtr axis_hdl, const char * unit , int unit_size)
+   {
+      std::string unit_str; 
+      if (!cstr2string(unit, unit_size, unit_str)) return;
+
+      axis_hdl->unit.setValue(unit_str);
+   }
+    
+   void xios_set_axis_size(XAxisPtr axis_hdl, int size)
+   {
+      axis_hdl->size.setValue(size);
+   }
+
+   void xios_set_axis_zvalue 
+      (XAxisPtr axis_hdl, const double * zvalue , int zvalue_extent1)
+   {
+      ARRAY(double, 1) zvalue_val(new CArray<double, 1>(boost::extents [zvalue_extent1]));
+      std::copy(zvalue, &(zvalue[zvalue_val->num_elements()]), zvalue_val->data());
+
+      axis_hdl->zvalue.setValue(zvalue_val);
+
+   }
+   
+   // -------------------- Attributs des groupes d'axes -------------------------
+   
+   void xios_set_axisgroup_name 
+      (XAxisGroupPtr axisgroup_hdl, const char * name , int name_size)
+   {
+      std::string name_str;
+      if (!cstr2string(name, name_size, name_str)) return;
+
+      axisgroup_hdl->name.setValue(name_str);
+   }
+
+   void xios_set_axisgroup_standard_name
+      (XAxisGroupPtr axisgroup_hdl, const char * standard_name , int standard_name_size)
+   {
+      std::string standard_name_str;
+      if (!cstr2string(standard_name, standard_name_size, standard_name_str)) return;
+
+      axisgroup_hdl->standard_name.setValue(standard_name_str);
+   }
+    
+   void xios_set_axisgroup_long_name 
+      (XAxisGroupPtr axisgroup_hdl, const char * long_name , int long_name_size)
+   {
+      std::string long_name_str;
+      if (!cstr2string(long_name, long_name_size, long_name_str)) return;
+
+      axisgroup_hdl->long_name.setValue(long_name_str);
+   }
+
+   void xios_set_axisgroup_unit 
+      (XAxisGroupPtr axisgroup_hdl, const char * unit , int unit_size)
+   {
+      std::string unit_str;
+      if (!cstr2string(unit, unit_size, unit_str)) return;
+
+      axisgroup_hdl->unit.setValue(unit_str);
+   }
+    
+   void xios_set_axisgroup_size(XAxisGroupPtr axisgroup_hdl, int size)
+   {
+      axisgroup_hdl->size.setValue(size);
+   }
+
+   void xios_set_axisgroup_zvalue 
+      (XAxisGroupPtr axisgroup_hdl, const double * zvalue , int zvalue_extent1)
+   {
+      ARRAY(double, 1) zvalue_val(new CArray<double, 1>(boost::extents [zvalue_extent1]));
+      std::copy(zvalue, &(zvalue[zvalue_val->num_elements()]), zvalue_val->data());
+
+      axisgroup_hdl->zvalue.setValue(zvalue_val);
+   }
+   
+   // ------------------------ CrÃ©ation des handle -----------------------------
+   
+   void xios_axis_handle_create (XAxisPtr * _ret, const char * _id, int _id_len)
+   {
+      std::string id; 
+      if (!cstr2string(_id, _id_len, id)) return;
+
+      *_ret = xmlioserver::CObjectFactory::GetObject<xmlioserver::tree::CAxis>(id).get();
+   }
+   
+   void xios_axisgroup_handle_create (XAxisGroupPtr * _ret, const char * _id, int _id_len)
+   {
+      std::string id; 
+      if (!cstr2string(_id, _id_len, id)) return;
+
+      *_ret = xmlioserver::CObjectFactory::GetObject<xmlioserver::tree::CAxisGroup>(id).get();
+   }
+   
+} // extern "C"
Index: XMLIO_V2/dev/common/src/xmlio/fortran/iccontext.cpp
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/fortran/iccontext.cpp	(revision 274)
+++ XMLIO_V2/dev/common/src/xmlio/fortran/iccontext.cpp	(revision 274)
@@ -0,0 +1,140 @@
+/* ************************************************************************** *
+ *      Copyright Â© IPSL/LSCE, XMLIOServer, Avril 2010 - Octobre 2011         *
+ * ************************************************************************** */
+
+#include <boost/multi_array.hpp>
+#include <boost/shared_ptr.hpp>
+
+#include "xmlioserver.hpp"
+
+#include "attribute_template_impl.hpp"
+#include "object_template_impl.hpp"
+#include "group_template_impl.hpp"
+
+#include "calendar_type.hpp"
+
+#include "icutil.hpp"
+
+extern "C"
+{
+// /////////////////////////////// DÃ©finitions ////////////////////////////// //
+
+   // ----------------------- RedÃ©finition de types ----------------------------
+
+   typedef enum { D360 = 0 , ALLLEAP, NOLEAP, JULIAN, GREGORIAN } XCalendarType ;
+
+   typedef xmlioserver::tree::CContext * XContextPtr;
+
+   // ------------------------- Attributs des contextes ------------------------
+   
+   
+   void xios_set_context_calendar_type(XContextPtr context_hdl, const char * calendar_type, int calendar_type_size)
+   {
+      std::string calendar_type_str; 
+      if (!cstr2string(calendar_type, calendar_type_size, calendar_type_str)) return;
+
+      context_hdl->calendar_type.setValue(calendar_type_str);
+   }
+   
+   void xios_set_context_start_date(XContextPtr context_hdl, const char * start_date, int start_date_size)
+   {
+      std::string start_date_str; 
+      if (!cstr2string(start_date, start_date_size, start_date_str)) return;
+
+      context_hdl->start_date.setValue(start_date_str);
+   }
+   
+   void xios_set_context_output_dir(XContextPtr context_hdl, const char * output_dir, int output_dir_size)
+   {
+      std::string output_dir_str; 
+      if (!cstr2string(output_dir, output_dir_size, output_dir_str)) return;
+
+      context_hdl->output_dir.setValue(output_dir_str);
+   }
+   
+   // ------------------------ CrÃ©ation des handle -----------------------------
+   
+   void xios_context_handle_create (XContextPtr * _ret, const char * _id, int _id_len)
+   {
+      std::string id; 
+      if (!cstr2string(_id, _id_len, id)) return;
+
+      std::vector<boost::shared_ptr<xmlioserver::tree::CContext> > def_vector =
+            xmlioserver::tree::CContext::GetContextGroup()->getChildList();
+
+      for (std::size_t i = 0; i < def_vector.size(); i++)
+	   {
+          if (def_vector[i]->getId().compare(id) == 0)
+          *_ret = def_vector[i].get();
+          return;
+      }
+      // Lever une execption ici
+   }
+   
+   // ------------------------ Changements de contextes ------------------------
+   
+   void xios_context_set_current(XContextPtr context, bool withswap)
+   {
+      CTreeManager::SetCurrentContextId(context->getId());
+   }
+   
+   // ------------------------ CrÃ©ation de contexte ----------------------------
+   
+   void xios_context_create(XContextPtr * context,
+                            const char  * context_id,
+                            int           context_id_size,
+                            XCalendarType calendar_type,
+                            int           year,
+                            int           month,
+                            int           day,
+                            int           hour,
+                            int           minute,
+                            int           second)
+   {
+      std::string context_id_str; 
+      if (!cstr2string(context_id, context_id_size, context_id_str)) return;
+      try
+      {
+         boost::shared_ptr<xmlioserver::tree::CContext> _context =
+            CTreeManager::CreateContext(context_id_str);
+         *context = _context.get();
+         switch(calendar_type)
+         {
+            case (D360)     :
+               _context->setCalendar(boost::shared_ptr<xmlioserver::date::CCalendar>
+                  (new xmlioserver::date::CD360Calendar
+                     (year, month, day, hour, minute, second)));
+               break;
+            case (ALLLEAP)  :
+               _context->setCalendar(boost::shared_ptr<xmlioserver::date::CCalendar>
+                  (new xmlioserver::date::CAllLeapCalendar
+                     (year, month, day, hour, minute, second)));
+               break;
+            case (NOLEAP)   :
+               _context->setCalendar(boost::shared_ptr<xmlioserver::date::CCalendar>
+                  (new xmlioserver::date::CNoLeapCalendar
+                     (year, month, day, hour, minute, second)));
+               break;
+            case (JULIAN)   :
+               _context->setCalendar(boost::shared_ptr<xmlioserver::date::CCalendar>
+                  (new xmlioserver::date::CJulianCalendar
+                     (year, month, day, hour, minute, second)));
+               break;
+            case (GREGORIAN):
+               _context->setCalendar(boost::shared_ptr<xmlioserver::date::CCalendar>
+                  (new xmlioserver::date::CGregorianCalendar
+                     (year, month, day, hour, minute, second)));
+                break;
+            default:
+               std::cerr << "Le calendrier n'est pas identifiÃ©" << std::endl;
+               exit (EXIT_FAILURE);
+         }
+      }
+      catch (xmlioserver::CException & exc)
+      {
+         std::cerr << exc.getMessage() << std::endl;
+         exit (EXIT_FAILURE);
+      }
+   }
+   
+} // extern "C"
Index: XMLIO_V2/dev/common/src/xmlio/fortran/icdata.cpp
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/fortran/icdata.cpp	(revision 274)
+++ XMLIO_V2/dev/common/src/xmlio/fortran/icdata.cpp	(revision 274)
@@ -0,0 +1,210 @@
+/* ************************************************************************** *
+ *      Copyright Â© IPSL/LSCE, XMLIOServer, Avril 2010 - Octobre 2011         *
+ * ************************************************************************** */
+
+#include <boost/multi_array.hpp>
+#include <boost/shared_ptr.hpp>
+
+#include "xmlioserver.hpp"
+
+#include "attribute_template_impl.hpp"
+#include "object_template_impl.hpp"
+#include "group_template_impl.hpp"
+
+#include "icutil.hpp"
+
+extern "C"
+{
+// /////////////////////////////// DÃ©finitions ////////////////////////////// //
+
+   // ----------------------- RedÃ©finition de types ----------------------------
+   
+   typedef enum { NETCDF4 = 0 } XFileType;
+   
+   typedef xmlioserver::tree::CContext * XContextPtr;
+
+   // -------------------- Traitement des donnÃ©es ------------------------------
+   
+   void xios_dtreatment_start(XContextPtr context_hdl, XFileType filetype, int comm_client_server, int comm_server)
+   {
+      using namespace xmlioserver::tree;
+      using namespace xmlioserver;
+      try
+      {
+         boost::shared_ptr<CContext> context =
+                CObjectFactory::GetObject<CContext>(context_hdl);
+         StdOStringStream oss;
+         oss << StdString("def_client_next.")
+             << CMPIManager::GetCommRank(CMPIManager::GetCommWorld());
+         CTreeManager::PrintTreeToFile(oss.str());
+         oss.str("");
+
+         boost::shared_ptr<CDataTreatment> dt(new CDataTreatment (context));
+         context->setDataTreatment(dt);
+
+         oss << StdString("def_client_end.")
+             << CMPIManager::GetCommRank(CMPIManager::GetCommWorld());
+         CTreeManager::PrintTreeToFile(oss.str());
+
+         if ((comm_client_server != -1))
+         {
+            MPI_Request request = 0;
+            StdOStringStream ostrs;
+            if (CMPIManager::GetCommRank(comm_client_server) == 1)
+            {
+               CTreeManager::ToBinary(ostrs);
+               CLinearBuffer lbuffer(ostrs.str().size()+13);
+               lbuffer.appendString(ostrs.str());
+               CMPIManager::SendLinearBuffer(comm_client_server, 0, lbuffer, request);
+               CMPIManager::Wait(request);  // Pas encore en mode RPC
+            }
+            else
+            {
+               CTreeManager::DomainsToBinary(ostrs);
+               CLinearBuffer lbuffer(ostrs.str().size()+13);
+               lbuffer.appendString(ostrs.str());
+               CMPIManager::SendLinearBuffer(comm_client_server, 0, lbuffer, request);
+               CMPIManager::Wait(request);  // Pas encore en mode RPC
+            }
+         }
+         else
+         {
+            dt->createDataOutput<CNc4DataOutput>();
+         }
+      }
+      catch (CException & exc)
+      {
+         std::cerr << exc.getMessage() << std::endl;
+         exit (EXIT_FAILURE);
+      }
+   }
+   
+   void xios_dtreatment_end(void)
+   {
+      try
+      {
+         CMPIManager::Finalize();
+      }
+      catch (CException & exc)
+      {
+         std::cerr << exc.getMessage() << std::endl;
+         exit (EXIT_FAILURE);
+      }
+   }
+
+   // ---------------------- Initialisation du serveur -------------------------
+
+   void xios_init_ioserver(MPIComm * comm_client)
+   {
+      try
+      {
+         MPIComm comm_client_server, comm_server;
+         CMPIManager::Initialise(NULL, NULL);
+         CMPIManager::DispatchClient(false, *comm_client, comm_client_server, comm_server);
+      }
+      catch (CException & exc)
+      {
+         std::cerr << exc.getMessage() << std::endl;
+         exit (EXIT_FAILURE);
+      }
+   }
+   
+   // ---------------------- Ecriture des donnÃ©es ------------------------------
+   
+   void xios_write_data_k81(const char * fieldid, int fieldid_size, double * data_k8, int data_Xsize)
+   {
+      std::string fieldid_str;
+      boost::shared_ptr<CContext> context =
+      CObjectFactory::GetObject<CContext>(CObjectFactory::GetCurrentContextId());
+      boost::shared_ptr<data::CDataTreatment> dtreat = context->getDataTreatment();
+      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 
+      
+//      boost::const_multi_array_ref<double, 1> array_(data_k8,
+//          boost::extents [data_Xsize],
+//          boost::fortran_storage_order());
+      ARRAY(double, 1) data(new CArray<double, 1>(boost::extents [data_Xsize]));
+      std::copy(data_k8, &(data_k8[data->num_elements()]), data->data());
+      dtreat->write_data(fieldid_str, data);
+   }
+   
+   void xios_write_data_k82(const char * fieldid, int fieldid_size, double * data_k8, int data_Xsize, int data_Ysize)
+   {
+      std::string fieldid_str;
+      boost::shared_ptr<CContext> context =
+      CObjectFactory::GetObject<CContext>(CObjectFactory::GetCurrentContextId());
+      boost::shared_ptr<data::CDataTreatment> dtreat = context->getDataTreatment();
+      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return;
+      
+//      boost::const_multi_array_ref<double, 2> array_(data_k8,
+//          boost::extents [data_Xsize][data_Ysize],
+//          boost::fortran_storage_order());
+      ARRAY(double, 2) data(new CArray<double, 2>(boost::extents [data_Xsize][data_Ysize]));
+      std::copy(data_k8, &(data_k8[data->num_elements()]), data->data());
+      dtreat->write_data(fieldid_str, data);
+   }
+   
+   void xios_write_data_k83(const char * fieldid, int fieldid_size, double * data_k8, int data_Xsize, int data_Ysize, int data_Zsize)
+   {
+      std::string fieldid_str;
+      boost::shared_ptr<CContext> context =
+      CObjectFactory::GetObject<CContext>(CObjectFactory::GetCurrentContextId());
+      boost::shared_ptr<data::CDataTreatment> dtreat = context->getDataTreatment();
+      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 
+      
+//      boost::const_multi_array_ref<double, 3> array_(data_k8,
+//          boost::extents [data_Xsize][data_Ysize][data_Zsize],
+//          boost::fortran_storage_order());
+      ARRAY(double, 3) data(new CArray<double, 3>(boost::extents [data_Xsize][data_Ysize][data_Zsize]));
+      std::copy(data_k8, &(data_k8[data->num_elements()]), data->data());
+      dtreat->write_data(fieldid_str, data);
+   }
+   
+   void xios_write_data_k41(const char * fieldid, int fieldid_size, float * data_k4, int data_Xsize)
+   {
+      std::string fieldid_str;
+      boost::shared_ptr<CContext> context =
+      CObjectFactory::GetObject<CContext>(CObjectFactory::GetCurrentContextId());
+      boost::shared_ptr<data::CDataTreatment> dtreat = context->getDataTreatment();
+      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 
+      
+//      boost::const_multi_array_ref<float, 1> array_(data_k4,
+//          boost::extents [data_Xsize],
+//          boost::fortran_storage_order());
+      ARRAY(float, 1) data(new CArray<float, 1>(boost::extents [data_Xsize]));
+      std::copy(data_k4, &(data_k4[data->num_elements()]), data->data());
+      dtreat->write_data(fieldid_str, data);
+   }
+   
+   void xios_write_data_k42(const char * fieldid, int fieldid_size, float * data_k4, int data_Xsize, int data_Ysize)
+   {
+      std::string fieldid_str;
+      boost::shared_ptr<CContext> context =
+      CObjectFactory::GetObject<CContext>(CObjectFactory::GetCurrentContextId());
+      boost::shared_ptr<data::CDataTreatment> dtreat = context->getDataTreatment();
+      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 
+      
+//      boost::const_multi_array_ref<float, 2> array_(data_k4,
+//          boost::extents [data_Xsize][data_Ysize],
+//          boost::fortran_storage_order());
+      ARRAY(float, 2) data(new CArray<float, 2>(boost::extents [data_Xsize][data_Ysize]));
+      std::copy(data_k4, &(data_k4[data->num_elements()]), data->data());
+      dtreat->write_data(fieldid_str, data);
+   }
+   
+   void xios_write_data_k43(const char * fieldid, int fieldid_size, float * data_k4, int data_Xsize, int data_Ysize, int data_Zsize)
+   {
+      std::string fieldid_str;
+      boost::shared_ptr<CContext> context =
+      CObjectFactory::GetObject<CContext>(CObjectFactory::GetCurrentContextId());
+      boost::shared_ptr<data::CDataTreatment> dtreat = context->getDataTreatment();
+      if (!cstr2string(fieldid, fieldid_size, fieldid_str)) return; 
+      
+//      boost::const_multi_array_ref<float, 3> array_(data_k4,
+//          boost::extents [data_Xsize][data_Ysize][data_Zsize],
+//          boost::fortran_storage_order());
+      ARRAY(float, 3) data(new CArray<float, 3>(boost::extents [data_Xsize][data_Ysize][data_Zsize]));
+      std::copy(data_k4, &(data_k4[data->num_elements()]), data->data());
+      dtreat->write_data(fieldid_str, data);
+   } 
+
+} // extern "C"
Index: XMLIO_V2/dev/common/src/xmlio/fortran/icdate.cpp
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/fortran/icdate.cpp	(revision 274)
+++ XMLIO_V2/dev/common/src/xmlio/fortran/icdate.cpp	(revision 274)
@@ -0,0 +1,58 @@
+/* ************************************************************************** *
+ *      Copyright Â© IPSL/LSCE, XMLIOServer, Avril 2010 - Octobre 2011         *
+ * ************************************************************************** */
+
+#include <boost/multi_array.hpp>
+#include <boost/shared_ptr.hpp>
+
+#include "xmlioserver.hpp"
+
+#include "attribute_template_impl.hpp"
+#include "object_template_impl.hpp"
+#include "group_template_impl.hpp"
+
+#include "calendar_type.hpp"
+
+#include "icutil.hpp"
+
+extern "C"
+{
+// /////////////////////////////// DÃ©finitions ////////////////////////////// //
+
+   void xios_set_timestep(double ts_year, double ts_month,  double ts_day,
+                          double ts_hour, double ts_minute, double ts_second)
+   {
+      try
+      {
+         date::CDuration dur = {ts_year, ts_month, ts_day, ts_hour, ts_minute, ts_second};
+         boost::shared_ptr<xmlioserver::tree::CContext> context =
+         xmlioserver::CObjectFactory::GetObject<xmlioserver::tree::CContext>
+            (CObjectFactory::GetCurrentContextId());
+         boost::shared_ptr<xmlioserver::data::CDataTreatment> dtreat = context->getDataTreatment();
+         dtreat->set_timestep(dur);
+      }
+      catch (xmlioserver::CException & exc)
+      {
+         std::cerr << exc.getMessage() << std::endl;
+         exit (EXIT_FAILURE);
+      }
+   }
+   
+   void xios_update_calendar(int step)
+   {
+      try
+      {
+         boost::shared_ptr<xmlioserver::tree::CContext> context =
+         xmlioserver::CObjectFactory::GetObject<xmlioserver::tree::CContext>
+            (CObjectFactory::GetCurrentContextId());
+         boost::shared_ptr<xmlioserver::data::CDataTreatment> dtreat = context->getDataTreatment();
+         dtreat->update_calendar(step);
+      }
+      catch (xmlioserver::CException & exc)
+      {
+         std::cerr << exc.getMessage() << std::endl;
+         exit (EXIT_FAILURE);
+      }
+   }
+
+} // extern "C"
Index: XMLIO_V2/dev/common/src/xmlio/fortran/icdomain.cpp
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/fortran/icdomain.cpp	(revision 274)
+++ XMLIO_V2/dev/common/src/xmlio/fortran/icdomain.cpp	(revision 274)
@@ -0,0 +1,412 @@
+/* ************************************************************************** *
+ *      Copyright Â© IPSL/LSCE, XMLIOServer, Avril 2010 - Octobre 2011         *
+ * ************************************************************************** */
+
+#include <boost/multi_array.hpp>
+#include <boost/shared_ptr.hpp>
+
+#include "xmlioserver.hpp"
+
+#include "attribute_template_impl.hpp"
+#include "object_template_impl.hpp"
+#include "group_template_impl.hpp"
+
+#include "icutil.hpp"
+
+extern "C"
+{
+// /////////////////////////////// DÃ©finitions ////////////////////////////// //
+
+   // ----------------------- RedÃ©finition de types ----------------------------
+
+   typedef xmlioserver::tree::CDomain      * XDomainPtr;
+   typedef xmlioserver::tree::CDomainGroup * XDomainGroupPtr;
+
+   // ------------------------- Attributs des axes -----------------------------
+   
+   void xios_set_domain_name(XDomainPtr domain_hdl, const char * name, int name_size)
+   {
+      std::string name_str; 
+      if (!cstr2string(name, name_size, name_str)) return;
+
+      domain_hdl->name.setValue(name_str);
+   }
+   
+   void xios_set_domain_standard_name(XDomainPtr domain_hdl, const char * standard_name, int standard_name_size)
+   {
+      std::string standard_name_str; 
+      if (!cstr2string(standard_name, standard_name_size, standard_name_str)) return;
+
+      domain_hdl->standard_name.setValue(standard_name_str);
+   }
+   
+   void xios_set_domain_long_name(XDomainPtr domain_hdl, const char * long_name, int long_name_size)
+   {
+      std::string long_name_str; 
+      if (!cstr2string(long_name, long_name_size, long_name_str)) return;
+
+      domain_hdl->long_name.setValue(long_name_str);
+   }
+   
+   void xios_set_domain_domain_group_ref(XDomainPtr domain_hdl, const char * domain_group_ref, int domain_group_ref_size)
+   {
+      std::string domain_group_ref_str; 
+      if (!cstr2string(domain_group_ref, domain_group_ref_size, domain_group_ref_str)) return;
+
+      domain_hdl->domain_group_ref.setValue(domain_group_ref_str);
+   }
+   
+   void xios_set_domain_ni_glo(XDomainPtr domain_hdl, int ni_glo)
+   {
+      domain_hdl->ni_glo.setValue(ni_glo);
+   }
+   
+   void xios_set_domain_nj_glo(XDomainPtr domain_hdl, int nj_glo)
+   {
+      domain_hdl->nj_glo.setValue(nj_glo);
+   }
+   
+   void xios_set_domain_ibegin(XDomainPtr domain_hdl, int ibegin)
+   {
+      domain_hdl->ibegin.setValue(ibegin);
+   }
+   
+   void xios_set_domain_iend(XDomainPtr domain_hdl, int iend)
+   {
+      domain_hdl->iend.setValue(iend);
+   }
+   
+   void xios_set_domain_ni(XDomainPtr domain_hdl, int ni)
+   {
+      domain_hdl->ni.setValue(ni);
+   }
+   
+   void xios_set_domain_jbegin(XDomainPtr domain_hdl, int jbegin)
+   {
+      domain_hdl->jbegin.setValue(jbegin);
+   }
+   
+   void xios_set_domain_jend(XDomainPtr domain_hdl, int jend)
+   {
+      domain_hdl->jend.setValue(jend);
+   }
+   
+   void xios_set_domain_nj(XDomainPtr domain_hdl, int nj)
+   {
+      domain_hdl->nj.setValue(nj);
+   }
+   
+   void xios_set_domain_mask(XDomainPtr domain_hdl, bool * mask, int mask_extent1, int mask_extent2)
+   {
+      ARRAY(bool, 2) mask_val(new CArray<bool, 2>(boost::extents [mask_extent1][mask_extent2]));
+      std::copy(mask, &(mask[mask_val->num_elements()]), mask_val->data());
+
+      domain_hdl->mask.setValue(mask_val);
+   }
+   
+   void xios_set_domain_data_dim(XDomainPtr domain_hdl, int data_dim)
+   {
+      domain_hdl->data_dim.setValue(data_dim);
+   }
+   
+   void xios_set_domain_data_ni(XDomainPtr domain_hdl, int data_ni)
+   {
+      domain_hdl->data_ni.setValue(data_ni);
+   }
+   
+   void xios_set_domain_data_nj(XDomainPtr domain_hdl, int data_nj)
+   {
+      domain_hdl->data_nj.setValue(data_nj);
+   }
+   
+   void xios_set_domain_data_ibegin(XDomainPtr domain_hdl, int data_ibegin)
+   {
+      domain_hdl->data_ibegin.setValue(data_ibegin);
+   }
+   
+   void xios_set_domain_data_jbegin(XDomainPtr domain_hdl, int data_jbegin)
+   {
+      domain_hdl->data_jbegin.setValue(data_jbegin);
+   }
+   
+   void xios_set_domain_zoom_ni(XDomainPtr domain_hdl, int zoom_ni)
+   {
+      domain_hdl->zoom_ni.setValue(zoom_ni);
+   }
+   
+   void xios_set_domain_zoom_nj(XDomainPtr domain_hdl, int zoom_nj)
+   {
+      domain_hdl->zoom_nj.setValue(zoom_nj);
+   }
+   
+   void xios_set_domain_zoom_ibegin(XDomainPtr domain_hdl, int zoom_ibegin)
+   {
+      domain_hdl->zoom_ibegin.setValue(zoom_ibegin);
+   }
+    
+   void xios_set_domain_zoom_jbegin(XDomainPtr domain_hdl, int zoom_jbegin)
+   {
+      domain_hdl->zoom_jbegin.setValue(zoom_jbegin);
+   }
+   
+   void xios_set_domain_zoom_ni_loc(XDomainPtr domain_hdl, int zoom_ni_loc)
+   {
+      domain_hdl->zoom_ni_loc.setValue(zoom_ni_loc);
+   }
+   
+   void xios_set_domain_zoom_nj_loc(XDomainPtr domain_hdl, int zoom_nj_loc)
+   {
+      domain_hdl->zoom_nj_loc.setValue(zoom_nj_loc);
+   }
+   
+   void xios_set_domain_zoom_ibegin_loc(XDomainPtr domain_hdl, int zoom_ibegin_loc)
+   {
+      domain_hdl->zoom_ibegin_loc.setValue(zoom_ibegin_loc);
+   }
+   
+   void xios_set_domain_zoom_jbegin_loc(XDomainPtr domain_hdl, int zoom_jbegin_loc)
+   {
+      domain_hdl->zoom_jbegin_loc.setValue(zoom_jbegin_loc);
+   }
+   
+   void xios_set_domain_data_n_index(XDomainPtr domain_hdl, int data_n_index)
+   {
+      domain_hdl->data_n_index.setValue(data_n_index);
+   }
+   
+   void xios_set_domain_data_i_index(XDomainPtr domain_hdl, int * data_i_index, int data_i_index_extent1)
+   {
+      ARRAY(int, 1) data_i_index_val(new CArray<int, 1>(boost::extents [data_i_index_extent1]));
+      std::copy(data_i_index, &(data_i_index[data_i_index_val->num_elements()]), data_i_index_val->data());
+
+      domain_hdl->data_i_index.setValue(data_i_index_val);
+   }
+   
+   void xios_set_domain_data_j_index(XDomainPtr domain_hdl, int * data_j_index, int data_j_index_extent1)
+   {
+      ARRAY(int, 1) data_j_index_val(new CArray<int, 1>(boost::extents [data_j_index_extent1]));
+      std::copy(data_j_index, &(data_j_index[data_j_index_val->num_elements()]), data_j_index_val->data());
+
+      domain_hdl->data_j_index.setValue(data_j_index_val);
+   }
+    
+   void xios_set_domain_lonvalue(XDomainPtr domain_hdl, double * lonvalue, int lonvalue_extent1)
+   {
+      ARRAY(double, 1) lonvalue_val(new CArray<double, 1>(boost::extents [lonvalue_extent1]));
+      std::copy(lonvalue, &(lonvalue[lonvalue_val->num_elements()]), lonvalue_val->data());
+
+      domain_hdl->lonvalue.setValue(lonvalue_val);
+   }
+   
+   void xios_set_domain_latvalue(XDomainPtr domain_hdl, double * latvalue, int latvalue_extent1)
+   {
+      ARRAY(double, 1) latvalue_val(new CArray<double, 1>(boost::extents [latvalue_extent1]));
+      std::copy(latvalue, &(latvalue[latvalue_val->num_elements()]), latvalue_val->data());
+
+      domain_hdl->latvalue.setValue(latvalue_val);
+   }   
+   
+   // -------------------- Attributs des groupes d'axes ------------------------
+   
+   
+   void xios_set_domaingroup_name(XDomainGroupPtr domaingroup_hdl, const char * name, int name_size)
+   {
+      std::string name_str; 
+      if (!cstr2string(name, name_size, name_str)) return;
+
+      domaingroup_hdl->name.setValue(name_str);
+   }
+   
+   void xios_set_domaingroup_standard_name(XDomainGroupPtr domaingroup_hdl, const char * standard_name, int standard_name_size)
+   {
+      std::string standard_name_str; 
+      if (!cstr2string(standard_name, standard_name_size, standard_name_str)) return;
+
+      domaingroup_hdl->standard_name.setValue(standard_name_str);
+   }
+   
+   void xios_set_domaingroup_long_name(XDomainGroupPtr domaingroup_hdl, const char * long_name, int long_name_size)
+   {
+      std::string long_name_str; 
+      if (!cstr2string(long_name, long_name_size, long_name_str)) return;
+
+      domaingroup_hdl->long_name.setValue(long_name_str);
+   }
+   
+   void xios_set_domaingroup_domain_group_ref(XDomainGroupPtr domaingroup_hdl, const char * domain_group_ref, int domain_group_ref_size)
+   {
+      std::string domain_group_ref_str; 
+      if (!cstr2string(domain_group_ref, domain_group_ref_size, domain_group_ref_str)) return;
+
+      domaingroup_hdl->domain_group_ref.setValue(domain_group_ref_str);
+   }
+   
+   void xios_set_domaingroup_ni_glo(XDomainGroupPtr domaingroup_hdl, int ni_glo)
+   {
+      domaingroup_hdl->ni_glo.setValue(ni_glo);
+   }
+   
+   void xios_set_domaingroup_nj_glo(XDomainGroupPtr domaingroup_hdl, int nj_glo)
+   {
+      domaingroup_hdl->nj_glo.setValue(nj_glo);
+   }
+   
+   void xios_set_domaingroup_ibegin(XDomainGroupPtr domaingroup_hdl, int ibegin)
+   {
+      domaingroup_hdl->ibegin.setValue(ibegin);
+   }
+   
+   void xios_set_domaingroup_iend(XDomainGroupPtr domaingroup_hdl, int iend)
+   {
+      domaingroup_hdl->iend.setValue(iend);
+   }
+   
+   void xios_set_domaingroup_ni(XDomainGroupPtr domaingroup_hdl, int ni)
+   {
+      domaingroup_hdl->ni.setValue(ni);
+   }
+   
+   void xios_set_domaingroup_jbegin(XDomainGroupPtr domaingroup_hdl, int jbegin)
+   {
+      domaingroup_hdl->jbegin.setValue(jbegin);
+   }
+   
+   void xios_set_domaingroup_jend(XDomainGroupPtr domaingroup_hdl, int jend)
+   {
+      domaingroup_hdl->jend.setValue(jend);
+   }
+   
+   void xios_set_domaingroup_nj(XDomainGroupPtr domaingroup_hdl, int nj)
+   {
+      domaingroup_hdl->nj.setValue(nj);
+   }
+   
+   void xios_set_domaingroup_mask(XDomainGroupPtr domaingroup_hdl, bool * mask, int mask_extent1, int mask_extent2)
+   {
+      ARRAY(bool, 2) mask_val(new CArray<bool, 2>(boost::extents [mask_extent1][mask_extent2]));
+      std::copy(mask, &(mask[mask_val->num_elements()]), mask_val->data());
+
+      domaingroup_hdl->mask.setValue(mask_val);
+   }
+   
+   void xios_set_domaingroup_data_dim(XDomainGroupPtr domaingroup_hdl, int data_dim)
+   {
+      domaingroup_hdl->data_dim.setValue(data_dim);
+   }
+   
+   void xios_set_domaingroup_data_ni(XDomainGroupPtr domaingroup_hdl, int data_ni)
+   {
+      domaingroup_hdl->data_ni.setValue(data_ni);
+   }
+   
+   void xios_set_domaingroup_data_nj(XDomainGroupPtr domaingroup_hdl, int data_nj)
+   {
+      domaingroup_hdl->data_nj.setValue(data_nj);
+   }
+   
+   void xios_set_domaingroup_data_ibegin(XDomainGroupPtr domaingroup_hdl, int data_ibegin)
+   {
+      domaingroup_hdl->data_ibegin.setValue(data_ibegin);
+   }
+   
+   void xios_set_domaingroup_data_jbegin(XDomainGroupPtr domaingroup_hdl, int data_jbegin)
+   {
+      domaingroup_hdl->data_jbegin.setValue(data_jbegin);
+   }
+   
+   void xios_set_domaingroup_zoom_ni(XDomainGroupPtr domaingroup_hdl, int zoom_ni)
+   {
+      domaingroup_hdl->zoom_ni.setValue(zoom_ni);
+   }
+   
+   void xios_set_domaingroup_zoom_nj(XDomainGroupPtr domaingroup_hdl, int zoom_nj)
+   {
+      domaingroup_hdl->zoom_nj.setValue(zoom_nj);
+   }
+   
+   void xios_set_domaingroup_zoom_ibegin(XDomainGroupPtr domaingroup_hdl, int zoom_ibegin)
+   {
+      domaingroup_hdl->zoom_ibegin.setValue(zoom_ibegin);
+   }
+    
+   void xios_set_domaingroup_zoom_jbegin(XDomainGroupPtr domaingroup_hdl, int zoom_jbegin)
+   {
+      domaingroup_hdl->zoom_jbegin.setValue(zoom_jbegin);
+   }
+   
+   void xios_set_domaingroup_zoom_ni_loc(XDomainGroupPtr domaingroup_hdl, int zoom_ni_loc)
+   {
+      domaingroup_hdl->zoom_ni_loc.setValue(zoom_ni_loc);
+   }
+   
+   void xios_set_domaingroup_zoom_nj_loc(XDomainGroupPtr domaingroup_hdl, int zoom_nj_loc)
+   {
+      domaingroup_hdl->zoom_nj_loc.setValue(zoom_nj_loc);
+   }
+   
+   void xios_set_domaingroup_zoom_ibegin_loc(XDomainGroupPtr domaingroup_hdl, int zoom_ibegin_loc)
+   {
+      domaingroup_hdl->zoom_ibegin_loc.setValue(zoom_ibegin_loc);
+   }
+   
+   void xios_set_domaingroup_zoom_jbegin_loc(XDomainGroupPtr domaingroup_hdl, int zoom_jbegin_loc)
+   {
+      domaingroup_hdl->zoom_jbegin_loc.setValue(zoom_jbegin_loc);
+   }
+   
+   void xios_set_domaingroup_data_n_index(XDomainGroupPtr domaingroup_hdl, int data_n_index)
+   {
+      domaingroup_hdl->data_n_index.setValue(data_n_index);
+   }
+   
+   void xios_set_domaingroup_data_i_index(XDomainGroupPtr domaingroup_hdl, int * data_i_index, int data_i_index_extent1)
+   {
+      ARRAY(int, 1) data_i_index_val(new CArray<int, 1>(boost::extents [data_i_index_extent1]));
+      std::copy(data_i_index, &(data_i_index[data_i_index_val->num_elements()]), data_i_index_val->data());
+
+      domaingroup_hdl->data_i_index.setValue(data_i_index_val);
+   }
+   
+   void xios_set_domaingroup_data_j_index(XDomainGroupPtr domaingroup_hdl, int * data_j_index, int data_j_index_extent1)
+   {
+      ARRAY(int, 1) data_j_index_val(new CArray<int, 1>(boost::extents [data_j_index_extent1]));
+      std::copy(data_j_index, &(data_j_index[data_j_index_val->num_elements()]), data_j_index_val->data());
+
+      domaingroup_hdl->data_j_index.setValue(data_j_index_val);
+   }
+    
+   void xios_set_domaingroup_lonvalue(XDomainGroupPtr domaingroup_hdl, double * lonvalue, int lonvalue_extent1)
+   {
+      ARRAY(double, 1) lonvalue_val(new CArray<double, 1>(boost::extents [lonvalue_extent1]));
+      std::copy(lonvalue, &(lonvalue[lonvalue_val->num_elements()]), lonvalue_val->data());
+
+      domaingroup_hdl->lonvalue.setValue(lonvalue_val);
+   }
+   
+   void xios_set_domaingroup_latvalue(XDomainGroupPtr domaingroup_hdl, double * latvalue, int latvalue_extent1)
+   {
+      ARRAY(double, 1) latvalue_val(new CArray<double, 1>(boost::extents [latvalue_extent1]));
+      std::copy(latvalue, &(latvalue[latvalue_val->num_elements()]), latvalue_val->data());
+
+      domaingroup_hdl->latvalue.setValue(latvalue_val);
+   }  
+   
+   // ------------------------ CrÃ©ation des handle -----------------------------
+   
+   void xios_domain_handle_create (XDomainPtr * _ret, const char * _id, int _id_len)
+   {
+      std::string id; 
+      if (!cstr2string(_id, _id_len, id)) return;
+
+      *_ret = xmlioserver::CObjectFactory::GetObject<xmlioserver::tree::CDomain>(id).get();
+   }
+   
+   void xios_domaingroup_handle_create (XDomainGroupPtr * _ret, const char * _id, int _id_len)
+   {
+      std::string id; 
+      if (!cstr2string(_id, _id_len, id)) return;
+
+      *_ret = xmlioserver::CObjectFactory::GetObject<xmlioserver::tree::CDomainGroup>(id).get();
+   }
+   
+} // extern "C"
Index: XMLIO_V2/dev/common/src/xmlio/fortran/icfield.cpp
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/fortran/icfield.cpp	(revision 274)
+++ XMLIO_V2/dev/common/src/xmlio/fortran/icfield.cpp	(revision 274)
@@ -0,0 +1,247 @@
+/* ************************************************************************** *
+ *      Copyright Â© IPSL/LSCE, XMLIOServer, Avril 2010 - Octobre 2011         *
+ * ************************************************************************** */
+
+#include <boost/multi_array.hpp>
+#include <boost/shared_ptr.hpp>
+
+#include "xmlioserver.hpp"
+
+#include "attribute_template_impl.hpp"
+#include "object_template_impl.hpp"
+#include "group_template_impl.hpp"
+
+#include "icutil.hpp"
+
+extern "C"
+{
+// /////////////////////////////// DÃ©finitions ////////////////////////////// //
+
+   // ----------------------- RedÃ©finition de types ----------------------------
+   
+   typedef xmlioserver::tree::CField      * XFieldPtr;
+   typedef xmlioserver::tree::CFieldGroup * XFieldGroupPtr;
+
+   // ------------------------- Attributs des champs ---------------------------
+   
+   void xios_set_field_name(XFieldPtr field_hdl, const char * name, int name_size)
+   {
+      std::string name_str; 
+      if (!cstr2string(name, name_size, name_str)) return;
+
+      field_hdl->name.setValue(name_str);
+   }
+   
+   void xios_set_field_standard_name(XFieldPtr field_hdl, const char * standard_name, int standard_name_size)
+   {
+      std::string standard_name_str; 
+      if (!cstr2string(standard_name, standard_name_size, standard_name_str)) return;
+
+      field_hdl->standard_name.setValue(standard_name_str);
+   }
+   
+   void xios_set_field_long_name(XFieldPtr field_hdl, const char * long_name, int long_name_size)
+   {
+      std::string long_name_str; 
+      if (!cstr2string(long_name, long_name_size, long_name_str)) return;
+
+      field_hdl->long_name.setValue(long_name_str);
+   }
+   
+   void xios_set_field_unit(XFieldPtr field_hdl, const char * unit, int unit_size)
+   {
+      std::string unit_str; 
+      if (!cstr2string(unit, unit_size, unit_str)) return;
+
+      field_hdl->unit.setValue(unit_str);
+   }
+   
+   void xios_set_field_operation(XFieldPtr field_hdl, const char * operation, int operation_size) 
+   {
+      std::string operation_str; 
+      if (!cstr2string(operation, operation_size, operation_str)) return;
+
+      field_hdl->operation.setValue(operation_str);
+   }
+   
+   void xios_set_field_freq_op(XFieldPtr field_hdl, const char * freq_op, int freq_op_size)
+   {
+      std::string freq_op_str; 
+      if (!cstr2string(freq_op, freq_op_size, freq_op_str)) return;
+
+      field_hdl->freq_op.setValue(freq_op_str);
+   }
+   
+   void xios_set_field_level(XFieldPtr field_hdl, int level)
+   {
+      field_hdl->level.setValue(level);
+   }
+   
+   void xios_set_field_prec(XFieldPtr field_hdl, int prec)
+   {
+      field_hdl->prec.setValue(prec);
+   }
+   
+   void xios_set_field_enabled(XFieldPtr field_hdl, bool enabled)
+   {
+      field_hdl->enabled.setValue(enabled);
+   }
+   
+   void xios_set_field_domain_ref(XFieldPtr field_hdl,  const char * domain_ref, int domain_ref_size)
+   {
+      std::string domain_ref_str; 
+      if (!cstr2string(domain_ref, domain_ref_size, domain_ref_str)) return;
+
+      field_hdl->domain_ref.setValue(domain_ref_str);
+   }
+   
+   void xios_set_field_axis_ref(XFieldPtr field_hdl,  const char * axis_ref,  int axis_ref_size)
+   {
+      std::string axis_ref_str; 
+      if (!cstr2string(axis_ref, axis_ref_size, axis_ref_str)) return;
+
+      field_hdl->axis_ref.setValue(axis_ref_str);
+   }
+   
+   void xios_set_field_grid_ref(XFieldPtr field_hdl,  const char * grid_ref, int grid_ref_size)
+   {
+      std::string grid_ref_str; 
+      if (!cstr2string(grid_ref, grid_ref_size, grid_ref_str)) return;
+
+      field_hdl->grid_ref.setValue(grid_ref_str);
+   }
+   
+   void xios_set_field_field_ref(XFieldPtr field_hdl,  const char * field_ref,  int field_ref_size)
+   {
+      std::string field_ref_str; 
+      if (!cstr2string(field_ref, field_ref_size, field_ref_str)) return;
+
+      field_hdl->field_ref.setValue(field_ref_str);
+   }
+   
+   void xios_set_field_default_value(XFieldPtr field_hdl, double default_value)
+   {
+      field_hdl->default_value.setValue(default_value);
+   }  
+   
+   // -------------------- Attributs des groupes de champs ---------------------
+  
+   void xios_set_fieldgroup_name(XFieldGroupPtr fieldgroup_hdl, const char * name, int name_size)
+   {
+      std::string name_str; 
+      if (!cstr2string(name, name_size, name_str)) return;
+
+      fieldgroup_hdl->name.setValue(name_str);
+   }
+   
+   void xios_set_fieldgroup_standard_name(XFieldGroupPtr fieldgroup_hdl, const char * standard_name, int standard_name_size)
+   {
+      std::string standard_name_str; 
+      if (!cstr2string(standard_name, standard_name_size, standard_name_str)) return;
+
+      fieldgroup_hdl->standard_name.setValue(standard_name_str);
+   }
+   
+   void xios_set_fieldgroup_long_name(XFieldGroupPtr fieldgroup_hdl, const char * long_name, int long_name_size)
+   {
+      std::string long_name_str; 
+      if (!cstr2string(long_name, long_name_size, long_name_str)) return;
+
+      fieldgroup_hdl->long_name.setValue(long_name_str);
+   }
+   
+   void xios_set_fieldgroup_unit(XFieldGroupPtr fieldgroup_hdl, const char * unit, int unit_size)
+   {
+      std::string unit_str; 
+      if (!cstr2string(unit, unit_size, unit_str)) return;
+
+      fieldgroup_hdl->unit.setValue(unit_str);
+   }
+   
+   void xios_set_fieldgroup_operation(XFieldGroupPtr fieldgroup_hdl, const char * operation, int operation_size) 
+   {
+      std::string operation_str; 
+      if (!cstr2string(operation, operation_size, operation_str)) return;
+
+      fieldgroup_hdl->operation.setValue(operation_str);
+   }
+   
+   void xios_set_fieldgroup_freq_op(XFieldGroupPtr fieldgroup_hdl, const char * freq_op, int freq_op_size)
+   {
+      std::string freq_op_str; 
+      if (!cstr2string(freq_op, freq_op_size, freq_op_str)) return;
+
+      fieldgroup_hdl->freq_op.setValue(freq_op_str);
+   }
+   
+   void xios_set_fieldgroup_level(XFieldGroupPtr fieldgroup_hdl, int level)
+   {
+      fieldgroup_hdl->level.setValue(level);
+   }
+   
+   void xios_set_fieldgroup_prec(XFieldGroupPtr fieldgroup_hdl, int prec)
+   {
+      fieldgroup_hdl->prec.setValue(prec);
+   }
+   
+   void xios_set_fieldgroup_enabled(XFieldGroupPtr fieldgroup_hdl, bool enabled)
+   {
+      fieldgroup_hdl->enabled.setValue(enabled);
+   }
+   
+   void xios_set_fieldgroup_domain_ref(XFieldGroupPtr fieldgroup_hdl,  const char * domain_ref, int domain_ref_size)
+   {
+      std::string domain_ref_str; 
+      if (!cstr2string(domain_ref, domain_ref_size, domain_ref_str)) return;
+
+      fieldgroup_hdl->domain_ref.setValue(domain_ref_str);
+   }
+   
+   void xios_set_fieldgroup_axis_ref(XFieldGroupPtr fieldgroup_hdl,  const char * axis_ref,  int axis_ref_size)
+   {
+      std::string axis_ref_str; 
+      if (!cstr2string(axis_ref, axis_ref_size, axis_ref_str)) return;
+
+      fieldgroup_hdl->axis_ref.setValue(axis_ref_str);
+   }
+   
+   void xios_set_fieldgroup_grid_ref(XFieldGroupPtr fieldgroup_hdl,  const char * grid_ref, int grid_ref_size)
+   {
+      std::string grid_ref_str; 
+      if (!cstr2string(grid_ref, grid_ref_size, grid_ref_str)) return;
+
+      fieldgroup_hdl->grid_ref.setValue(grid_ref_str);
+   }
+   
+   void xios_set_fieldgroup_field_ref(XFieldGroupPtr fieldgroup_hdl,  const char * field_ref,  int field_ref_size)
+   {
+      std::string field_ref_str; 
+      if (!cstr2string(field_ref, field_ref_size, field_ref_str)) return;
+
+      fieldgroup_hdl->field_ref.setValue(field_ref_str);
+   }
+   
+   void xios_set_fieldgroup_default_value(XFieldGroupPtr fieldgroup_hdl, double default_value)
+   {
+      fieldgroup_hdl->default_value.setValue(default_value);
+   }  
+   
+   // ------------------------ CrÃ©ation des handle -----------------------------
+   
+   void xios_field_handle_create (XFieldPtr * _ret, const char * _id, int _id_len)
+   {
+      std::string id; 
+      if (!cstr2string(_id, _id_len, id)) return;
+
+      *_ret = xmlioserver::CObjectFactory::GetObject<xmlioserver::tree::CField>(id).get();
+   }
+   
+   void xios_fieldgroup_handle_create (XFieldGroupPtr * _ret, const char * _id, int _id_len)
+   {
+      std::string id; 
+      if (!cstr2string(_id, _id_len, id)) return;
+
+      *_ret = xmlioserver::CObjectFactory::GetObject<xmlioserver::tree::CFieldGroup>(id).get();
+   }
+   
+} // extern "C"
Index: XMLIO_V2/dev/common/src/xmlio/fortran/icfile.cpp
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/fortran/icfile.cpp	(revision 274)
+++ XMLIO_V2/dev/common/src/xmlio/fortran/icfile.cpp	(revision 274)
@@ -0,0 +1,116 @@
+/* ************************************************************************** *
+ *      Copyright Â© IPSL/LSCE, XMLIOServer, Avril 2010 - Octobre 2011         *
+ * ************************************************************************** */
+
+#include <boost/multi_array.hpp>
+#include <boost/shared_ptr.hpp>
+
+#include "xmlioserver.hpp"
+
+#include "attribute_template_impl.hpp"
+#include "object_template_impl.hpp"
+#include "group_template_impl.hpp"
+
+#include "icutil.hpp"
+
+extern "C"
+{
+// /////////////////////////////// DÃ©finitions ////////////////////////////// //
+
+   // ----------------------- RedÃ©finition de types ----------------------------
+   
+   typedef xmlioserver::tree::CFile      * XFilePtr;
+   typedef xmlioserver::tree::CFileGroup * XFileGroupPtr;
+
+   // ------------------------- Attributs des axes -----------------------------
+   
+   void xios_set_file_name(XFilePtr file_hdl, const char * name, int name_size)
+   {
+      std::string name_str; 
+      if (!cstr2string(name, name_size, name_str)) return;
+
+      file_hdl->name.setValue(name_str);
+   }
+   
+   void xios_set_file_description(XFilePtr file_hdl, const char * description, int description_size)
+   {
+      std::string description_str; 
+      if (!cstr2string(description, description_size, description_str)) return;
+
+      file_hdl->description.setValue(description_str);
+   } 
+   
+   void xios_set_file_output_freq(XFilePtr file_hdl, const char * output_freq, int output_freq_size)
+   {
+      std::string output_freq_str; 
+      if (!cstr2string(output_freq, output_freq_size, output_freq_str)) return;
+
+      file_hdl->output_freq.setValue(output_freq_str);
+   }
+   
+   void xios_set_file_output_level(XFilePtr file_hdl, int output_level)
+   {
+      file_hdl->output_level.setValue(output_level);
+   }
+   
+   void xios_set_file_enabled(XFilePtr file_hdl, bool enabled)
+   {
+      file_hdl->enabled.setValue(enabled);
+   }
+   
+   // -------------------- Attributs des groupes d'axes ------------------------
+   
+   void xios_set_filegroup_name(XFileGroupPtr filegroup_hdl, const char * name, int name_size)
+   {
+      std::string name_str; 
+      if (!cstr2string(name, name_size, name_str)) return;
+      if (!cstr2string(name, name_size, name_str)) return;
+
+      filegroup_hdl->name.setValue(name_str);
+   }
+   
+   void xios_set_filegroup_description(XFileGroupPtr filegroup_hdl, const char * description, int description_size)
+   {
+      std::string description_str; 
+      if (!cstr2string(description, description_size, description_str)) return;
+
+      filegroup_hdl->description.setValue(description_str);
+   } 
+   
+   void xios_set_filegroup_output_freq(XFileGroupPtr filegroup_hdl, const char * output_freq, int output_freq_size)
+   {
+      std::string output_freq_str; 
+      if (!cstr2string(output_freq, output_freq_size, output_freq_str)) return;
+
+      filegroup_hdl->output_freq.setValue(output_freq_str);
+   }
+   
+   void xios_set_filegroup_output_level(XFileGroupPtr filegroup_hdl, int output_level)
+   {
+      filegroup_hdl->output_level.setValue(output_level);
+   }
+   
+   void xios_set_filegroup_enabled(XFileGroupPtr filegroup_hdl, bool enabled)
+   {
+      filegroup_hdl->enabled.setValue(enabled);
+   }
+   
+   // ------------------------ CrÃ©ation des handle -----------------------------
+   
+   void xios_file_handle_create (XFilePtr * _ret, const char * _id, int _id_len)
+   {
+      std::string id; 
+      if (!cstr2string(_id, _id_len, id)) return;
+
+      *_ret = xmlioserver::CObjectFactory::GetObject<xmlioserver::tree::CFile>(id).get();
+   }
+   
+   void xios_filegroup_handle_create (XFileGroupPtr * _ret, const char * _id, int _id_len)
+   {
+      std::string id; 
+      if (!cstr2string(_id, _id_len, id)) return;
+
+      *_ret = xmlioserver::CObjectFactory::GetObject<xmlioserver::tree::CFileGroup>(id).get();
+   }
+   
+} // extern "C"
Index: XMLIO_V2/dev/common/src/xmlio/fortran/icgrid.cpp
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/fortran/icgrid.cpp	(revision 274)
+++ XMLIO_V2/dev/common/src/xmlio/fortran/icgrid.cpp	(revision 274)
@@ -0,0 +1,111 @@
+/* ************************************************************************** *
+ *      Copyright Â© IPSL/LSCE, XMLIOServer, Avril 2010 - Octobre 2011         *
+ * ************************************************************************** */
+
+#include <boost/multi_array.hpp>
+#include <boost/shared_ptr.hpp>
+
+#include "xmlioserver.hpp"
+
+#include "attribute_template_impl.hpp"
+#include "object_template_impl.hpp"
+#include "group_template_impl.hpp"
+
+#include "icutil.hpp"
+
+extern "C"
+{
+// /////////////////////////////// DÃ©finitions ////////////////////////////// //
+
+   // ----------------------- RedÃ©finition de types ----------------------------
+   
+   typedef xmlioserver::tree::CGrid      * XGridPtr;
+   typedef xmlioserver::tree::CGridGroup * XGridGroupPtr;
+
+   // ------------------------- Attributs des axes -----------------------------
+   
+   void xios_set_grid_name(XGridPtr grid_hdl, const char * name,  int name_size)
+   {
+      std::string name_str; 
+      if (!cstr2string(name, name_size, name_str)) return;
+
+      grid_hdl->name.setValue(name_str);
+   }
+   
+   void xios_set_grid_description(XGridPtr grid_hdl, const char * description,  int description_size)
+   {
+      std::string description_str; 
+      if (!cstr2string(description, description_size, description_str)) return;
+
+      grid_hdl->description.setValue(description_str);
+   }
+   
+   void xios_set_grid_domain_ref(XGridPtr grid_hdl, const char * domain_ref,  int domain_ref_size)
+   {
+      std::string domain_ref_str; 
+      if (!cstr2string(domain_ref, domain_ref_size, domain_ref_str)) return;
+
+      grid_hdl->domain_ref.setValue(domain_ref_str);
+   }
+   
+   void xios_set_grid_axis_ref(XGridPtr grid_hdl, const char * axis_ref,  int axis_ref_size)
+   {
+      std::string axis_ref_str; 
+      if (!cstr2string(axis_ref, axis_ref_size, axis_ref_str)) return;
+
+     grid_hdl->axis_ref.setValue(axis_ref_str);
+   }
+   
+   // -------------------- Attributs des groupes de grilles --------------------
+   
+   void xios_set_gridgroup_name(XGridGroupPtr gridgroup_hdl, const char * name,  int name_size)
+   {
+      std::string name_str; 
+      if (!cstr2string(name, name_size, name_str)) return;
+
+      gridgroup_hdl->name.setValue(name_str);
+   }
+   
+   void xios_set_gridgroup_description(XGridGroupPtr gridgroup_hdl, const char * description,  int description_size)
+   {
+      std::string description_str; 
+      if (!cstr2string(description, description_size, description_str)) return;
+
+      gridgroup_hdl->description.setValue(description_str);
+   }
+   
+   void xios_set_gridgroup_domain_ref(XGridGroupPtr gridgroup_hdl, const char * domain_ref,  int domain_ref_size)
+   {
+      std::string domain_ref_str; 
+      if (!cstr2string(domain_ref, domain_ref_size, domain_ref_str)) return;
+
+      gridgroup_hdl->domain_ref.setValue(domain_ref_str);
+   }
+   
+   void xios_set_gridgroup_axis_ref(XGridGroupPtr gridgroup_hdl, const char * axis_ref,  int axis_ref_size)
+   {
+      std::string axis_ref_str; 
+      if (!cstr2string(axis_ref, axis_ref_size, axis_ref_str)) return;
+
+      gridgroup_hdl->axis_ref.setValue(axis_ref_str);
+   }
+   
+   // ------------------------ CrÃ©ation des handle -----------------------------
+  
+   void xios_grid_handle_create (XGridPtr * _ret, const char * _id, int _id_len)
+   {
+      std::string id; 
+      if (!cstr2string(_id, _id_len, id)) return;
+
+      *_ret = xmlioserver::CObjectFactory::GetObject<xmlioserver::tree::CGrid>(id).get();
+   }
+   
+   void xios_gridgroup_handle_create (XGridGroupPtr * _ret, const char * _id, int _id_len)
+   {
+      std::string id; 
+      if (!cstr2string(_id, _id_len, id)) return;
+
+      *_ret = xmlioserver::CObjectFactory::GetObject<xmlioserver::tree::CGridGroup>(id).get();
+   }
+
+} // extern "C"
Index: XMLIO_V2/dev/common/src/xmlio/fortran/icontext.f90
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/fortran/icontext.f90	(revision 274)
+++ XMLIO_V2/dev/common/src/xmlio/fortran/icontext.f90	(revision 274)
@@ -0,0 +1,82 @@
+MODULE ICONTEXT
+   USE, INTRINSIC :: ISO_C_BINDING
+   USE CONTEXT_INTERFACE
+   USE IDATE
+   
+   TYPE XContextHandle
+      INTEGER(kind = C_INTPTR_T) :: daddr
+   END TYPE XContextHandle
+      
+   !----------------------------------------------------------------------------
+   INTERFACE set_context_attributes
+      MODULE PROCEDURE set_context_attributes_id,set_context_attributes_hdl
+   END INTERFACE  
+   !----------------------------------------------------------------------------
+   
+   CONTAINS ! Fonctions disponibles pour les utilisateurs.
+   
+   SUBROUTINE set_context_attributes_id( context_id, calendar_type_, start_date_, output_dir_)
+      IMPLICIT NONE
+      TYPE(XContextHandle)                       :: context_hdl
+      CHARACTER(len = *)            , INTENT(IN) :: context_id
+      CHARACTER(len = *)  , OPTIONAL, INTENT(IN) :: calendar_type_
+      CHARACTER(len = *)  , OPTIONAL, INTENT(IN) :: start_date_
+      CHARACTER(len = *)  , OPTIONAL, INTENT(IN) :: output_dir_
+         
+      CALL context_handle_create(context_hdl, context_id)
+      CALL set_context_attributes_hdl( context_hdl, calendar_type_, start_date_, output_dir_)
+   END SUBROUTINE set_context_attributes_id
+
+   SUBROUTINE set_context_attributes_hdl( context_hdl, calendar_type_, start_date_, output_dir_)
+      IMPLICIT NONE
+      TYPE(XContextHandle)          , INTENT(IN) :: context_hdl
+      CHARACTER(len = *)  , OPTIONAL, INTENT(IN) :: calendar_type_
+      CHARACTER(len = *)  , OPTIONAL, INTENT(IN) :: start_date_
+      CHARACTER(len = *)  , OPTIONAL, INTENT(IN) :: output_dir_   
+         
+      IF (PRESENT(calendar_type_)) THEN
+         CALL xios_set_context_calendar_type(context_hdl%daddr, calendar_type_, len(calendar_type_))
+      END IF
+      IF (PRESENT(start_date_))    THEN
+         CALL xios_set_context_start_date(context_hdl%daddr, start_date_, len(start_date_))
+      END IF
+      IF (PRESENT(output_dir_))    THEN
+         CALL xios_set_context_output_dir(context_hdl%daddr, output_dir_, len(output_dir_))
+      END IF
+   END SUBROUTINE set_context_attributes_hdl
+
+   SUBROUTINE context_handle_create(ret, idt)
+      IMPLICIT NONE
+      TYPE(XContextHandle), INTENT(OUT):: ret
+      CHARACTER(len = *)  , INTENT(IN) :: idt      
+      CALL xios_context_handle_create(ret%daddr, idt, len(idt))            
+   END SUBROUTINE context_handle_create
+   
+   SUBROUTINE context_set_current(context, withswap)
+      TYPE(XContextHandle)          , INTENT(IN) :: context
+      LOGICAL             , OPTIONAL, INTENT(IN) :: withswap
+      LOGICAL (kind = 1)                       :: wswap
+      IF (PRESENT(withswap)) THEN
+         wswap = withswap
+      ELSE
+         wswap = .FALSE.
+      END IF
+      CALL xios_context_set_current(context%daddr, wswap)
+   END SUBROUTINE context_set_current
+   
+   SUBROUTINE context_create(context_hdl, context_id, calendar_type, init_date)
+      TYPE(XContextHandle)          , INTENT(OUT) :: context_hdl
+      CHARACTER(len = *)            , INTENT(IN)  :: context_id
+      INTEGER                       , INTENT(IN)  :: calendar_type
+      TYPE(XDate)         , OPTIONAL, INTENT(IN)  :: init_date
+      IF (PRESENT(init_date)) THEN
+         CALL xios_context_create(context_hdl%daddr, context_id, len(context_id), calendar_type, &
+                                  init_date%year, init_date%month, init_date%day, &
+                                  init_date%hour, init_date%minute, init_date%second)
+      ELSE
+         CALL xios_context_create(context_hdl%daddr, context_id, len(context_id), calendar_type, &
+                                 0, 1, 1, 0, 0, 0)
+      END IF
+   END SUBROUTINE context_create
+   
+END MODULE ICONTEXT
Index: XMLIO_V2/dev/common/src/xmlio/fortran/icutil.hpp
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/fortran/icutil.hpp	(revision 274)
+++ XMLIO_V2/dev/common/src/xmlio/fortran/icutil.hpp	(revision 274)
@@ -0,0 +1,31 @@
+/* ************************************************************************** *
+ *      Copyright Â© IPSL/LSCE, XMLIOServer, Avril 2010 - Octobre 2011         *
+ * ************************************************************************** */
+
+
+#ifndef __ICUTIL_HPP__
+#define __ICUTIL_HPP__
+
+#include <string>
+
+// ///////////////////////// DÃ©finitions/DÃ©clarations /////////////////////// //
+
+inline bool cstr2string(const char * cstr, int cstr_size, std::string & str)
+{
+  std::string valtemp;
+  std::size_t d, f = 0;
+  if (cstr_size != -1) 
+  { 
+     valtemp.append (cstr, cstr_size);
+     d = valtemp.find_first_not_of(' ');
+     f = valtemp.find_last_not_of (' ');
+     str = valtemp.substr(d, f-d+1); 
+     return (true);
+  }
+  else
+  {
+     return (false);
+  }  
+}
+
+#endif // __ICUTIL_HPP__
Index: XMLIO_V2/dev/common/src/xmlio/fortran/icxml_tree.cpp
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/fortran/icxml_tree.cpp	(revision 274)
+++ XMLIO_V2/dev/common/src/xmlio/fortran/icxml_tree.cpp	(revision 274)
@@ -0,0 +1,262 @@
+/* ************************************************************************** *
+ *      Copyright Â© IPSL/LSCE, XMLIOServer, Avril 2010 - Octobre 2011         *
+ * ************************************************************************** */
+
+#include <boost/multi_array.hpp>
+#include <boost/shared_ptr.hpp>
+
+#include "xmlioserver.hpp"
+
+#include "attribute_template_impl.hpp"
+#include "object_template_impl.hpp"
+#include "group_template_impl.hpp"
+
+#include "icutil.hpp"
+
+extern "C"
+{
+// /////////////////////////////// DÃ©finitions ////////////////////////////// //
+
+   // ----------------------- RedÃ©finition de types ----------------------------
+
+   typedef xmlioserver::tree::CContext * XContextPtr;
+
+   typedef xmlioserver::tree::CGrid      * XGridPtr;
+   typedef xmlioserver::tree::CGridGroup * XGridGroupPtr;
+
+   typedef xmlioserver::tree::CFile      * XFilePtr;
+   typedef xmlioserver::tree::CFileGroup * XFileGroupPtr;
+
+   typedef xmlioserver::tree::CField      * XFieldPtr;
+   typedef xmlioserver::tree::CFieldGroup * XFieldGroupPtr;
+
+   typedef xmlioserver::tree::CDomain      * XDomainPtr;
+   typedef xmlioserver::tree::CDomainGroup * XDomainGroupPtr;
+
+   typedef xmlioserver::tree::CAxis      * XAxisPtr;
+   typedef xmlioserver::tree::CAxisGroup * XAxisGroupPtr;
+   
+   // ----------------------- Ajout d'enfant Ã  un parent -----------------------
+   
+   void xios_xml_tree_add_field
+      (XFieldGroupPtr  parent_, XFieldPtr * child_, const char * child_id, int child_id_size)
+   {
+      std::string child_id_str; 
+      boost::shared_ptr<xmlioserver::tree::CFieldGroup> fieldgroup =
+         xmlioserver::CObjectFactory::GetObject<xmlioserver::tree::CFieldGroup>(parent_);
+
+      if (cstr2string(child_id, child_id_size, child_id_str))
+         *child_ = xmlioserver::CGroupFactory::CreateChild(fieldgroup, child_id_str).get();
+      else
+         *child_ = xmlioserver::CGroupFactory::CreateChild(fieldgroup).get();
+   }
+   
+   void xios_xml_tree_add_grid
+      (XGridGroupPtr   parent_, XGridPtr * child_, const char * child_id, int child_id_size)
+   {
+      std::string child_id_str; 
+      boost::shared_ptr<xmlioserver::tree::CGridGroup> gridgroup =
+         xmlioserver::CObjectFactory::GetObject<xmlioserver::tree::CGridGroup>(parent_);
+
+      if (cstr2string(child_id, child_id_size, child_id_str))
+         *child_ = xmlioserver::CGroupFactory::CreateChild(gridgroup, child_id_str).get();
+      else
+         *child_ = xmlioserver::CGroupFactory::CreateChild(gridgroup).get();
+   }
+   
+   void xios_xml_tree_add_file
+      (XFileGroupPtr parent_, XFilePtr * child_, const char * child_id, int child_id_size)
+   {
+      std::string child_id_str; 
+      boost::shared_ptr<xmlioserver::tree::CFileGroup> filegroup =
+         xmlioserver::CObjectFactory::GetObject<xmlioserver::tree::CFileGroup>(parent_);
+
+      if (cstr2string(child_id, child_id_size, child_id_str))
+         *child_ = xmlioserver::CGroupFactory::CreateChild(filegroup, child_id_str).get();
+      else
+         *child_ = xmlioserver::CGroupFactory::CreateChild(filegroup).get();
+   }
+   
+   void xios_xml_tree_add_axis
+      (XAxisGroupPtr parent_, XAxisPtr * child_, const char * child_id, int child_id_size)
+   {
+      std::string child_id_str; 
+      boost::shared_ptr<xmlioserver::tree::CAxisGroup> axisgroup =
+         xmlioserver::CObjectFactory::GetObject<xmlioserver::tree::CAxisGroup>(parent_);
+
+      if (cstr2string(child_id, child_id_size, child_id_str))
+         *child_ = xmlioserver::CGroupFactory::CreateChild(axisgroup, child_id_str).get();
+      else
+         *child_ = xmlioserver::CGroupFactory::CreateChild(axisgroup).get();
+   }
+   
+   void xios_xml_tree_add_domain
+      (XDomainGroupPtr parent_, XDomainPtr * child_, const char * child_id, int child_id_size)
+   {
+      std::string child_id_str; 
+      boost::shared_ptr<xmlioserver::tree::CDomainGroup> domaingroup =
+         xmlioserver::CObjectFactory::GetObject<xmlioserver::tree::CDomainGroup>(parent_);
+
+      if (cstr2string(child_id, child_id_size, child_id_str))
+         *child_ = xmlioserver::CGroupFactory::CreateChild(domaingroup, child_id_str).get();
+      else
+         *child_ = xmlioserver::CGroupFactory::CreateChild(domaingroup).get();
+   }
+   
+   void xios_xml_tree_add_fieldtofile
+      (XFilePtr parent_, XFieldPtr * child_, const char * child_id, int child_id_size)
+   {
+      std::string child_id_str; 
+      boost::shared_ptr<xmlioserver::tree::CFile> file =
+         xmlioserver::CObjectFactory::GetObject<xmlioserver::tree::CFile>(parent_);
+
+      if (file->getVirtualFieldGroup().get() == 0 )
+          file->setVirtualFieldGroup(file->getId());
+
+      if (cstr2string(child_id, child_id_size, child_id_str))
+         *child_ = xmlioserver::CGroupFactory::CreateChild(file->getVirtualFieldGroup(), child_id_str).get();
+      else
+         *child_ = xmlioserver::CGroupFactory::CreateChild(file->getVirtualFieldGroup()).get();
+   }
+
+   // ----------------------- Ajout de groupe Ã  un parent ----------------------
+
+   void xios_xml_tree_add_fieldgroup
+      (XFieldGroupPtr  parent_, XFieldGroupPtr * child_, const char * child_id, int child_id_size)
+   {
+      std::string child_id_str;
+      boost::shared_ptr<xmlioserver::tree::CFieldGroup> fieldgroup =
+         xmlioserver::CObjectFactory::GetObject<xmlioserver::tree::CFieldGroup>(parent_);
+
+      if (cstr2string(child_id, child_id_size, child_id_str))
+         *child_ = xmlioserver::CGroupFactory::CreateGroup(fieldgroup, child_id_str).get();
+      else
+         *child_ = xmlioserver::CGroupFactory::CreateGroup(fieldgroup).get();
+   }
+
+   void xios_xml_tree_add_gridgroup
+      (XGridGroupPtr   parent_, XGridGroupPtr * child_, const char * child_id, int child_id_size)
+   {
+      std::string child_id_str;
+      boost::shared_ptr<xmlioserver::tree::CGridGroup> gridgroup =
+         xmlioserver::CObjectFactory::GetObject<xmlioserver::tree::CGridGroup>(parent_);
+
+      if (cstr2string(child_id, child_id_size, child_id_str))
+         *child_ = xmlioserver::CGroupFactory::CreateGroup(gridgroup, child_id_str).get();
+      else
+         *child_ = xmlioserver::CGroupFactory::CreateGroup(gridgroup).get();
+   }
+
+   void xios_xml_tree_add_filegroup
+      (XFileGroupPtr parent_, XFileGroupPtr * child_, const char * child_id, int child_id_size)
+   {
+      std::string child_id_str;
+      boost::shared_ptr<xmlioserver::tree::CFileGroup> filegroup =
+         xmlioserver::CObjectFactory::GetObject<xmlioserver::tree::CFileGroup>(parent_);
+
+      if (cstr2string(child_id, child_id_size, child_id_str))
+         *child_ = xmlioserver::CGroupFactory::CreateGroup(filegroup, child_id_str).get();
+      else
+         *child_ = xmlioserver::CGroupFactory::CreateGroup(filegroup).get();
+   }
+
+   void xios_xml_tree_add_axisgroup
+      (XAxisGroupPtr parent_, XAxisGroupPtr * child_, const char * child_id, int child_id_size)
+   {
+      std::string child_id_str;
+      boost::shared_ptr<xmlioserver::tree::CAxisGroup> axisgroup =
+         xmlioserver::CObjectFactory::GetObject<xmlioserver::tree::CAxisGroup>(parent_);
+
+      if (cstr2string(child_id, child_id_size, child_id_str))
+         *child_ = xmlioserver::CGroupFactory::CreateGroup(axisgroup, child_id_str).get();
+      else
+         *child_ = xmlioserver::CGroupFactory::CreateGroup(axisgroup).get();
+   }
+
+   void xios_xml_tree_add_domaingroup
+      (XDomainGroupPtr parent_, XDomainGroupPtr * child_, const char * child_id, int child_id_size)
+   {
+      std::string child_id_str;
+      boost::shared_ptr<xmlioserver::tree::CDomainGroup> domaingroup =
+         xmlioserver::CObjectFactory::GetObject<xmlioserver::tree::CDomainGroup>(parent_);
+
+      if (cstr2string(child_id, child_id_size, child_id_str))
+         *child_ = xmlioserver::CGroupFactory::CreateGroup(domaingroup, child_id_str).get();
+      else
+         *child_ = xmlioserver::CGroupFactory::CreateGroup(domaingroup).get();
+   }
+
+   void xios_xml_tree_add_fieldgrouptofile
+      (XFilePtr parent_, XFieldGroupPtr * child_, const char * child_id, int child_id_size)
+   {
+      std::string child_id_str; 
+      boost::shared_ptr<xmlioserver::tree::CFile> file =
+         xmlioserver::CObjectFactory::GetObject<xmlioserver::tree::CFile>(parent_);
+
+      if (file->getVirtualFieldGroup().get() == 0 )
+          file->setVirtualFieldGroup(file->getId());
+      
+      if (cstr2string(child_id, child_id_size, child_id_str))
+         *child_ = xmlioserver::CGroupFactory::CreateGroup(file->getVirtualFieldGroup(), child_id_str).get();
+      else
+         *child_ = xmlioserver::CGroupFactory::CreateGroup(file->getVirtualFieldGroup()).get();
+   }
+   
+   
+   // ----------------------- Affichage de l'arborescence ----------------------
+   
+   void xios_xml_tree_show   (const char * filename, int filename_size) 
+   {
+      std::string filename_str;
+      try
+      {
+         if (cstr2string(filename, filename_size, filename_str))
+            xmlioserver::CTreeManager::PrintTreeToFile(filename_str);
+         else
+            xmlioserver::CTreeManager::PrintTreeToStream(std::clog);
+      }
+      catch (xmlioserver::CException & exc)
+      {
+         std::cerr << exc.getMessage() << std::endl;
+         exit (EXIT_FAILURE);
+      }
+   }
+     
+   
+   // ----------------------- Parsing de document xml --------------------------
+   
+   void xios_xml_parse_file  (const char * filename  , int filename_size)
+   {
+      std::string filename_str; 
+      if (!cstr2string(filename, filename_size, filename_str)) return;
+
+      try
+      {
+         xmlioserver::CTreeManager::ParseFile(filename_str);
+      }
+      catch (xmlioserver::CException & exc)
+      {
+         std::cerr << exc.getMessage() << std::endl;
+         exit (EXIT_FAILURE);
+      }
+   }
+   
+   void xios_xml_parse_string(const char * xmlcontent, int xmlcontent_size)
+   {
+      std::string xmlcontent_str; 
+      if (!cstr2string(xmlcontent, xmlcontent_size, xmlcontent_str)) return;
+
+      try
+      {
+         xmlioserver::CTreeManager::ParseString(xmlcontent_str);
+      }
+      catch (xmlioserver::CException & exc)
+      {
+         std::cerr << exc.getMessage() << std::endl;
+         exit (EXIT_FAILURE);
+      }
+   }
+   
+
+
+} // extern "C"
Index: XMLIO_V2/dev/common/src/xmlio/fortran/idata.f90
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/fortran/idata.f90	(revision 274)
+++ XMLIO_V2/dev/common/src/xmlio/fortran/idata.f90	(revision 274)
@@ -0,0 +1,144 @@
+MODULE IDATA
+   USE, INTRINSIC :: ISO_C_BINDING
+   USE ICONTEXT
+   
+   INTERFACE ! Ne pas appeler directement/Interface FORTRAN 2003 <-> C99
+
+      SUBROUTINE  xios_init_ioserver(comm_client) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INT) :: comm_client
+      END SUBROUTINE xios_init_ioserver
+
+      SUBROUTINE xios_dtreatment_start(context_hdl, filetype, comm_client_server, comm_server) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER (kind = C_INTPTR_T), VALUE :: context_hdl
+         INTEGER (kind = C_INT)     , VALUE :: filetype, comm_client_server, comm_server
+      END SUBROUTINE xios_dtreatment_start
+
+      SUBROUTINE xios_dtreatment_end() BIND(C)
+         ! Sans argument
+      END SUBROUTINE xios_dtreatment_end
+
+      SUBROUTINE xios_write_data_k81(fieldid, fieldid_size, data_k8, data_Xsize) BIND(C)
+         USE ISO_C_BINDING
+         CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: fieldid
+         REAL     (kind = C_DOUBLE), DIMENSION(*) :: data_k8
+         INTEGER  (kind = C_INT)   , VALUE        :: fieldid_size
+         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize
+      END SUBROUTINE xios_write_data_k81
+      
+      SUBROUTINE xios_write_data_k82(fieldid, fieldid_size, data_k8, data_Xsize, data_Ysize) BIND(C)
+         USE ISO_C_BINDING
+         CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: fieldid
+         REAL     (kind = C_DOUBLE), DIMENSION(*) :: data_k8
+         INTEGER  (kind = C_INT)   , VALUE        :: fieldid_size
+         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize, data_Ysize
+      END SUBROUTINE xios_write_data_k82
+      
+      SUBROUTINE xios_write_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
+         REAL     (kind = C_DOUBLE), DIMENSION(*) :: data_k8
+         INTEGER  (kind = C_INT)   , VALUE        :: fieldid_size
+         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize, data_Ysize, data_Zsize
+      END SUBROUTINE xios_write_data_k83
+      
+      SUBROUTINE xios_write_data_k41(fieldid, fieldid_size, data_k4, data_Xsize) BIND(C)
+         USE ISO_C_BINDING
+         CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: fieldid
+         REAL     (kind = C_FLOAT) , DIMENSION(*) :: data_k4
+         INTEGER  (kind = C_INT)   , VALUE        :: fieldid_size
+         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize
+      END SUBROUTINE xios_write_data_k41
+      
+      SUBROUTINE xios_write_data_k42(fieldid, fieldid_size, data_k4, data_Xsize, data_Ysize) BIND(C)
+         USE ISO_C_BINDING
+         CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: fieldid
+         REAL     (kind = C_FLOAT) , DIMENSION(*) :: data_k4
+         INTEGER  (kind = C_INT)   , VALUE        :: fieldid_size
+         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize, data_Ysize
+      END SUBROUTINE xios_write_data_k42
+      
+      SUBROUTINE xios_write_data_k43(fieldid, fieldid_size, data_k4, data_Xsize, data_Ysize, data_Zsize) BIND(C)
+         USE ISO_C_BINDING
+         CHARACTER(kind = C_CHAR)  , DIMENSION(*) :: fieldid
+         REAL     (kind = C_FLOAT) , DIMENSION(*) :: data_k4
+         INTEGER  (kind = C_INT)   , VALUE        :: fieldid_size
+         INTEGER  (kind = C_INT)   , VALUE        :: data_Xsize, data_Ysize, data_Zsize
+      END SUBROUTINE xios_write_data_k43
+      
+   END INTERFACE
+   
+   CONTAINS ! Fonctions disponibles pour les utilisateurs.
+
+   SUBROUTINE  init_ioserver(comm_client)
+      INTEGER, INTENT(INOUT) :: comm_client
+      CALL xios_init_ioserver(comm_client)
+   END SUBROUTINE init_ioserver
+   
+   SUBROUTINE dtreatment_start(context_hdl, filetype, comm_client_server, comm_server)
+      TYPE(XContextHandle), INTENT(IN), VALUE    :: context_hdl
+      INTEGER             , INTENT(IN), OPTIONAL :: filetype , comm_client_server , comm_server
+      INTEGER                                    :: filetype_, comm_client_server_, comm_server_
+      IF (PRESENT(filetype)) THEN
+         filetype_ = filetype
+      ELSE
+         filetype_ = NETCDF4
+      END IF
+      IF (PRESENT(comm_client_server)) THEN
+         comm_client_server_ = comm_client_server
+      ELSE
+         comm_client_server_ = -1
+      END IF
+      IF (PRESENT(comm_server)) THEN
+         comm_server_ = comm_server
+      ELSE
+         comm_server_ = -1
+      END IF
+      CALL context_set_current(context_hdl)
+      CALL xios_dtreatment_start(context_hdl%daddr, filetype_, comm_client_server_, comm_server_)
+   END SUBROUTINE dtreatment_start
+   
+   SUBROUTINE dtreatment_end(context_hdl)
+      TYPE(XContextHandle), INTENT(IN), VALUE :: context_hdl
+      CALL context_set_current(context_hdl)
+      CALL xios_dtreatment_end()
+   END SUBROUTINE dtreatment_end
+   
+   SUBROUTINE write_data_k81(fieldid, data1d_k8)
+      CHARACTER(len = *)               , INTENT(IN) :: fieldid
+      REAL     (kind = 8), DIMENSION(*), INTENT(IN) :: data1d_k8(:)
+      CALL xios_write_data_k81(fieldid, len(fieldid), data1d_k8, size(data1d_k8, 1))
+   END SUBROUTINE write_data_k81
+   
+   SUBROUTINE write_data_k82(fieldid, data2d_k8)
+      CHARACTER(len = *)               , INTENT(IN) :: fieldid
+      REAL     (kind = 8), DIMENSION(*), INTENT(IN) :: data2d_k8(:,:)
+      CALL xios_write_data_k82(fieldid, len(fieldid), data2d_k8, size(data2d_k8, 1), size(data2d_k8, 2))
+   END SUBROUTINE write_data_k82
+   
+   SUBROUTINE write_data_k83(fieldid, data3d_k8)
+      CHARACTER(len = *)               , INTENT(IN) :: fieldid
+      REAL     (kind = 8), DIMENSION(*), INTENT(IN) :: data3d_k8(:,:,:)
+      CALL xios_write_data_k83(fieldid, len(fieldid), data3d_k8, size(data3d_k8, 1), size(data3d_k8, 2), size(data3d_k8, 3))
+   END SUBROUTINE write_data_k83
+   
+   SUBROUTINE write_data_k41(fieldid, data1d_k4)
+      CHARACTER(len = *)               , INTENT(IN) :: fieldid
+      REAL     (kind = 4), DIMENSION(*), INTENT(IN) :: data1d_k4(:)
+      CALL xios_write_data_k41(fieldid, len(fieldid), data1d_k4, size(data1d_k4, 1))
+   END SUBROUTINE write_data_k41
+   
+   SUBROUTINE write_data_k42(fieldid, data2d_k4)
+      CHARACTER(len = *)               , INTENT(IN) :: fieldid
+      REAL     (kind = 4), DIMENSION(*), INTENT(IN) :: data2d_k4(:,:)
+      CALL xios_write_data_k42(fieldid, len(fieldid), data2d_k4, size(data2d_k4, 1), size(data2d_k4, 2))
+   END SUBROUTINE write_data_k42
+   
+   SUBROUTINE write_data_k43(fieldid, data3d_k4)
+      CHARACTER(len = *)               , INTENT(IN) :: fieldid
+      REAL     (kind = 4), DIMENSION(*), INTENT(IN) :: data3d_k4(:,:,:)
+      CALL xios_write_data_k43(fieldid, len(fieldid), data3d_k4, size(data3d_k4, 1), size(data3d_k4, 2), size(data3d_k4, 3))
+   END SUBROUTINE write_data_k43
+   
+END MODULE IDATA
Index: XMLIO_V2/dev/common/src/xmlio/fortran/idate.f90
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/fortran/idate.f90	(revision 274)
+++ XMLIO_V2/dev/common/src/xmlio/fortran/idate.f90	(revision 274)
@@ -0,0 +1,47 @@
+MODULE IDATE
+   USE, INTRINSIC :: ISO_C_BINDING
+
+   ! enum XCalendarType
+   INTEGER(kind = C_INT), PARAMETER :: D360 = 0 , ALLLEAP = 1 , NOLEAP = 2 , JULIAN = 3 , GREGORIAN = 4
+
+   TYPE XDate
+      INTEGER :: year, month, day, hour, minute, second
+   END TYPE XDate
+
+   TYPE XDuration
+      REAL(kind = 8) :: year, month, day, hour, minute, second
+   END TYPE XDuration
+   
+   INTERFACE ! Ne pas appeler directement/Interface FORTRAN 2003 <-> C99
+   
+      SUBROUTINE xios_set_timestep(ts_year, ts_month, ts_day, ts_hour, ts_minute, ts_second) BIND(C)
+         IMPORT C_DOUBLE
+         REAL (kind = C_DOUBLE), VALUE :: ts_year, ts_month , ts_day   , &
+                                          ts_hour, ts_minute, ts_second
+      END SUBROUTINE xios_set_timestep
+
+      SUBROUTINE xios_update_calendar(step) BIND(C)
+         IMPORT C_INT
+         INTEGER (kind = C_INT), VALUE :: step
+      END SUBROUTINE xios_update_calendar
+      
+   END INTERFACE
+   
+   CONTAINS ! Fonctions disponibles pour les utilisateurs.
+   
+   SUBROUTINE set_timestep(timestep)
+      TYPE(XDuration), INTENT(IN):: timestep
+      CALL xios_set_timestep(timestep%year, timestep%month , timestep%day, &
+                             timestep%hour, timestep%minute, timestep%second)
+   END SUBROUTINE set_timestep
+   
+   SUBROUTINE update_calendar(step)
+      INTEGER, INTENT(IN):: step
+      IF (step < 1) THEN
+         PRINT *, "L'argument 'step' ne peut Ãªtre nÃ©gatif ou nul"
+         STOP
+      END IF
+      CALL xios_update_calendar(step)
+   END SUBROUTINE update_calendar
+   
+END MODULE IDATE
Index: XMLIO_V2/dev/common/src/xmlio/fortran/idomain.f90
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/fortran/idomain.f90	(revision 274)
+++ XMLIO_V2/dev/common/src/xmlio/fortran/idomain.f90	(revision 274)
@@ -0,0 +1,415 @@
+MODULE IDOMAIN
+   USE, INTRINSIC :: ISO_C_BINDING
+   USE DOMAIN_INTERFACE
+   USE DOMAINGROUP_INTERFACE
+   
+   TYPE XDomainHandle
+      INTEGER(kind = C_INTPTR_T) :: daddr
+   END TYPE XDomainHandle
+   
+   TYPE XDomainGroupHandle
+      INTEGER(kind = C_INTPTR_T) :: daddr
+   END TYPE XDomainGroupHandle
+   
+   !----------------------------------------------------------------------------
+   INTERFACE set_domain_attributes
+      MODULE PROCEDURE set_domain_attributes_id,set_domain_attributes_hdl
+   END INTERFACE  
+   
+   INTERFACE set_domain_group_attributes
+      MODULE PROCEDURE set_domaingroup_attributes_id,set_domaingroup_attributes_hdl
+   END INTERFACE  
+   !----------------------------------------------------------------------------
+   
+   CONTAINS ! Fonctions disponibles pour les utilisateurs.
+   
+   SUBROUTINE set_domaingroup_attributes_id                                                                        &
+   ( domaingroup_id, name_, standard_name_, long_name_, domaingroup_group_ref_, ni_glo_, nj_glo_, ibegin_, iend_,  &
+     ni_, jbegin_, jend_, nj_, mask_, data_dim_, data_ni_, data_nj_, data_ibegin_, data_jbegin_,                   &
+     zoom_ni_, zoom_nj_, zoom_ibegin_, zoom_jbegin_, zoom_ni_loc_, zoom_nj_loc_, zoom_ibegin_loc_,                 &
+     zoom_jbegin_loc_, data_n_index_, data_i_index_, data_j_index_, lonvalue_, latvalue_)
+      IMPLICIT NONE
+      TYPE(XDomainGroupHandle)                                   :: domaingroup_hdl
+      CHARACTER(len = *)                       , INTENT(IN) :: domaingroup_id
+      CHARACTER(len = *)             , OPTIONAL, INTENT(IN) :: name_
+      CHARACTER(len = *)             , OPTIONAL, INTENT(IN) :: standard_name_
+      CHARACTER(len = *)             , OPTIONAL, INTENT(IN) :: long_name_
+      CHARACTER(len = *)             , OPTIONAL, INTENT(IN) :: domaingroup_group_ref_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: ni_glo_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: nj_glo_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: ibegin_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: iend_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: ni_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: jbegin_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: jend_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: nj_
+      LOGICAL          , dimension(*), OPTIONAL, INTENT(IN) :: mask_(:,:)
+      INTEGER                        , OPTIONAL, INTENT(IN) :: data_dim_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: data_ni_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: data_nj_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: data_ibegin_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: data_jbegin_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: zoom_ni_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: zoom_nj_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: zoom_ibegin_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: zoom_jbegin_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: zoom_ni_loc_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: zoom_nj_loc_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: zoom_ibegin_loc_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: zoom_jbegin_loc_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: data_n_index_
+      INTEGER       , dimension(*)   , OPTIONAL, INTENT(IN) :: data_i_index_(:)
+      INTEGER       , dimension(*)   , OPTIONAL, INTENT(IN) :: data_j_index_(:)
+      REAL(kind = 8), dimension(*)   , OPTIONAL, INTENT(IN) :: lonvalue_(:)
+      REAL(kind = 8), dimension(*)   , OPTIONAL, INTENT(IN) :: latvalue_(:)
+ 
+      CALL domaingroup_handle_create(domaingroup_hdl, domaingroup_id)
+      CALL set_domaingroup_attributes_hdl                                                                          &
+   ( domaingroup_hdl, name_, standard_name_, long_name_, domaingroup_group_ref_, ni_glo_, nj_glo_, ibegin_, iend_, &
+     ni_, jbegin_, jend_, nj_, mask_, data_dim_, data_ni_, data_nj_, data_ibegin_, data_jbegin_,                   &
+     zoom_ni_, zoom_nj_, zoom_ibegin_, zoom_jbegin_, zoom_ni_loc_, zoom_nj_loc_, zoom_ibegin_loc_,                 &
+     zoom_jbegin_loc_, data_n_index_, data_i_index_, data_j_index_, lonvalue_, latvalue_)
+
+   END SUBROUTINE set_domaingroup_attributes_id
+   
+   SUBROUTINE set_domaingroup_attributes_hdl                                                                       &
+   ( domaingroup_hdl,name_, standard_name_, long_name_, domaingroup_group_ref_, ni_glo_, nj_glo_, ibegin_, iend_,  &
+     ni_, jbegin_, jend_, nj_, mask_, data_dim_, data_ni_, data_nj_, data_ibegin_, data_jbegin_,                   &
+     zoom_ni_, zoom_nj_, zoom_ibegin_, zoom_jbegin_, zoom_ni_loc_, zoom_nj_loc_, zoom_ibegin_loc_,                 &
+     zoom_jbegin_loc_, data_n_index_, data_i_index_, data_j_index_, lonvalue_, latvalue_)
+      IMPLICIT NONE
+      TYPE(XDomainGroupHandle)                   , INTENT(IN) :: domaingroup_hdl
+      CHARACTER(len = *)               , OPTIONAL, INTENT(IN) :: name_
+      CHARACTER(len = *)               , OPTIONAL, INTENT(IN) :: standard_name_
+      CHARACTER(len = *)               , OPTIONAL, INTENT(IN) :: long_name_
+      CHARACTER(len = *)               , OPTIONAL, INTENT(IN) :: domaingroup_group_ref_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: ni_glo_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: nj_glo_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: ibegin_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: iend_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: ni_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: jbegin_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: jend_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: nj_
+      LOGICAL          , dimension(*)  , OPTIONAL, INTENT(IN) :: mask_(:,:)
+      LOGICAL(kind = 1), dimension(:,:), ALLOCATABLE          :: mask__! (size(mask_,1),size(mask,2))
+      INTEGER                          , OPTIONAL, INTENT(IN) :: data_dim_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: data_ni_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: data_nj_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: data_ibegin_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: data_jbegin_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: zoom_ni_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: zoom_nj_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: zoom_ibegin_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: zoom_jbegin_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: zoom_ni_loc_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: zoom_nj_loc_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: zoom_ibegin_loc_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: zoom_jbegin_loc_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: data_n_index_
+      INTEGER       , dimension(*)     , OPTIONAL, INTENT(IN) :: data_i_index_(:)
+      INTEGER       , dimension(*)     , OPTIONAL, INTENT(IN) :: data_j_index_(:)
+      REAL(kind = 8), dimension(*)     , OPTIONAL, INTENT(IN) :: lonvalue_(:)
+      REAL(kind = 8), dimension(*)     , OPTIONAL, INTENT(IN) :: latvalue_(:)
+      
+      IF (PRESENT(name_))             THEN
+         CALL xios_set_domaingroup_name(domaingroup_hdl%daddr, name_, len(name_))
+      END IF
+      IF (PRESENT(standard_name_))    THEN
+         CALL xios_set_domaingroup_standard_name(domaingroup_hdl%daddr, standard_name_, len(standard_name_))
+      END IF
+      IF (PRESENT(long_name_))        THEN
+         CALL xios_set_domaingroup_long_name(domaingroup_hdl%daddr, long_name_, len(long_name_))
+       END IF
+      IF (PRESENT(domaingroup_group_ref_)) THEN
+         CALL xios_set_domaingroup_domaingroup_group_ref(domaingroup_hdl%daddr, domaingroup_group_ref_, len(domaingroup_group_ref_))
+      END IF
+      IF (PRESENT(ni_glo_))           THEN
+         CALL xios_set_domaingroup_ni_glo(domaingroup_hdl%daddr, ni_glo_)
+      END IF
+      IF (PRESENT(nj_glo_))           THEN
+         CALL xios_set_domaingroup_nj_glo(domaingroup_hdl%daddr, nj_glo_)
+      END IF
+      IF (PRESENT(ibegin_))           THEN
+         CALL xios_set_domaingroup_ibegin(domaingroup_hdl%daddr, ibegin_)
+       END IF
+      IF (PRESENT(iend_))             THEN
+         CALL xios_set_domaingroup_iend(domaingroup_hdl%daddr, iend_)
+      END IF
+      IF (PRESENT(ni_))               THEN
+         CALL xios_set_domaingroup_ni(domaingroup_hdl%daddr, ni_)
+      END IF
+      IF (PRESENT(jbegin_))           THEN
+         CALL xios_set_domaingroup_jbegin(domaingroup_hdl%daddr, jbegin_)
+      END IF
+      IF (PRESENT(jend_))             THEN
+         CALL xios_set_domaingroup_jend(domaingroup_hdl%daddr, jend_)
+      END IF
+      IF (PRESENT(nj_))               THEN
+         CALL xios_set_domaingroup_nj(domaingroup_hdl%daddr, nj_)
+      END IF
+      IF (PRESENT(mask_))             THEN
+         ALLOCATE(mask__(size(mask_, 1), size(mask_, 2)))
+         mask__(:,:) = mask_(:,:)
+         CALL xios_set_domaingroup_mask(domaingroup_hdl%daddr, mask__, size(mask_, 1), size(mask_, 2))         
+         DEALLOCATE(mask__)
+      END IF
+      IF (PRESENT(data_dim_))         THEN
+         CALL xios_set_domaingroup_data_dim(domaingroup_hdl%daddr, data_dim_)
+      END IF
+      IF (PRESENT(data_ni_))          THEN
+         CALL xios_set_domaingroup_data_ni(domaingroup_hdl%daddr, data_ni_)
+      END IF 
+      IF (PRESENT(data_nj_))          THEN
+         CALL xios_set_domaingroup_data_nj(domaingroup_hdl%daddr, data_nj_)
+      END IF
+      IF (PRESENT(data_ibegin_))      THEN
+         CALL xios_set_domaingroup_data_ibegin(domaingroup_hdl%daddr, data_ibegin_)
+      END IF
+      IF (PRESENT(data_jbegin_))      THEN
+         CALL xios_set_domaingroup_data_jbegin(domaingroup_hdl%daddr, data_jbegin_)
+      END IF
+      IF (PRESENT(zoom_ni_))          THEN
+         CALL xios_set_domaingroup_zoom_ni(domaingroup_hdl%daddr, zoom_ni_)
+      END IF
+      IF (PRESENT(zoom_nj_))          THEN
+       CALL xios_set_domaingroup_zoom_nj(domaingroup_hdl%daddr, zoom_nj_)
+      END IF
+      IF (PRESENT(zoom_ibegin_))      THEN
+         CALL xios_set_domaingroup_zoom_ibegin(domaingroup_hdl%daddr, zoom_ibegin_)
+      END IF
+      IF (PRESENT(zoom_jbegin_))      THEN
+         CALL xios_set_domaingroup_zoom_jbegin(domaingroup_hdl%daddr, zoom_jbegin_)
+      END IF
+      IF (PRESENT(zoom_ni_loc_))      THEN
+         CALL xios_set_domaingroup_zoom_ni_loc(domaingroup_hdl%daddr, zoom_ni_loc_)
+      END IF   
+      IF (PRESENT(zoom_nj_loc_))      THEN
+         CALL xios_set_domaingroup_zoom_nj_loc(domaingroup_hdl%daddr, zoom_nj_loc_)
+      END IF
+      IF (PRESENT(zoom_ibegin_loc_))  THEN
+         CALL xios_set_domaingroup_zoom_ibegin_loc(domaingroup_hdl%daddr, zoom_ibegin_loc_)
+      END IF
+      IF (PRESENT(zoom_jbegin_loc_))  THEN
+         CALL xios_set_domaingroup_zoom_jbegin_loc(domaingroup_hdl%daddr, zoom_jbegin_loc_)
+      END IF
+      IF (PRESENT(data_n_index_))     THEN
+         CALL xios_set_domaingroup_data_n_index(domaingroup_hdl%daddr, data_n_index_)
+      END IF
+      IF (PRESENT(data_i_index_))     THEN
+         CALL xios_set_domaingroup_data_i_index(domaingroup_hdl%daddr, data_i_index_, size(data_i_index_, 1))
+      END IF
+      IF (PRESENT(data_j_index_))     THEN
+         CALL xios_set_domaingroup_data_j_index(domaingroup_hdl%daddr, data_j_index_, size(data_j_index_, 1))
+      END IF
+      IF (PRESENT(lonvalue_))         THEN
+         CALL xios_set_domaingroup_lonvalue(domaingroup_hdl%daddr, lonvalue_, size(lonvalue_, 1))
+      END IF
+      IF (PRESENT(latvalue_))         THEN
+         CALL xios_set_domaingroup_latvalue(domaingroup_hdl%daddr, latvalue_, size(latvalue_, 1))
+      END IF
+
+   END SUBROUTINE set_domaingroup_attributes_hdl
+   
+   SUBROUTINE set_domain_attributes_id                                                                   &
+   ( domain_id, name_, standard_name_, long_name_, domain_group_ref_, ni_glo_, nj_glo_, ibegin_, iend_,  &
+     ni_, jbegin_, jend_, nj_, mask_, data_dim_, data_ni_, data_nj_, data_ibegin_, data_jbegin_,         &
+     zoom_ni_, zoom_nj_, zoom_ibegin_, zoom_jbegin_, zoom_ni_loc_, zoom_nj_loc_, zoom_ibegin_loc_,       &
+     zoom_jbegin_loc_, data_n_index_, data_i_index_, data_j_index_, lonvalue_, latvalue_)
+      IMPLICIT NONE
+      TYPE(XDomainHandle)                                   :: domain_hdl
+      CHARACTER(len = *)                       , INTENT(IN) :: domain_id
+      CHARACTER(len = *)             , OPTIONAL, INTENT(IN) :: name_
+      CHARACTER(len = *)             , OPTIONAL, INTENT(IN) :: standard_name_
+      CHARACTER(len = *)             , OPTIONAL, INTENT(IN) :: long_name_
+      CHARACTER(len = *)             , OPTIONAL, INTENT(IN) :: domain_group_ref_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: ni_glo_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: nj_glo_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: ibegin_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: iend_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: ni_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: jbegin_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: jend_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: nj_
+      LOGICAL          , dimension(*), OPTIONAL, INTENT(IN) :: mask_(:,:)
+      INTEGER                        , OPTIONAL, INTENT(IN) :: data_dim_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: data_ni_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: data_nj_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: data_ibegin_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: data_jbegin_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: zoom_ni_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: zoom_nj_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: zoom_ibegin_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: zoom_jbegin_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: zoom_ni_loc_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: zoom_nj_loc_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: zoom_ibegin_loc_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: zoom_jbegin_loc_
+      INTEGER                        , OPTIONAL, INTENT(IN) :: data_n_index_
+      INTEGER       , dimension(*)   , OPTIONAL, INTENT(IN) :: data_i_index_(:)
+      INTEGER       , dimension(*)   , OPTIONAL, INTENT(IN) :: data_j_index_(:)
+      REAL(kind = 8), dimension(*)   , OPTIONAL, INTENT(IN) :: lonvalue_(:)
+      REAL(kind = 8), dimension(*)   , OPTIONAL, INTENT(IN) :: latvalue_(:)
+ 
+      CALL domain_handle_create(domain_hdl, domain_id)
+      CALL set_domain_attributes_hdl                                                                     &
+   ( domain_hdl, name_, standard_name_, long_name_, domain_group_ref_, ni_glo_, nj_glo_, ibegin_, iend_, &
+     ni_, jbegin_, jend_, nj_, mask_, data_dim_, data_ni_, data_nj_, data_ibegin_, data_jbegin_,         &
+     zoom_ni_, zoom_nj_, zoom_ibegin_, zoom_jbegin_, zoom_ni_loc_, zoom_nj_loc_, zoom_ibegin_loc_,       &
+     zoom_jbegin_loc_, data_n_index_, data_i_index_, data_j_index_, lonvalue_, latvalue_)
+
+   END SUBROUTINE set_domain_attributes_id
+   
+   SUBROUTINE set_domain_attributes_hdl                                                                  &
+   ( domain_hdl,name_, standard_name_, long_name_, domain_group_ref_, ni_glo_, nj_glo_, ibegin_, iend_,  &
+     ni_, jbegin_, jend_, nj_, mask_, data_dim_, data_ni_, data_nj_, data_ibegin_, data_jbegin_,         &
+     zoom_ni_, zoom_nj_, zoom_ibegin_, zoom_jbegin_, zoom_ni_loc_, zoom_nj_loc_, zoom_ibegin_loc_,       &
+     zoom_jbegin_loc_, data_n_index_, data_i_index_, data_j_index_, lonvalue_, latvalue_)
+      IMPLICIT NONE
+      TYPE(XDomainHandle)                        , INTENT(IN) :: domain_hdl
+      CHARACTER(len = *)               , OPTIONAL, INTENT(IN) :: name_
+      CHARACTER(len = *)               , OPTIONAL, INTENT(IN) :: standard_name_
+      CHARACTER(len = *)               , OPTIONAL, INTENT(IN) :: long_name_
+      CHARACTER(len = *)               , OPTIONAL, INTENT(IN) :: domain_group_ref_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: ni_glo_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: nj_glo_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: ibegin_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: iend_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: ni_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: jbegin_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: jend_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: nj_
+      LOGICAL          , dimension(*)  , OPTIONAL, INTENT(IN) :: mask_(:,:)
+      LOGICAL(kind = 1), dimension(:,:), ALLOCATABLE          :: mask__
+      INTEGER                          , OPTIONAL, INTENT(IN) :: data_dim_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: data_ni_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: data_nj_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: data_ibegin_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: data_jbegin_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: zoom_ni_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: zoom_nj_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: zoom_ibegin_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: zoom_jbegin_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: zoom_ni_loc_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: zoom_nj_loc_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: zoom_ibegin_loc_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: zoom_jbegin_loc_
+      INTEGER                          , OPTIONAL, INTENT(IN) :: data_n_index_
+      INTEGER       , dimension(*)     , OPTIONAL, INTENT(IN) :: data_i_index_(:)
+      INTEGER       , dimension(*)     , OPTIONAL, INTENT(IN) :: data_j_index_(:)
+      REAL(kind = 8), dimension(*)     , OPTIONAL, INTENT(IN) :: lonvalue_(:)
+      REAL(kind = 8), dimension(*)     , OPTIONAL, INTENT(IN) :: latvalue_(:)
+      IF (PRESENT(name_))             THEN
+         CALL xios_set_domain_name(domain_hdl%daddr, name_, len(name_))
+      END IF
+      IF (PRESENT(standard_name_))    THEN
+         CALL xios_set_domain_standard_name(domain_hdl%daddr, standard_name_, len(standard_name_))
+      END IF
+      IF (PRESENT(long_name_))        THEN
+         CALL xios_set_domain_long_name(domain_hdl%daddr, long_name_, len(long_name_))
+       END IF
+      IF (PRESENT(domain_group_ref_)) THEN
+         CALL xios_set_domain_domain_group_ref(domain_hdl%daddr, domain_group_ref_, len(domain_group_ref_))
+      END IF
+      IF (PRESENT(ni_glo_))           THEN
+         CALL xios_set_domain_ni_glo(domain_hdl%daddr, ni_glo_)
+      END IF
+      IF (PRESENT(nj_glo_))           THEN
+         CALL xios_set_domain_nj_glo(domain_hdl%daddr, nj_glo_)
+      END IF
+      IF (PRESENT(ibegin_))           THEN
+         CALL xios_set_domain_ibegin(domain_hdl%daddr, ibegin_)
+       END IF
+      IF (PRESENT(iend_))             THEN
+         CALL xios_set_domain_iend(domain_hdl%daddr, iend_)
+      END IF
+      IF (PRESENT(ni_))               THEN
+         CALL xios_set_domain_ni(domain_hdl%daddr, ni_)
+      END IF
+      IF (PRESENT(jbegin_))           THEN
+         CALL xios_set_domain_jbegin(domain_hdl%daddr, jbegin_)
+      END IF
+      IF (PRESENT(jend_))             THEN
+         CALL xios_set_domain_jend(domain_hdl%daddr, jend_)
+      END IF
+      IF (PRESENT(nj_))               THEN
+         CALL xios_set_domain_nj(domain_hdl%daddr, nj_)
+      END IF
+      IF (PRESENT(mask_))             THEN
+         ALLOCATE(mask__(size(mask_, 1), size(mask_, 2)))
+         mask__(:,:) = mask_(:,:)
+         CALL xios_set_domain_mask(domain_hdl%daddr, mask__, size(mask_, 1), size(mask_, 2))         
+         DEALLOCATE(mask__)
+      END IF
+      IF (PRESENT(data_dim_))         THEN
+         CALL xios_set_domain_data_dim(domain_hdl%daddr, data_dim_)
+      END IF
+      IF (PRESENT(data_ni_))          THEN
+         CALL xios_set_domain_data_ni(domain_hdl%daddr, data_ni_)
+      END IF 
+      IF (PRESENT(data_nj_))          THEN
+         CALL xios_set_domain_data_nj(domain_hdl%daddr, data_nj_)
+      END IF
+      IF (PRESENT(data_ibegin_))      THEN
+         CALL xios_set_domain_data_ibegin(domain_hdl%daddr, data_ibegin_)
+      END IF
+      IF (PRESENT(data_jbegin_))      THEN
+         CALL xios_set_domain_data_jbegin(domain_hdl%daddr, data_jbegin_)
+      END IF
+      IF (PRESENT(zoom_ni_))          THEN
+         CALL xios_set_domain_zoom_ni(domain_hdl%daddr, zoom_ni_)
+      END IF
+      IF (PRESENT(zoom_nj_))          THEN
+       CALL xios_set_domain_zoom_nj(domain_hdl%daddr, zoom_nj_)
+      END IF
+      IF (PRESENT(zoom_ibegin_))      THEN
+         CALL xios_set_domain_zoom_ibegin(domain_hdl%daddr, zoom_ibegin_)
+      END IF
+      IF (PRESENT(zoom_jbegin_))      THEN
+         CALL xios_set_domain_zoom_jbegin(domain_hdl%daddr, zoom_jbegin_)
+      END IF
+      IF (PRESENT(zoom_ni_loc_))      THEN
+         CALL xios_set_domain_zoom_ni_loc(domain_hdl%daddr, zoom_ni_loc_)
+      END IF   
+      IF (PRESENT(zoom_nj_loc_))      THEN
+         CALL xios_set_domain_zoom_nj_loc(domain_hdl%daddr, zoom_nj_loc_)
+      END IF
+      IF (PRESENT(zoom_ibegin_loc_))  THEN
+         CALL xios_set_domain_zoom_ibegin_loc(domain_hdl%daddr, zoom_ibegin_loc_)
+      END IF
+      IF (PRESENT(zoom_jbegin_loc_))  THEN
+         CALL xios_set_domain_zoom_jbegin_loc(domain_hdl%daddr, zoom_jbegin_loc_)
+      END IF
+      IF (PRESENT(data_n_index_))     THEN
+         CALL xios_set_domain_data_n_index(domain_hdl%daddr, data_n_index_)
+      END IF
+      IF (PRESENT(data_i_index_))     THEN
+         CALL xios_set_domain_data_i_index(domain_hdl%daddr, data_i_index_, size(data_i_index_, 1))
+      END IF
+      IF (PRESENT(data_j_index_))     THEN
+         CALL xios_set_domain_data_j_index(domain_hdl%daddr, data_j_index_, size(data_j_index_, 1))
+      END IF
+      IF (PRESENT(lonvalue_))         THEN
+         CALL xios_set_domain_lonvalue(domain_hdl%daddr, lonvalue_, size(lonvalue_, 1))
+      END IF
+      IF (PRESENT(latvalue_))         THEN
+         CALL xios_set_domain_latvalue(domain_hdl%daddr, latvalue_, size(latvalue_, 1))
+      END IF
+
+   END SUBROUTINE set_domain_attributes_hdl
+   
+   SUBROUTINE domain_handle_create(ret, idt)
+      IMPLICIT NONE
+      TYPE(XDomainHandle), INTENT(OUT):: ret
+      CHARACTER(len = *) , INTENT(IN) :: idt      
+      CALL xios_domain_handle_create(ret%daddr, idt, len(idt))            
+   END SUBROUTINE domain_handle_create
+   
+   SUBROUTINE domaingroup_handle_create(ret, idt)
+      IMPLICIT NONE
+      TYPE(XDomainGroupHandle), INTENT(OUT):: ret
+      CHARACTER(len = *)      , INTENT(IN) :: idt      
+      CALL xios_domaingroup_handle_create(ret%daddr, idt, len(idt))            
+   END SUBROUTINE domaingroup_handle_create
+   
+END MODULE IDOMAIN
Index: XMLIO_V2/dev/common/src/xmlio/fortran/ifield.f90
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/fortran/ifield.f90	(revision 274)
+++ XMLIO_V2/dev/common/src/xmlio/fortran/ifield.f90	(revision 274)
@@ -0,0 +1,232 @@
+MODULE IFIELD
+   USE, INTRINSIC :: ISO_C_BINDING
+   USE FIELD_INTERFACE
+   USE FIELDGROUP_INTERFACE
+   
+   TYPE XFieldHandle
+      INTEGER(kind = C_INTPTR_T) :: daddr
+   END TYPE XFieldHandle
+   
+   TYPE XFieldGroupHandle
+      INTEGER(kind = C_INTPTR_T) :: daddr
+   END TYPE XFieldGroupHandle
+   
+   !----------------------------------------------------------------------------
+   INTERFACE set_field_attributes
+      MODULE PROCEDURE set_field_attributes_id,set_field_attributes_hdl
+   END INTERFACE  
+   
+   INTERFACE set_field_group_attributes
+      MODULE PROCEDURE set_fieldgroup_attributes_id,set_fieldgroup_attributes_hdl
+   END INTERFACE  
+   !----------------------------------------------------------------------------
+   
+   CONTAINS ! Fonctions disponibles pour les utilisateurs.
+    
+   SUBROUTINE set_fieldgroup_attributes_id                                                 &
+   (fieldgroup_id, name_, standard_name_, long_name_, unit_, operation_, freq_op_, level_, &
+    prec_, enabled_, domain_ref_, axis_ref_, grid_ref_, fieldgroup_ref_, default_value_)
+    
+      IMPLICIT NONE
+      TYPE(XFieldGroupHandle)                       :: fieldgroup_hdl
+      CHARACTER(len = *)               , INTENT(IN) :: fieldgroup_id
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: name_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: standard_name_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: long_name_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: unit_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: operation_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: freq_op_
+      INTEGER                , OPTIONAL, INTENT(IN) :: level_
+      INTEGER                , OPTIONAL, INTENT(IN) :: prec_
+      LOGICAL                , OPTIONAL, INTENT(IN) :: enabled_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: domain_ref_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: axis_ref_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: grid_ref_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: fieldgroup_ref_
+      REAL(kind=8)           , OPTIONAL, INTENT(IN) :: default_value_
+        
+      CALL fieldgroup_handle_create(fieldgroup_hdl, fieldgroup_id)
+      CALL set_fieldgroup_attributes_hdl                                                          &
+         (fieldgroup_hdl, name_, standard_name_, long_name_, unit_, operation_, freq_op_, level_, &
+          prec_, enabled_, domain_ref_, axis_ref_, grid_ref_, fieldgroup_ref_, default_value_)
+
+   END SUBROUTINE set_fieldgroup_attributes_id
+
+   SUBROUTINE set_fieldgroup_attributes_hdl                                                 &
+   (fieldgroup_hdl, name_, standard_name_, long_name_, unit_, operation_, freq_op_, level_, &
+    prec_, enabled_, domain_ref_, axis_ref_, grid_ref_, fieldgroup_ref_, default_value_)
+      IMPLICIT NONE
+      TYPE(XFieldgroupHandle)          , INTENT(IN) :: fieldgroup_hdl
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: name_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: standard_name_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: long_name_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: unit_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: operation_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: freq_op_
+      INTEGER                , OPTIONAL, INTENT(IN) :: level_
+      INTEGER                , OPTIONAL, INTENT(IN) :: prec_
+      LOGICAL(kind = 1)                             :: enabled__
+      LOGICAL                , OPTIONAL, INTENT(IN) :: enabled_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: domain_ref_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: axis_ref_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: grid_ref_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: fieldgroup_ref_
+      REAL(kind=8)           , OPTIONAL, INTENT(IN) :: default_value_
+      
+      enabled__ = enabled_  
+      IF (PRESENT(name_))           THEN
+         CALL xios_set_fieldgroup_name(fieldgroup_hdl%daddr, name_, len(name_))
+      END IF
+      IF (PRESENT(standard_name_))  THEN
+         CALL xios_set_fieldgroup_standard_name(fieldgroup_hdl%daddr, standard_name_, len(standard_name_))
+      END IF
+      IF (PRESENT(long_name_))      THEN
+         CALL xios_set_fieldgroup_long_name(fieldgroup_hdl%daddr, long_name_, len(long_name_))
+      END IF
+      IF (PRESENT(unit_))           THEN
+         CALL xios_set_fieldgroup_unit(fieldgroup_hdl%daddr, unit_, len(unit_))
+      END IF
+      IF (PRESENT(operation_))      THEN
+         CALL xios_set_fieldgroup_operation(fieldgroup_hdl%daddr, operation_, len(operation_))
+      END IF
+      IF (PRESENT(freq_op_))        THEN
+         CALL xios_set_fieldgroup_freq_op(fieldgroup_hdl%daddr, freq_op_, len(freq_op_))
+      END IF
+      IF (PRESENT(level_))          THEN
+         CALL xios_set_fieldgroup_level(fieldgroup_hdl%daddr, level_)
+      END IF
+      IF (PRESENT(prec_))           THEN
+         CALL xios_set_fieldgroup_prec(fieldgroup_hdl%daddr, prec_)
+      END IF
+      IF (PRESENT(enabled_))        THEN
+         CALL xios_set_fieldgroup_enabled(fieldgroup_hdl%daddr, enabled__)
+      END IF
+      IF (PRESENT(domain_ref_))     THEN
+         CALL xios_set_fieldgroup_domain_ref(fieldgroup_hdl%daddr, domain_ref_, len(domain_ref_))
+      END IF
+      IF (PRESENT(axis_ref_))       THEN
+         CALL xios_set_fieldgroup_axis_ref(fieldgroup_hdl%daddr, axis_ref_, len(axis_ref_))
+      END IF
+      IF (PRESENT(grid_ref_))       THEN
+         CALL xios_set_fieldgroup_grid_ref(fieldgroup_hdl%daddr, grid_ref_, len(grid_ref_))
+      END IF
+      IF (PRESENT(fieldgroup_ref_))      THEN
+         CALL xios_set_fieldgroup_fieldgroup_ref(fieldgroup_hdl%daddr, fieldgroup_ref_, len(fieldgroup_ref_))
+      END IF
+      IF (PRESENT(default_value_))  THEN
+         CALL xios_set_fieldgroup_default_value(fieldgroup_hdl%daddr, default_value_)
+      END IF
+
+   END SUBROUTINE set_fieldgroup_attributes_hdl
+   
+   SUBROUTINE set_field_attributes_id                                                 &
+   (field_id, name_, standard_name_, long_name_, unit_, operation_, freq_op_, level_, &
+    prec_, enabled_, domain_ref_, axis_ref_, grid_ref_, field_ref_, default_value_)
+    
+      IMPLICIT NONE
+      TYPE(XFieldHandle)                            :: field_hdl
+      CHARACTER(len = *)               , INTENT(IN) :: field_id
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: name_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: standard_name_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: long_name_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: unit_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: operation_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: freq_op_
+      INTEGER                , OPTIONAL, INTENT(IN) :: level_
+      INTEGER                , OPTIONAL, INTENT(IN) :: prec_
+      LOGICAL                , OPTIONAL, INTENT(IN) :: enabled_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: domain_ref_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: axis_ref_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: grid_ref_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: field_ref_
+      REAL(kind=8)           , OPTIONAL, INTENT(IN) :: default_value_
+      
+      CALL field_handle_create(field_hdl, field_id)
+      CALL set_field_attributes_hdl                                                          &
+         (field_hdl, name_, standard_name_, long_name_, unit_, operation_, freq_op_, level_, &
+          prec_, enabled_, domain_ref_, axis_ref_, grid_ref_, field_ref_, default_value_)
+
+   END SUBROUTINE set_field_attributes_id
+
+   SUBROUTINE set_field_attributes_hdl                                                 &
+   (field_hdl, name_, standard_name_, long_name_, unit_, operation_, freq_op_, level_, &
+    prec_, enabled_, domain_ref_, axis_ref_, grid_ref_, field_ref_, default_value_)
+      IMPLICIT NONE
+      TYPE(XFieldHandle)               , INTENT(IN) :: field_hdl
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: name_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: standard_name_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: long_name_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: unit_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: operation_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: freq_op_
+      INTEGER                , OPTIONAL, INTENT(IN) :: level_
+      INTEGER                , OPTIONAL, INTENT(IN) :: prec_
+      LOGICAL(kind = 1)                             :: enabled__
+      LOGICAL                , OPTIONAL, INTENT(IN) :: enabled_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: domain_ref_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: axis_ref_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: grid_ref_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: field_ref_
+      REAL(kind=8)           , OPTIONAL, INTENT(IN) :: default_value_
+      
+      enabled__ = enabled_  
+      IF (PRESENT(name_))           THEN
+         CALL xios_set_field_name(field_hdl%daddr, name_, len(name_))
+      END IF
+      IF (PRESENT(standard_name_))  THEN
+         CALL xios_set_field_standard_name(field_hdl%daddr, standard_name_, len(standard_name_))
+      END IF
+      IF (PRESENT(long_name_))      THEN
+         CALL xios_set_field_long_name(field_hdl%daddr, long_name_, len(long_name_))
+      END IF
+      IF (PRESENT(unit_))           THEN
+         CALL xios_set_field_unit(field_hdl%daddr, unit_, len(unit_))
+      END IF
+      IF (PRESENT(operation_))      THEN
+         CALL xios_set_field_operation(field_hdl%daddr, operation_, len(operation_))
+      END IF
+      IF (PRESENT(freq_op_))        THEN
+         CALL xios_set_field_freq_op(field_hdl%daddr, freq_op_, len(freq_op_))
+      END IF
+      IF (PRESENT(level_))          THEN
+         CALL xios_set_field_level(field_hdl%daddr, level_)
+      END IF
+      IF (PRESENT(prec_))           THEN
+         CALL xios_set_field_prec(field_hdl%daddr, prec_)
+      END IF
+      IF (PRESENT(enabled_))        THEN
+         CALL xios_set_field_enabled(field_hdl%daddr, enabled__)
+      END IF
+      IF (PRESENT(domain_ref_))     THEN
+         CALL xios_set_field_domain_ref(field_hdl%daddr, domain_ref_, len(domain_ref_))
+      END IF
+      IF (PRESENT(axis_ref_))       THEN
+         CALL xios_set_field_axis_ref(field_hdl%daddr, axis_ref_, len(axis_ref_))
+      END IF
+      IF (PRESENT(grid_ref_))       THEN
+         CALL xios_set_field_grid_ref(field_hdl%daddr, grid_ref_, len(grid_ref_))
+      END IF
+      IF (PRESENT(field_ref_))      THEN
+         CALL xios_set_field_field_ref(field_hdl%daddr, field_ref_, len(field_ref_))
+      END IF
+      IF (PRESENT(default_value_))  THEN
+         CALL xios_set_field_default_value(field_hdl%daddr, default_value_)
+      END IF
+
+   END SUBROUTINE set_field_attributes_hdl
+
+   SUBROUTINE field_handle_create(ret, idt)
+      IMPLICIT NONE
+      TYPE(XFieldHandle), INTENT(OUT):: ret
+      CHARACTER(len = *), INTENT(IN) :: idt      
+      CALL xios_field_handle_create(ret%daddr, idt, len(idt))            
+   END SUBROUTINE field_handle_create
+   
+   SUBROUTINE fieldgroup_handle_create(ret, idt)
+      IMPLICIT NONE
+      TYPE(XFieldGroupHandle), INTENT(OUT):: ret
+      CHARACTER(len = *)     , INTENT(IN) :: idt      
+      CALL xios_fieldgroup_handle_create(ret%daddr, idt, len(idt))            
+   END SUBROUTINE fieldgroup_handle_create
+   
+END MODULE IFIELD
Index: XMLIO_V2/dev/common/src/xmlio/fortran/ifile.f90
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/fortran/ifile.f90	(revision 274)
+++ XMLIO_V2/dev/common/src/xmlio/fortran/ifile.f90	(revision 274)
@@ -0,0 +1,127 @@
+MODULE IFILE
+   USE, INTRINSIC :: ISO_C_BINDING
+   USE FILE_INTERFACE
+   USE FILEGROUP_INTERFACE
+   
+   TYPE XFileHandle
+      INTEGER(kind = C_INTPTR_T) :: daddr
+   END TYPE XFileHandle
+   
+   TYPE XFileGroupHandle
+      INTEGER(kind = C_INTPTR_T) :: daddr
+   END TYPE XFileGroupHandle
+   
+   !----------------------------------------------------------------------------
+   INTERFACE set_file_attributes
+      MODULE PROCEDURE set_file_attributes_id,set_file_attributes_hdl
+   END INTERFACE  
+   
+   INTERFACE set_file_group_attributes
+      MODULE PROCEDURE set_filegroup_attributes_id,set_filegroup_attributes_hdl
+   END INTERFACE  
+   !----------------------------------------------------------------------------
+  
+   CONTAINS ! Fonctions disponibles pour les utilisateurs.
+   
+   SUBROUTINE set_file_attributes_id(file_id, name_ , description_, output_freq_, output_level_, enabled_)
+      IMPLICIT NONE
+      TYPE(XFileHandle)                        :: file_hdl
+      CHARACTER(len = *)          , INTENT(IN) :: file_id
+      CHARACTER(len = *), OPTIONAL, INTENT(IN) :: name_
+      CHARACTER(len = *), OPTIONAL, INTENT(IN) :: description_
+      CHARACTER(len = *), OPTIONAL, INTENT(IN) :: output_freq_
+      INTEGER           , OPTIONAL, INTENT(IN) :: output_level_
+      LOGICAL           , OPTIONAL, INTENT(IN) :: enabled_
+      
+      CALL file_handle_create(file_hdl, file_id)
+      CALL set_file_attributes_hdl(file_hdl, name_ , description_, output_freq_, output_level_, enabled_)
+      
+   END SUBROUTINE set_file_attributes_id
+   
+   SUBROUTINE set_file_attributes_hdl(file_hdl, name_ , description_, output_freq_, output_level_, enabled_)
+      TYPE(XFileHandle)           , INTENT(IN) :: file_hdl
+      CHARACTER(len = *), OPTIONAL, INTENT(IN) :: name_
+      CHARACTER(len = *), OPTIONAL, INTENT(IN) :: description_
+      CHARACTER(len = *), OPTIONAL, INTENT(IN) :: output_freq_
+      INTEGER           , OPTIONAL, INTENT(IN) :: output_level_
+      LOGICAL(kind = 1)                        :: enabled__
+      LOGICAL           , OPTIONAL, INTENT(IN) :: enabled_
+      
+      enabled__ = enabled_        
+      IF (PRESENT(name_))         THEN
+         CALL xios_set_file_name(file_hdl%daddr, name_, len(name_))
+      END IF
+      IF (PRESENT(description_))  THEN
+         CALL xios_set_file_description(file_hdl%daddr, description_, len(description_))
+      END IF
+      IF (PRESENT(output_freq_))  THEN
+         CALL xios_set_file_output_freq(file_hdl%daddr, output_freq_, len(output_freq_))
+      END IF
+      IF (PRESENT(output_level_)) THEN
+         CALL xios_set_file_output_level(file_hdl%daddr, output_level_)
+      END IF
+      IF (PRESENT(enabled_))      THEN
+         CALL xios_set_file_enabled(file_hdl%daddr, enabled__)
+      END IF
+
+   END SUBROUTINE set_file_attributes_hdl
+   
+   SUBROUTINE set_filegroup_attributes_id(filegroup_id, name_ , description_, output_freq_, output_level_, enabled_)
+      IMPLICIT NONE
+      TYPE(XFileGroupHandle)                   :: filegroup_hdl
+      CHARACTER(len = *)          , INTENT(IN) :: filegroup_id
+      CHARACTER(len = *), OPTIONAL, INTENT(IN) :: name_
+      CHARACTER(len = *), OPTIONAL, INTENT(IN) :: description_
+      CHARACTER(len = *), OPTIONAL, INTENT(IN) :: output_freq_
+      INTEGER           , OPTIONAL, INTENT(IN) :: output_level_
+      LOGICAL           , OPTIONAL, INTENT(IN) :: enabled_
+      
+      CALL filegroup_handle_create(filegroup_hdl, filegroup_id)
+      CALL set_filegroup_attributes_hdl(filegroup_hdl, name_ , description_, output_freq_, output_level_, enabled_)
+      
+   END SUBROUTINE set_filegroup_attributes_id
+   
+   SUBROUTINE set_filegroup_attributes_hdl(filegroup_hdl, name_ , description_, output_freq_, output_level_, enabled_)
+      IMPLICIT NONE
+      TYPE(XFileGroupHandle)      , INTENT(IN) :: filegroup_hdl
+      CHARACTER(len = *), OPTIONAL, INTENT(IN) :: name_
+      CHARACTER(len = *), OPTIONAL, INTENT(IN) :: description_
+      CHARACTER(len = *), OPTIONAL, INTENT(IN) :: output_freq_
+      INTEGER           , OPTIONAL, INTENT(IN) :: output_level_
+      LOGICAL(kind = 1)                        :: enabled__
+      LOGICAL           , OPTIONAL, INTENT(IN) :: enabled_
+      
+      enabled__ = enabled_         
+      IF (PRESENT(name_))         THEN
+         CALL xios_set_filegroup_name(filegroup_hdl%daddr, name_, len(name_))
+      END IF
+      IF (PRESENT(description_))  THEN
+         CALL xios_set_filegroup_description(filegroup_hdl%daddr, description_, len(description_))
+      END IF
+      IF (PRESENT(output_freq_))  THEN
+         CALL xios_set_filegroup_output_freq(filegroup_hdl%daddr, output_freq_, len(output_freq_))
+      END IF
+      IF (PRESENT(output_level_)) THEN
+         CALL xios_set_filegroup_output_level(filegroup_hdl%daddr, output_level_)
+      END IF
+      IF (PRESENT(enabled_))      THEN
+         CALL xios_set_filegroup_enabled(filegroup_hdl%daddr, enabled__)
+      END IF
+
+   END SUBROUTINE set_filegroup_attributes_hdl
+   
+   SUBROUTINE file_handle_create(ret, idt)
+      IMPLICIT NONE
+      TYPE(XFileHandle) , INTENT(OUT):: ret
+      CHARACTER(len = *), INTENT(IN) :: idt      
+      CALL xios_file_handle_create(ret%daddr, idt, len(idt))            
+   END SUBROUTINE file_handle_create
+   
+   SUBROUTINE filegroup_handle_create(ret, idt)
+      IMPLICIT NONE
+      TYPE(XFileGroupHandle), INTENT(OUT):: ret
+      CHARACTER(len = *)    , INTENT(IN) :: idt      
+      CALL xios_filegroup_handle_create(ret%daddr, idt, len(idt))            
+   END SUBROUTINE filegroup_handle_create
+   
+END MODULE IFILE
Index: XMLIO_V2/dev/common/src/xmlio/fortran/igrid.f90
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/fortran/igrid.f90	(revision 274)
+++ XMLIO_V2/dev/common/src/xmlio/fortran/igrid.f90	(revision 274)
@@ -0,0 +1,112 @@
+MODULE IGRID
+   USE, INTRINSIC :: ISO_C_BINDING
+   USE GRID_INTERFACE
+   USE GRIDGROUP_INTERFACE
+   
+   TYPE XGridHandle
+      INTEGER(kind = C_INTPTR_T) :: daddr
+   END TYPE XGridHandle
+   
+   TYPE XGridGroupHandle
+      INTEGER(kind = C_INTPTR_T) :: daddr
+   END TYPE XGridGroupHandle
+   
+   !----------------------------------------------------------------------------
+   INTERFACE set_grid_attributes
+      MODULE PROCEDURE set_grid_attributes_id,set_grid_attributes_hdl
+   END INTERFACE  
+   
+   INTERFACE set_grid_group_attributes
+      MODULE PROCEDURE set_gridgroup_attributes_id,set_gridgroup_attributes_hdl
+   END INTERFACE  
+   !----------------------------------------------------------------------------
+   
+   CONTAINS ! Fonctions disponibles pour les utilisateurs.
+   
+   SUBROUTINE set_grid_attributes_id(grid_id, name_, description_, domain_ref_, axis_ref_)
+      IMPLICIT NONE
+      TYPE(XGridHandle)                             :: grid_hdl
+      CHARACTER(len = *)               , INTENT(IN) :: grid_id
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: name_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: description_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: domain_ref_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: axis_ref_
+      
+      CALL grid_handle_create(grid_hdl, grid_id)
+      CALL set_grid_attributes_hdl(grid_hdl, name_, description_, domain_ref_, axis_ref_)
+
+   END SUBROUTINE set_grid_attributes_id
+
+   SUBROUTINE set_grid_attributes_hdl(grid_hdl, name_, description_, domain_ref_, axis_ref_)
+      IMPLICIT NONE
+      TYPE      (XGridHandle)                       :: grid_hdl
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: name_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: description_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: domain_ref_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: axis_ref_
+      
+      IF (PRESENT(name_))        THEN
+       CALL xios_set_grid_name(grid_hdl%daddr, name_, len(name_))
+      END IF
+      IF (PRESENT(description_)) THEN
+       CALL xios_set_grid_description(grid_hdl%daddr, description_, len(description_))
+      END IF
+      IF (PRESENT(domain_ref_))  THEN
+       CALL xios_set_grid_domain_ref(grid_hdl%daddr, domain_ref_, len(domain_ref_))
+      END IF
+      IF (PRESENT(axis_ref_))    THEN
+       CALL xios_set_grid_axis_ref(grid_hdl%daddr, axis_ref_, len(axis_ref_))
+      END IF
+   END SUBROUTINE set_grid_attributes_hdl
+   
+   SUBROUTINE set_gridgroup_attributes_id(gridgroup_id, name_, description_, domain_ref_, axis_ref_)
+      IMPLICIT NONE
+      TYPE(XGridGroupHandle)                        :: gridgroup_hdl
+      CHARACTER(len = *)               , INTENT(IN) :: gridgroup_id
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: name_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: description_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: domain_ref_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: axis_ref_
+      
+      CALL gridgroup_handle_create(gridgroup_hdl, gridgroup_id)
+      CALL set_gridgroup_attributes_hdl(gridgroup_hdl, name_, description_, domain_ref_, axis_ref_)
+
+   END SUBROUTINE set_gridgroup_attributes_id
+
+   SUBROUTINE set_gridgroup_attributes_hdl(gridgroup_hdl, name_, description_, domain_ref_, axis_ref_)
+      IMPLICIT NONE
+      TYPE      (XGridGroupHandle)                  :: gridgroup_hdl
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: name_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: description_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: domain_ref_
+      CHARACTER(len = *)     , OPTIONAL, INTENT(IN) :: axis_ref_
+      
+      IF (PRESENT(name_))        THEN
+       CALL xios_set_gridgroup_name(gridgroup_hdl%daddr, name_, len(name_))
+      END IF
+      IF (PRESENT(description_)) THEN
+       CALL xios_set_gridgroup_description(gridgroup_hdl%daddr, description_, len(description_))
+      END IF
+      IF (PRESENT(domain_ref_))  THEN
+       CALL xios_set_gridgroup_domain_ref(gridgroup_hdl%daddr, domain_ref_, len(domain_ref_))
+      END IF
+      IF (PRESENT(axis_ref_))    THEN
+       CALL xios_set_gridgroup_axis_ref(gridgroup_hdl%daddr, axis_ref_, len(axis_ref_))
+      END IF
+   END SUBROUTINE set_gridgroup_attributes_hdl
+
+   SUBROUTINE grid_handle_create(ret, idt)
+      IMPLICIT NONE
+      TYPE(XGridHandle), INTENT(OUT):: ret
+      CHARACTER(len = *), INTENT(IN) :: idt      
+      CALL xios_grid_handle_create(ret%daddr, idt, len(idt))            
+   END SUBROUTINE grid_handle_create
+   
+   SUBROUTINE gridgroup_handle_create(ret, idt)
+      IMPLICIT NONE
+      TYPE(XGridGroupHandle), INTENT(OUT):: ret
+      CHARACTER(len = *)     , INTENT(IN) :: idt      
+      CALL xios_gridgroup_handle_create(ret%daddr, idt, len(idt))            
+   END SUBROUTINE gridgroup_handle_create
+   
+END MODULE IGRID
Index: XMLIO_V2/dev/common/src/xmlio/fortran/ixml_tree.f90
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/fortran/ixml_tree.f90	(revision 274)
+++ XMLIO_V2/dev/common/src/xmlio/fortran/ixml_tree.f90	(revision 274)
@@ -0,0 +1,291 @@
+MODULE IXML_TREE
+   USE, INTRINSIC :: ISO_C_BINDING
+   USE IAXIS
+   USE IFILE
+   USE IFIELD
+   USE IGRID
+   USE IDOMAIN
+     
+   INTERFACE ! Ne pas appeler directement/Interface FORTRAN 2003 <-> C99
+     
+      SUBROUTINE xios_xml_tree_add_field(parent_, child_, child_id, child_id_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_
+         INTEGER  (kind = C_INTPTR_T)               :: child_
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id
+         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size
+      END SUBROUTINE xios_xml_tree_add_field
+      
+      SUBROUTINE xios_xml_tree_add_grid(parent_, child_, child_id, child_id_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_
+         INTEGER  (kind = C_INTPTR_T)               :: child_
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id
+         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size
+      END SUBROUTINE xios_xml_tree_add_grid
+      
+      SUBROUTINE xios_xml_tree_add_file(parent_, child_, child_id, child_id_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_
+         INTEGER  (kind = C_INTPTR_T)               :: child_
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id
+         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size
+      END SUBROUTINE xios_xml_tree_add_file
+      
+      SUBROUTINE xios_xml_tree_add_axis(parent_, child_, child_id, child_id_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_
+         INTEGER  (kind = C_INTPTR_T)               :: child_
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id
+         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size
+      END SUBROUTINE xios_xml_tree_add_axis
+      
+      SUBROUTINE xios_xml_tree_add_domain(parent_, child_, child_id, child_id_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_
+         INTEGER  (kind = C_INTPTR_T)               :: child_
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id
+         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size
+      END SUBROUTINE xios_xml_tree_add_domain
+      
+      SUBROUTINE xios_xml_tree_add_fieldtofile(parent_, child_, child_id, child_id_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_
+         INTEGER  (kind = C_INTPTR_T)               :: child_
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id
+         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size
+      END SUBROUTINE xios_xml_tree_add_fieldtofile
+
+      SUBROUTINE xios_xml_tree_add_fieldgroup(parent_, child_, child_id, child_id_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_
+         INTEGER  (kind = C_INTPTR_T)               :: child_
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id
+         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size
+      END SUBROUTINE xios_xml_tree_add_fieldgroup
+
+      SUBROUTINE xios_xml_tree_add_gridgroup(parent_, child_, child_id, child_id_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_
+         INTEGER  (kind = C_INTPTR_T)               :: child_
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id
+         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size
+      END SUBROUTINE xios_xml_tree_add_gridgroup
+
+      SUBROUTINE xios_xml_tree_add_filegroup(parent_, child_, child_id, child_id_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_
+         INTEGER  (kind = C_INTPTR_T)               :: child_
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id
+         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size
+      END SUBROUTINE xios_xml_tree_add_filegroup
+
+      SUBROUTINE xios_xml_tree_add_axisgroup(parent_, child_, child_id, child_id_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_
+         INTEGER  (kind = C_INTPTR_T)               :: child_
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id
+         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size
+      END SUBROUTINE xios_xml_tree_add_axisgroup
+
+      SUBROUTINE xios_xml_tree_add_domaingroup(parent_, child_, child_id, child_id_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_
+         INTEGER  (kind = C_INTPTR_T)               :: child_
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id
+         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size
+      END SUBROUTINE xios_xml_tree_add_domaingroup
+      
+      SUBROUTINE xios_xml_tree_add_fieldgrouptofile(parent_, child_, child_id, child_id_size) BIND(C)
+         USE ISO_C_BINDING
+         INTEGER  (kind = C_INTPTR_T), VALUE        :: parent_
+         INTEGER  (kind = C_INTPTR_T)               :: child_
+         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: child_id
+         INTEGER  (kind = C_INT)     , VALUE        :: child_id_size
+      END SUBROUTINE xios_xml_tree_add_fieldgrouptofile    
+
+      SUBROUTINE xios_xml_tree_show(filename, filename_size) BIND(C)
+         USE ISO_C_BINDING
+         CHARACTER(kind = C_CHAR), DIMENSION(*) :: filename
+         INTEGER  (kind = C_INT) , VALUE        :: filename_size
+      END SUBROUTINE xios_xml_tree_show
+
+      SUBROUTINE xios_xml_parse_file(filename, filename_size) BIND(C)
+         USE ISO_C_BINDING
+         CHARACTER(kind = C_CHAR), DIMENSION(*) :: filename
+         INTEGER  (kind = C_INT) , VALUE        :: filename_size
+      END SUBROUTINE xios_xml_parse_file
+
+      SUBROUTINE xios_xml_parse_string(xmlcontent, xmlcontent_size) BIND(C)
+         USE ISO_C_BINDING
+         CHARACTER(kind = C_CHAR), DIMENSION(*) :: xmlcontent
+         INTEGER  (kind = C_INT) , VALUE        :: xmlcontent_size
+      END SUBROUTINE xios_xml_parse_string
+     
+   END INTERFACE
+   
+   !----------------------------------------------------------------------------
+   INTERFACE xml_tree_add
+      MODULE PROCEDURE xml_tree_add_axis,   xml_tree_add_axisgroup,    &
+                       xml_tree_add_file,   xml_tree_add_filegroup,    &
+                       xml_tree_add_grid,   xml_tree_add_gridgroup,    &
+                       xml_tree_add_field,  xml_tree_add_fieldgroup,   &
+                       xml_tree_add_domain, xml_tree_add_domaingroup,  &
+                       xml_tree_add_fieldgrouptofile, xml_tree_add_fieldtofile
+   END INTERFACE  
+   !----------------------------------------------------------------------------
+   
+   CONTAINS ! Fonctions disponibles pour les utilisateurs.
+
+   SUBROUTINE xml_tree_add_axis(parent_hdl, child_hdl, child_id)
+      TYPE(XAxisGroupHandle)      , INTENT(IN) :: parent_hdl
+      TYPE(XAxisHandle)           , INTENT(OUT):: child_hdl
+      CHARACTER(len = *), OPTIONAL, INTENT(IN) :: child_id
+      IF (PRESENT(child_id)) THEN
+         CALL xios_xml_tree_add_axis(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id))
+      ELSE
+         CALL xios_xml_tree_add_axis(parent_hdl%daddr, child_hdl%daddr, "NONE", -1)
+      END IF
+   END SUBROUTINE xml_tree_add_axis
+   
+   SUBROUTINE xml_tree_add_file(parent_hdl, child_hdl, child_id)
+      TYPE(XFileGroupHandle)      , INTENT(IN) :: parent_hdl
+      TYPE(XFileHandle)           , INTENT(OUT):: child_hdl
+      CHARACTER(len = *), OPTIONAL, INTENT(IN) :: child_id
+      IF (PRESENT(child_id)) THEN
+         CALL xios_xml_tree_add_file(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id))
+      ELSE
+         CALL xios_xml_tree_add_file(parent_hdl%daddr, child_hdl%daddr, "NONE", -1)
+      END IF
+   END SUBROUTINE xml_tree_add_file
+   
+   SUBROUTINE xml_tree_add_grid(parent_hdl, child_hdl, child_id)
+      TYPE(XGridGroupHandle)      , INTENT(IN) :: parent_hdl
+      TYPE(XGridHandle)           , INTENT(OUT):: child_hdl
+      CHARACTER(len = *), OPTIONAL, INTENT(IN) :: child_id
+      IF (PRESENT(child_id)) THEN
+         CALL xios_xml_tree_add_grid(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id))
+      ELSE
+         CALL xios_xml_tree_add_grid(parent_hdl%daddr, child_hdl%daddr, "NONE", -1)
+      END IF
+   END SUBROUTINE xml_tree_add_grid
+   
+   SUBROUTINE xml_tree_add_field(parent_hdl, child_hdl, child_id)
+      TYPE(XFieldGroupHandle)     , INTENT(IN) :: parent_hdl
+      TYPE(XFieldHandle)          , INTENT(OUT):: child_hdl
+      CHARACTER(len = *), OPTIONAL, INTENT(IN) :: child_id
+      IF (PRESENT(child_id)) THEN
+         CALL xios_xml_tree_add_field(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id))
+      ELSE
+         CALL xios_xml_tree_add_field(parent_hdl%daddr, child_hdl%daddr, "NONE", -1)
+      END IF
+   END SUBROUTINE xml_tree_add_field
+   
+   SUBROUTINE xml_tree_add_domain(parent_hdl, child_hdl, child_id)
+      TYPE(XDomainGroupHandle)     , INTENT(IN) :: parent_hdl
+      TYPE(XDomainHandle)          , INTENT(OUT):: child_hdl
+      CHARACTER(len = *), OPTIONAL , INTENT(IN) :: child_id
+      IF (PRESENT(child_id)) THEN
+         CALL xios_xml_tree_add_domain(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id))
+      ELSE
+         CALL xios_xml_tree_add_domain(parent_hdl%daddr, child_hdl%daddr, "NONE", -1)
+      END IF
+   END SUBROUTINE xml_tree_add_domain
+   
+   SUBROUTINE xml_tree_add_fieldtofile(parent_hdl, child_hdl, child_id)
+      TYPE(XFileHandle)            , INTENT(IN) :: parent_hdl
+      TYPE(XFieldHandle)           , INTENT(OUT):: child_hdl
+      CHARACTER(len = *), OPTIONAL , INTENT(IN) :: child_id
+      IF (PRESENT(child_id)) THEN
+         CALL xios_xml_tree_add_fieldtofile(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id))
+      ELSE
+         CALL xios_xml_tree_add_fieldtofile(parent_hdl%daddr, child_hdl%daddr, "NONE", -1)
+      END IF
+   END SUBROUTINE xml_tree_add_fieldtofile
+
+   SUBROUTINE xml_tree_add_axisgroup(parent_hdl, child_hdl, child_id)
+      TYPE(XAxisGroupHandle)      , INTENT(IN) :: parent_hdl
+      TYPE(XAxisGroupHandle)      , INTENT(OUT):: child_hdl
+      CHARACTER(len = *), OPTIONAL, INTENT(IN) :: child_id
+      IF (PRESENT(child_id)) THEN
+         CALL xios_xml_tree_add_axisgroup(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id))
+      ELSE
+         CALL xios_xml_tree_add_axisgroup(parent_hdl%daddr, child_hdl%daddr, "NONE", -1)
+      END IF
+   END SUBROUTINE xml_tree_add_axisgroup
+
+   SUBROUTINE xml_tree_add_filegroup(parent_hdl, child_hdl, child_id)
+      TYPE(XFileGroupHandle)      , INTENT(IN) :: parent_hdl
+      TYPE(XFileGroupHandle)      , INTENT(OUT):: child_hdl
+      CHARACTER(len = *), OPTIONAL, INTENT(IN) :: child_id
+      IF (PRESENT(child_id)) THEN
+         CALL xios_xml_tree_add_filegroup(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id))
+      ELSE
+         CALL xios_xml_tree_add_filegroup(parent_hdl%daddr, child_hdl%daddr, "NONE", -1)
+      END IF
+   END SUBROUTINE xml_tree_add_filegroup
+
+   SUBROUTINE xml_tree_add_gridgroup(parent_hdl, child_hdl, child_id)
+      TYPE(XGridGroupHandle)      , INTENT(IN) :: parent_hdl
+      TYPE(XGridGroupHandle)      , INTENT(OUT):: child_hdl
+      CHARACTER(len = *), OPTIONAL, INTENT(IN) :: child_id
+      IF (PRESENT(child_id)) THEN
+         CALL xios_xml_tree_add_gridgroup(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id))
+      ELSE
+         CALL xios_xml_tree_add_gridgroup(parent_hdl%daddr, child_hdl%daddr, "NONE", -1)
+      END IF
+   END SUBROUTINE xml_tree_add_gridgroup
+
+   SUBROUTINE xml_tree_add_fieldgroup(parent_hdl, child_hdl, child_id)
+      TYPE(XFieldGroupHandle)     , INTENT(IN) :: parent_hdl
+      TYPE(XFieldGroupHandle)     , INTENT(OUT):: child_hdl
+      CHARACTER(len = *), OPTIONAL, INTENT(IN) :: child_id
+      IF (PRESENT(child_id)) THEN
+         CALL xios_xml_tree_add_fieldgroup(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id))
+      ELSE
+         CALL xios_xml_tree_add_fieldgroup(parent_hdl%daddr, child_hdl%daddr, "NONE", -1)
+      END IF
+   END SUBROUTINE xml_tree_add_fieldgroup
+
+   SUBROUTINE xml_tree_add_domaingroup(parent_hdl, child_hdl, child_id)
+      TYPE(XDomainGroupHandle)     , INTENT(IN) :: parent_hdl
+      TYPE(XDomainGroupHandle)     , INTENT(OUT):: child_hdl
+      CHARACTER(len = *), OPTIONAL , INTENT(IN) :: child_id
+      IF (PRESENT(child_id)) THEN
+         CALL xios_xml_tree_add_domaingroup(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id))
+      ELSE
+         CALL xios_xml_tree_add_domaingroup(parent_hdl%daddr, child_hdl%daddr, "NONE", -1)
+      END IF
+   END SUBROUTINE xml_tree_add_domaingroup
+
+   SUBROUTINE xml_tree_add_fieldgrouptofile(parent_hdl, child_hdl, child_id)
+      TYPE(XFileHandle)            , INTENT(IN) :: parent_hdl
+      TYPE(XFieldGroupHandle)      , INTENT(OUT):: child_hdl
+      CHARACTER(len = *), OPTIONAL , INTENT(IN) :: child_id
+      IF (PRESENT(child_id)) THEN
+         CALL xios_xml_tree_add_fieldgrouptofile(parent_hdl%daddr, child_hdl%daddr, child_id, len(child_id))
+      ELSE
+         CALL xios_xml_tree_add_fieldgrouptofile(parent_hdl%daddr, child_hdl%daddr, "NONE", -1)
+      END IF
+   END SUBROUTINE xml_tree_add_fieldgrouptofile
+
+   SUBROUTINE xml_tree_show(filename)
+      CHARACTER(len = *), OPTIONAL, INTENT(IN) :: filename
+      IF (PRESENT(filename)) THEN
+         CALL xios_xml_tree_show(filename, len(filename))
+      ELSE
+         CALL xios_xml_tree_show("NONE", -1)
+      END IF
+   END SUBROUTINE xml_tree_show
+   
+   SUBROUTINE xml_parse_file(filename)
+      CHARACTER(len = *), INTENT(IN) :: filename
+      CALL xios_xml_parse_file(filename, len(filename))
+   END SUBROUTINE xml_Parse_File
+   
+   SUBROUTINE xml_parse_string(xmlcontent)
+      CHARACTER(len = *), INTENT(IN) :: xmlcontent
+      CALL xios_xml_parse_string(xmlcontent, len(xmlcontent))
+   END SUBROUTINE xml_Parse_String
+      
+END MODULE IXML_TREE
Index: XMLIO_V2/dev/common/src/xmlio/fortran/ixmlioserver.f03.in
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/fortran/ixmlioserver.f03.in	(revision 273)
+++ 	(revision )
@@ -1,414 +1,0 @@
-! --------------------------------------------- !
-!                 IXMLIOSERVER                  !
-!          GESTION DES ENTREES-SORTIES          !
-! --------------------------------------------- !
-
-#include "macro.inc"
-
-MODULE XIOS
-   USE, INTRINSIC :: ISO_C_BINDING
-
-   ! Ne jamais modifier les valeurs internes de ce type dans le code fortran.
-   TYPE XHandle
-      INTEGER(kind = C_INTPTR_T) :: daddr
-   END TYPE XHandle
-
-   ! enum XDType
-   INTEGER(kind = C_INT), PARAMETER  :: NOTYPE = 0
-   INTEGER(kind = C_INT), PARAMETER  :: DTREATMENT = 1, DDATE = 2, CALENDAR = 3, ECONTEXT = 4
-   INTEGER(kind = C_INT), PARAMETER  :: EAXIS = 5 , EDOMAIN = 6 , EFIELD = 7 , EFILE = 8 , EGRID = 9
-   INTEGER(kind = C_INT), PARAMETER  :: GAXIS = 10, GDOMAIN = 11, GFIELD = 12, GFILE = 13, GGRID = 14
-
-   ! enum XCalendarType
-   INTEGER(kind = C_INT), PARAMETER  :: D360 = 0 , ALLLEAP = 1 , NOLEAP = 2 , JULIAN = 3 , GREGORIAN = 4
-
-   TYPE XDate
-      INTEGER :: year, month, day, hour, minute, second
-   END TYPE XDate
-
-   TYPE XDuration
-      REAL(kind = 8) :: year, month, day, hour, minute, second
-   END TYPE XDuration
-
-   ! Autres constantes
-   TYPE(XHandle)  , PARAMETER :: NULLHANDLE = XHandle(0)
-
-   INTERFACE ! Ne pas appeler directement/Interface FORTRAN 2003 <-> C99
-
-      SUBROUTINE xios_handle_create(ret, dtype, idt, idt_size) BIND(C)
-         import C_CHAR, C_INTPTR_T, C_INT
-         INTEGER  (kind = C_INTPTR_T)           :: ret
-         INTEGER  (kind = C_INT), VALUE         :: dtype
-         CHARACTER(kind = C_CHAR), DIMENSION(*) :: idt
-         INTEGER  (kind = C_INT), VALUE         :: idt_size
-      END SUBROUTINE xios_handle_create
-
-      SUBROUTINE xios_set_timestep(ts_year, ts_month, ts_day,          &
-                                   ts_hour, ts_minute, ts_second) BIND(C)
-         import C_DOUBLE
-         REAL (kind = C_DOUBLE), VALUE :: ts_year, ts_month, ts_day,   &
-                                          ts_hour, ts_minute, ts_second
-      END SUBROUTINE xios_set_timestep
-
-      SUBROUTINE xios_update_calendar(step) BIND(C)
-         import C_INT
-         INTEGER  (kind = C_INT), VALUE :: step
-      END SUBROUTINE xios_update_calendar
-
-      SUBROUTINE xios_xml_tree_add(parent_, parent_type, child_, child_type, child_id, child_id_size) BIND(C)
-         import C_CHAR, C_INT, C_INTPTR_T
-         INTEGER  (kind = C_INTPTR_T), VALUE    :: parent_
-         INTEGER  (kind = C_INT), VALUE         :: parent_type
-         INTEGER  (kind = C_INTPTR_T)           :: child_
-         INTEGER  (kind = C_INT), VALUE         :: child_type
-         CHARACTER(kind = C_CHAR), DIMENSION(*) :: child_id
-         INTEGER  (kind = C_INT), VALUE         :: child_id_size
-      END SUBROUTINE xios_xml_tree_add
-
-      SUBROUTINE  xios_xml_tree_show(filename, filename_size) BIND(C)
-         import C_CHAR, C_INT
-         CHARACTER(kind = C_CHAR), DIMENSION(*) :: filename
-         INTEGER  (kind = C_INT), VALUE         :: filename_size
-      END SUBROUTINE xios_xml_tree_show
-
-      SUBROUTINE xios_xml_parse_file(filename, filename_size) BIND(C)
-         import C_CHAR, C_INT
-         CHARACTER(kind = C_CHAR), DIMENSION(*) :: filename
-         INTEGER  (kind = C_INT), VALUE         :: filename_size
-      END SUBROUTINE xios_xml_Parse_File
-
-      SUBROUTINE xios_xml_parse_string(xmlcontent, xmlcontent_size) BIND(C)
-         import C_CHAR, C_INT
-         CHARACTER(kind = C_CHAR), DIMENSION(*) :: xmlcontent
-         INTEGER  (kind = C_INT), VALUE         :: xmlcontent_size
-      END SUBROUTINE xios_xml_Parse_String
-
-      SUBROUTINE xios_context_set_current(context, withswap) BIND(C)
-         import C_BOOL, C_INT, C_INTPTR_T
-         INTEGER  (kind = C_INTPTR_T), VALUE :: context
-         LOGICAL (kind = C_BOOL), VALUE      :: withswap
-      END SUBROUTINE xios_context_set_current
-
-      SUBROUTINE xios_context_create(context, context_id, context_id_size, calendar_type, &
-                                     year, month, day, hour, minute, second) BIND(C)
-         import C_CHAR, C_INT, C_INTPTR_T
-         INTEGER  (kind = C_INTPTR_T)           :: context
-         CHARACTER(kind = C_CHAR), DIMENSION(*) :: context_id
-         INTEGER  (kind = C_INT), VALUE         :: context_id_size
-         INTEGER  (kind = C_INT), VALUE         :: calendar_type, year, month, day, hour, minute, second
-      END SUBROUTINE xios_context_create
-
-      SUBROUTINE xios_dtreatment_start(context_hdl, filetype, comm_client_server) BIND(C)
-         import C_INTPTR_T, C_INT
-         INTEGER  (kind = C_INTPTR_T), VALUE  :: context_hdl
-         INTEGER  (kind = C_INT), VALUE       :: filetype, comm_client_server
-      END SUBROUTINE xios_dtreatment_start
-
-      SUBROUTINE xios_dtreatment_end() BIND(C)
-         ! Sans argument
-      END SUBROUTINE xios_dtreatment_end
-
-      SUBROUTINE xios_write_data(fieldid, fieldid_size, data_k8, data_Xsize, data_Ysize, data_Zsize) BIND(C)
-         import C_INT, C_CHAR, C_PTR, C_DOUBLE, C_BOOL
-         CHARACTER(kind = C_CHAR), DIMENSION(*) :: fieldid
-         INTEGER  (kind = C_INT),  VALUE        :: fieldid_size
-         REAL(kind = C_DOUBLE), DIMENSION(*)    :: data_k8
-         INTEGER  (kind = C_INT), VALUE         :: data_Xsize, data_Ysize, data_Zsize
-      END SUBROUTINE xios_write_data
-      
-      SUBROUTINE xios_write_data_f(fieldid, fieldid_size, data_k4, data_Xsize, data_Ysize, data_Zsize) BIND(C)
-         import C_INT, C_CHAR, C_PTR, C_FLOAT, C_BOOL
-         CHARACTER(kind = C_CHAR), DIMENSION(*) :: fieldid
-         INTEGER  (kind = C_INT),  VALUE        :: fieldid_size
-         REAL(kind = C_FLOAT), DIMENSION(*)     :: data_k4
-         INTEGER  (kind = C_INT), VALUE         :: data_Xsize, data_Ysize, data_Zsize
-      END SUBROUTINE xios_write_data_f
-
-      SUBROUTINE  xios_init_ioserver(comm_client) BIND(C)
-	 import C_INT
-         INTEGER  (kind = C_INT) :: comm_client
-      END SUBROUTINE xios_init_ioserver
-
-#define DECLARE_ATTRIBUTE(type, name) \
-        DECLARE_INTERFACE(axis, type, name)
-#include "../config/axis_attribute.conf"
-
-#undef  DECLARE_ATTRIBUTE
-#define DECLARE_ATTRIBUTE(type, name) \
-        DECLARE_INTERFACE(field, type, name)
-#include "../config/field_attribute.conf"
-
-#undef  DECLARE_ATTRIBUTE
-#define DECLARE_ATTRIBUTE(type, name) \
-        DECLARE_INTERFACE(context, type, name)
-#include "../config/context_attribute.conf"
-
-#undef  DECLARE_ATTRIBUTE
-#define DECLARE_ATTRIBUTE(type, name) \
-        DECLARE_INTERFACE(domain, type, name)
-#include "../config/domain_attribute.conf"
-
-#undef  DECLARE_ATTRIBUTE
-#define DECLARE_ATTRIBUTE(type, name) \
-        DECLARE_INTERFACE(file, type, name)
-#include "../config/file_attribute.conf"
-
-#undef  DECLARE_ATTRIBUTE
-#define DECLARE_ATTRIBUTE(type, name) \
-        DECLARE_INTERFACE(grid, type, name)
-#include "../config/grid_attribute.conf"
-
-   END INTERFACE
-
-   CONTAINS ! Fonctions disponibles pour les utilisateurs.
-
-   SUBROUTINE  init_ioserver(comm_client)
-      INTEGER, INTENT(INOUT) :: comm_client
-      CALL xios_init_ioserver(comm_client)
-   END SUBROUTINE init_ioserver
-
-   SUBROUTINE handle_create(ret, dtype, idt)
-      TYPE(XHandle), INTENT(OUT)     :: ret
-      INTEGER, INTENT(IN)            :: dtype
-      CHARACTER(len = *), INTENT(IN) :: idt
-      CALL xios_handle_create(ret%daddr, dtype, idt, len(idt))
-   END SUBROUTINE handle_create
-
-   SUBROUTINE set_timestep(timestep)
-      TYPE(XDuration), INTENT(IN):: timestep
-      CALL xios_set_timestep(timestep%year, timestep%month , timestep%day,   &
-                             timestep%hour, timestep%minute, timestep%second)
-   END SUBROUTINE set_timestep
-
-   SUBROUTINE update_calendar(step)
-      INTEGER, INTENT(IN):: step
-      CALL xios_update_calendar(step)
-   END SUBROUTINE update_calendar
-
-   SUBROUTINE xml_tree_add(parent_hdl, parent_type, child_hdl, child_type, child_id)
-      TYPE(XHandle), INTENT(IN)                :: parent_hdl
-      TYPE(XHandle), INTENT(OUT)               :: child_hdl
-      INTEGER, INTENT(IN)                      :: child_type, parent_type
-      CHARACTER(len = *), OPTIONAL, INTENT(IN) :: child_id
-      child_hdl = NULLHANDLE
-
-      IF (PRESENT(child_id)) THEN
-         CALL xios_xml_tree_add(parent_hdl%daddr, parent_type, child_hdl%daddr, child_type, child_id, len(child_id))
-      ELSE
-         CALL xios_xml_tree_add(parent_hdl%daddr, parent_type, child_hdl%daddr, child_type, "NONE", -1)
-      END IF
-   END SUBROUTINE xml_tree_add
-
-   SUBROUTINE xml_tree_show(filename)
-      CHARACTER(len = *), OPTIONAL, INTENT(IN) :: filename
-      IF (PRESENT(filename)) THEN
-         CALL xios_xml_tree_show(filename, len(filename))
-      ELSE
-         CALL xios_xml_tree_show("NONE", -1)
-      END IF
-   END SUBROUTINE xml_tree_show
-
-   SUBROUTINE xml_parse_file(filename)
-      CHARACTER(len = *), INTENT(IN) :: filename
-      CALL xios_xml_Parse_File(filename, len(filename))
-   END SUBROUTINE xml_Parse_File
-
-   SUBROUTINE xml_parse_string(xmlcontent)
-      CHARACTER(len = *), INTENT(IN) :: xmlcontent
-      CALL xios_xml_Parse_String(xmlcontent, len(xmlcontent))
-   END SUBROUTINE xml_Parse_String
-
-   SUBROUTINE context_set_current(context, withswap)
-      TYPE(XHandle), INTENT(IN)                :: context
-      LOGICAL (kind = 1), OPTIONAL, INTENT(IN) :: withswap
-      LOGICAL (kind = 1)                       :: wswap
-      IF (PRESENT(withswap)) THEN
-         wswap = withswap
-      ELSE
-         wswap = .FALSE.
-      END IF
-      CALL xios_context_set_current(context%daddr, wswap)
-   END SUBROUTINE context_set_current
-
-   SUBROUTINE context_create(context_hdl, context_id, calendar_type, init_date)
-      TYPE(XHandle), INTENT(OUT)        :: context_hdl
-      CHARACTER(len = *), INTENT(IN)    :: context_id
-      INTEGER, INTENT(IN)               :: calendar_type
-      TYPE(XDate), INTENT(IN), OPTIONAL :: init_date
-      IF (PRESENT(init_date)) THEN
-         CALL xios_context_create(context_hdl%daddr, context_id, len(context_id), calendar_type, &
-                                  init_date%year, init_date%month, init_date%day,                &
-                                  init_date%hour, init_date%minute, init_date%second)
-      ELSE
-         CALL xios_context_create(context_hdl%daddr, context_id, len(context_id), calendar_type, &
-                                 0, 1, 1, 0, 0, 0)
-      END IF
-   END SUBROUTINE context_create
-
-   SUBROUTINE dtreatment_start(context_hdl, filetype, comm_client_server)
-      TYPE(XHandle), INTENT(IN), VALUE :: context_hdl
-      INTEGER, INTENT(IN), OPTIONAL    :: filetype, comm_client_server
-      INTEGER                          :: filetype_, comm_client_server_
-      
-      IF (PRESENT(filetype)) THEN
-         filetype_ = filetype
-      ELSE
-         filetype_ = NETCDF4
-      END IF
-      
-      IF (PRESENT(comm_client_server)) THEN
-         comm_client_server_ = comm_client_server
-      ELSE
-         comm_client_server_ = -1
-      END IF
-      
-      CALL context_set_current(context_hdl)
-      CALL xios_dtreatment_start(context_hdl%daddr, filetype_, comm_client_server_)
-   END SUBROUTINE dtreatment_start
-
-   SUBROUTINE dtreatment_end(context_hdl)
-      TYPE(XHandle), INTENT(IN), VALUE :: context_hdl
-      !CALL context_set_current(context_hdl)
-      CALL xios_dtreatment_end()
-   END SUBROUTINE dtreatment_end
-
-   SUBROUTINE write_data (fieldid, data1d_k4, data2d_k4, data3d_k4, data1d_k8, data2d_k8, data3d_k8)
-      CHARACTER(len = *), INTENT(IN)                     :: fieldid
-      REAL(kind = 8), DIMENSION(*), OPTIONAL, INTENT(IN) :: data1d_k8(:), data2d_k8(:,:), data3d_k8(:,:,:)
-      REAL(kind = 4), DIMENSION(*), OPTIONAL, INTENT(IN) :: data1d_k4(:), data2d_k4(:,:), data3d_k4(:,:,:)
-      
-      IF((.NOT. PRESENT(data1d_k8)) .AND. &
-         (.NOT. PRESENT(data2d_k8)) .AND. &
-         (.NOT. PRESENT(data3d_k8))) THEN
-         PRINT *, "(F2003 interface) Veuillez spÃÂ©cifier des donnÃ©es Ã  Ã©crire !"
-         STOP
-      END IF
-      
-      IF (PRESENT (data1d_k8)) THEN
-         CALL xios_write_data(fieldid, len(fieldid), data1d_k8, size(data1d_k8, 1), -1, -1)
-      ELSE IF (PRESENT (data2d_k8)) THEN
-         CALL xios_write_data(fieldid, len(fieldid), data2d_k8, size(data2d_k8, 1), size(data2d_k8, 2), -1)
-      ELSE IF (PRESENT (data3d_k8)) THEN
-         CALL xios_write_data(fieldid, len(fieldid), data3d_k8, size(data3d_k8, 1), size(data3d_k8, 2), size(data3d_k8, 3))
-      END IF
-      
-      IF (PRESENT (data1d_k4)) THEN
-         CALL xios_write_data_f(fieldid, len(fieldid), data1d_k4, size(data1d_k4, 1), -1, -1)
-      ELSE IF (PRESENT (data2d_k4)) THEN
-         CALL xios_write_data_f(fieldid, len(fieldid), data2d_k4, size(data2d_k4, 1), size(data2d_k4, 2), -1)
-      ELSE IF (PRESENT (data3d_k4)) THEN
-         CALL xios_write_data_f(fieldid, len(fieldid), data3d_k4, size(data3d_k4, 1), size(data3d_k4, 2), size(data3d_k4, 3))
-      END IF
-      
-      
-   END SUBROUTINE
-
-   SUBROUTINE  set_axis_attributes( axis_hdl, ftype &
-   #undef  DECLARE_ATTRIBUTE
-   #define DECLARE_ATTRIBUTE(type, name) arg_##type(name) &
-   #include "../config/axis_attribute.conf"
-   )
-
-      TYPE(XHandle) :: axis_hdl
-      INTEGER (kind = C_INT)      :: ftype
-      #undef  DECLARE_ATTRIBUTE
-      #define DECLARE_ATTRIBUTE(type, name) def_##type(name)
-      #include "../config/axis_attribute.conf"
-
-      #undef  DECLARE_ATTRIBUTE
-      #define DECLARE_ATTRIBUTE(type, name) ip_##type(axis, name)
-      #include "../config/axis_attribute.conf"
-
-   END SUBROUTINE set_axis_attributes
-
-   SUBROUTINE  set_field_attributes( field_hdl, ftype &
-   #undef  DECLARE_ATTRIBUTE
-   #define DECLARE_ATTRIBUTE(type, name) arg_##type(name) &
-   #include "../config/field_attribute.conf"
-   )
-
-      TYPE(XHandle) :: field_hdl
-      INTEGER (kind = C_INT)      :: ftype
-      #undef  DECLARE_ATTRIBUTE
-      #define DECLARE_ATTRIBUTE(type, name) def_##type(name)
-      #include "../config/field_attribute.conf"
-
-      #undef  DECLARE_ATTRIBUTE
-      #define DECLARE_ATTRIBUTE(type, name) ip_##type(field, name)
-      #include "../config/field_attribute.conf"
-
-   END SUBROUTINE set_field_attributes
-
-   SUBROUTINE  set_context_attributes( context_hdl, ftype &
-   #undef  DECLARE_ATTRIBUTE
-   #define DECLARE_ATTRIBUTE(type, name) arg_##type(name) &
-   #include "../config/context_attribute.conf"
-   )
-
-      TYPE(XHandle) :: context_hdl
-      INTEGER (kind = C_INT)      :: ftype
-      #undef  DECLARE_ATTRIBUTE
-      #define DECLARE_ATTRIBUTE(type, name) def_##type(name)
-      #include "../config/context_attribute.conf"
-
-      #undef  DECLARE_ATTRIBUTE
-      #define DECLARE_ATTRIBUTE(type, name) ip_##type(context, name)
-      #include "../config/context_attribute.conf"
-
-   END SUBROUTINE set_context_attributes
-
-   SUBROUTINE  set_domain_attributes( domain_hdl, ftype &
-   #undef  DECLARE_ATTRIBUTE
-   #define DECLARE_ATTRIBUTE(type, name) arg_##type(name) &
-   #include "../config/domain_attribute.conf"
-   )
-
-      TYPE(XHandle) :: domain_hdl
-      INTEGER (kind = C_INT)      :: ftype
-      #undef  DECLARE_ATTRIBUTE
-      #define DECLARE_ATTRIBUTE(type, name) def_##type(name)
-      #include "../config/domain_attribute.conf"
-
-      #undef  DECLARE_ATTRIBUTE
-      #define DECLARE_ATTRIBUTE(type, name) ip_##type(domain, name)
-      #include "../config/domain_attribute.conf"
-
-   END SUBROUTINE set_domain_attributes
-
-   SUBROUTINE  set_grid_attributes( grid_hdl, ftype &
-   #undef  DECLARE_ATTRIBUTE
-   #define DECLARE_ATTRIBUTE(type, name) arg_##type(name) &
-   #include "../config/grid_attribute.conf"
-   )
-
-      TYPE(XHandle) :: grid_hdl
-      INTEGER (kind = C_INT)      :: ftype
-      #undef  DECLARE_ATTRIBUTE
-      #define DECLARE_ATTRIBUTE(type, name) def_##type(name)
-      #include "../config/grid_attribute.conf"
-
-      #undef  DECLARE_ATTRIBUTE
-      #define DECLARE_ATTRIBUTE(type, name) ip_##type(grid, name)
-      #include "../config/grid_attribute.conf"
-
-   END SUBROUTINE set_grid_attributes
-
-   SUBROUTINE  set_file_attributes( file_hdl, ftype &
-   #undef  DECLARE_ATTRIBUTE
-   #define DECLARE_ATTRIBUTE(type, name) arg_##type(name) &
-   #include "../config/file_attribute.conf"
-   )
-
-      TYPE(XHandle) :: file_hdl
-      INTEGER (kind = C_INT)      :: ftype
-      #undef  DECLARE_ATTRIBUTE
-      #define DECLARE_ATTRIBUTE(type, name) def_##type(name)
-      #include "../config/file_attribute.conf"
-
-      #undef  DECLARE_ATTRIBUTE
-      #define DECLARE_ATTRIBUTE(type, name) ip_##type(file, name)
-      #include "../config/file_attribute.conf"
-
-   END SUBROUTINE set_file_attributes
-
-END MODULE XIOS
Index: XMLIO_V2/dev/common/src/xmlio/fortran/macro.inc
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/fortran/macro.inc	(revision 273)
+++ 	(revision )
@@ -1,145 +1,0 @@
-#define iarg_bool(name) ,name
-#define iarg_double(name) ,name
-#define iarg_int(name) ,name
-#define iarg_StdString(name) ,name iarg_int(name##_size)
-
-#define iarg_ARRAY1(name) ,name iarg_int(name##_extent1)
-#define iarg_ARRAY2(name) iarg_ARRAY1(name) iarg_int(name##_extent2)
-#define iarg_ARRAY3(name) iarg_ARRAY2(name) iarg_int(name##_extent3)
-#define iarg_ARRAY(type, numdim) iarg_ARRAY##numdim
-
-//--------------------------------
-
-#define arg_bool(name) ,name##_
-#define arg_double(name) ,name##_
-#define arg_int(name) ,name##_
-#define arg_StdString(name) ,name##_
-#define arg_ARRAY_(name) ,name##_
-#define arg_ARRAY(type, numdim) arg##_ARRAY_
-
-//---------------------------------
-
-#define dec_bool(name) \
-   LOGICAL (kind = C_BOOL) :: name;
-
-#define dec_int(name) \
-   INTEGER (kind = C_INT) :: name;
-   
-#define dec_double(name) \
-   REAL (kind = C_DOUBLE) :: name;
-
-#define dec_StdString(name) \
-   CHARACTER(kind = C_CHAR), DIMENSION(*) :: name; \
-   dec_int(name##_size)
-
-#define dec_double1(name) \
-   REAL(kind = C_DOUBLE), DIMENSION(*) :: name; \
-   dec_int(name##_extent1)
-#define dec_double2(name) dec_double1(name) dec_int(name##_extent2)
-#define dec_double3(name) dec_double2(name) dec_int(name##_extent3)
-
-#define dec_bool1(name) \
-   LOGICAL(kind = C_BOOL), DIMENSION(*) :: name; \
-   dec_int(name##_extent1)
-#define dec_bool2(name) dec_bool1(name) dec_int(name##_extent2)
-#define dec_bool3(name) dec_bool2(name) dec_int(name##_extent3)
-
-#define dec_int1(name) \
-   INTEGER(kind = C_INT), DIMENSION(*) :: name; \
-   dec_int(name##_extent1)
-#define dec_int2(name) dec_int1(name) dec_int(name##_extent2)
-#define dec_int3(name) dec_int2(name) dec_int(name##_extent3)
-
-#define dec_ARRAY(type, numdim) dec_##type##numdim
-
-//---------------------------------
-
-
-#define def_bool(name) \
-   LOGICAL(kind = 1),  OPTIONAL, INTENT(IN) :: name##_
-
-#define def_int(name) \
-   INTEGER,  OPTIONAL, INTENT(IN) :: name##_
-   
-#define def_double(name) \
-   REAL(kind=8),  OPTIONAL, INTENT(IN) :: name##_
-
-#define def_StdString(name) \
-   CHARACTER(len = *), OPTIONAL, INTENT(IN) :: name##_
-
-
-#define def_double1(name) \
-   REAL(kind = 8), dimension(*), OPTIONAL, INTENT(IN) :: name##_(:)
-#define def_double2(name) \
-   REAL(kind = 8), dimension(*), OPTIONAL, INTENT(IN) :: name##_(:,:)
-#define def_double3(name) \
-   REAL(kind = 8), dimension(*), OPTIONAL, INTENT(IN) :: name##_(:,:,:)
-
-//-
-
-#define def_bool1(name) \
-   LOGICAL(kind = 1), dimension(*), OPTIONAL, INTENT(IN) :: name##_(:)
-#define def_bool2(name) \
-   LOGICAL(kind = 1), dimension(*), OPTIONAL, INTENT(IN) :: name##_(:,:)
-#define def_bool3(name) \
-   LOGICAL(kind = 1), dimension(*), OPTIONAL, INTENT(IN) :: name##_(:,:,:)
-
-//-
-
-#define def_int1(name) \
-   INTEGER, dimension(*), OPTIONAL, INTENT(IN) :: name##_(:)
-#define def_int2(name) \
-   INTEGER, dimension(*), OPTIONAL, INTENT(IN) :: name##_(:,:)
-#define def_int3(name) \
-   INTEGER, dimension(*), OPTIONAL, INTENT(IN) :: name##_(:,:,:)
-
-#define def_ARRAY(type, numdim) def_##type##numdim
-
-//---------------------------------
-
-#define ip_simple(class, name) \
-   IF (PRESENT(name##_)) THEN; \
-      CALL xios_set_##class##_##name(class##_hdl%daddr, ftype, name##_); \
-   END IF;
-
-#define ip_bool(class, name) ip_simple(class, name)
-#define ip_int(class, name) ip_simple(class, name)
-#define ip_double(class, name) ip_simple(class, name)
-
-#define ip_StdString(class, name) \
-   IF (PRESENT(name##_)) THEN; \
-      CALL xios_set_##class##_##name(class##_hdl%daddr, ftype, name##_, len(name##_)); \
-   END IF;
-
-#define ip_ARRAY1(class, name) \
-   IF (PRESENT(name##_)) THEN; \
-      CALL xios_set_##class##_##name(class##_hdl%daddr, ftype, name##_, size(name##_, 1)); \
-   END IF;
-
-#define ip_ARRAY2(class, name) \
-   IF (PRESENT(name##_)) THEN; \
-      CALL xios_set_##class##_##name(class##_hdl%daddr, ftype, name##_, size(name##_, 1), size(name##_, 2)); \
-   END IF;
-
-#define ip_ARRAY3(class, name) \
-    IF (PRESENT(name##_)) THEN; \
-      CALL xios_set_##class##_##name(class##_hdl%daddr, ftype, name##_, size(name##_, 1), size(name##_, 3), size(name##_, 3)); \
-   END IF;
-
-#define ip_ARRAY(type, numdim) ip_ARRAY##numdim
-
-//---------------------------------
-
-#define  DECLARE_INTERFACE(class, type, name)                                           \
-   SUBROUTINE xios_set_##class##_##name(class##_hdl, ftype iarg_##type(name)) BIND(C);  \
-   USE ISO_C_BINDING;                                                                   \
-   INTEGER  (kind = C_INTPTR_T), VALUE :: class##_hdl;                                  \
-   INTEGER  (kind = C_INT), VALUE      :: ftype;                                        \
-   dec_##type(name)                                                                     \
-   END SUBROUTINE xios_set_##class##_##name;                                            \
-//   SUBROUTINE xios_get_##class##_##name(class##_hdl iarg_##type(name)) BIND(C); \
-//   USE ISO_C_BINDING;                                                           \
-//   INTEGER  (kind = C_INTPTR_T), VALUE :: class##_hdl;                          \
-//   dec_##type(name)                                                             \
-//   END SUBROUTINE xios_get_##class##_##name
-
Index: XMLIO_V2/dev/common/src/xmlio/group_template.hpp
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/group_template.hpp	(revision 273)
+++ XMLIO_V2/dev/common/src/xmlio/group_template.hpp	(revision 274)
@@ -43,5 +43,5 @@
 
          virtual void parse(xml::CXMLNode & node);
-         inline void parse(xml::CXMLNode & node, bool withAttr);
+         virtual void parse(xml::CXMLNode & node, bool withAttr);
          
          /// Test ///
Index: XMLIO_V2/dev/common/src/xmlio/main_server.cpp
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/main_server.cpp	(revision 273)
+++ XMLIO_V2/dev/common/src/xmlio/main_server.cpp	(revision 274)
@@ -8,6 +8,4 @@
 #include "server.hpp"
 
-#include "fake.hpp"
-
 // Point d'entrÃ©e du programme principal
 
@@ -17,22 +15,15 @@
    {
       MPIComm comm_client, comm_client_server, comm_server;
-      //comm::CMPIManager::Initialise(&argc, &argv); // < seulement en mode connectÃ©
+      comm::CMPIManager::Initialise(&argc, &argv); // < seulement en mode connectÃ©
       
-      //CTreeManager::ParseFile  ("test/iodef_simple_test.xml");
-      //CTreeManager::PrintTreeToFile("wk/def/test.xml");
+      CTreeManager::ParseFile  ("test/iodef_simple_test.xml");
+      CTreeManager::PrintTreeToFile("wk/def/test.xml");
      
-      //comm::CMPIManager::Finalize();               // < seulement en mode connectÃ©
+      comm::CMPIManager::Finalize();               // < seulement en mode connectÃ©
 
-      CXIOSManager::Initialise (CXIOSManager::CLIENT_SERVER, &argc, &argv);
-      
-      //----------------------------------------------------------------------
-      //CXIOSManager::AddClient("nemo"    , 4, 2, &nemo_fake_entry);
-      //CXIOSManager::AddClient("orchidee", 1, 1, &orchidee_fake_entry);
-      //CXIOSManager::AddClient("lmdz"    , 4, 2, &lmdz_fake_entry);
-      
-      CMPIManager::DispatchClient(true, comm_client, comm_client_server,  comm_server);
-      CXIOSManager::RunServer("Nemo", comm_client_server, comm_server);
-      //CXIOSManager::RunClientServer (comm::CMPIManager::GetCommWorld ());     
-      CXIOSManager::Finalize ();
+      //CXIOSManager::Initialise (CXIOSManager::CLIENT_SERVER, &argc, &argv);
+      //CMPIManager::DispatchClient(true, comm_client, comm_client_server,  comm_server);
+      //CXIOSManager::RunServer("Nemo", comm_client_server, comm_server);
+      //CXIOSManager::Finalize ();
    }
    catch (CException & exc)
Index: XMLIO_V2/dev/common/src/xmlio/manager/mpi_manager.cpp
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/manager/mpi_manager.cpp	(revision 273)
+++ XMLIO_V2/dev/common/src/xmlio/manager/mpi_manager.cpp	(revision 274)
@@ -251,5 +251,5 @@
       _outdata.resize(recvcount);     
       if (MPI_Allgather ( const_cast<int*>(&(_indata[0])), sendcount, MPI_INTEGER,
-                                          &(_outdata[0]) , recvcount, MPI_INTEGER, _comm) != MPI_SUCCESS)
+                                          &(_outdata[0]) , sendcount, MPI_INTEGER, _comm) != MPI_SUCCESS)
          ERROR("CMPIManager::AllGather (indata, outdata, comm)", << " MPI Error !");
    }
Index: XMLIO_V2/dev/common/src/xmlio/manager/tree_manager.cpp
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/manager/tree_manager.cpp	(revision 273)
+++ XMLIO_V2/dev/common/src/xmlio/manager/tree_manager.cpp	(revision 274)
@@ -121,10 +121,13 @@
                            CContext::GetContextGroup();
                            
-         is.read (reinterpret_cast<char*>(&renum), sizeof(StdSize));   
-         is.read (reinterpret_cast<char*>(&ctxtnb), sizeof(ENodeType));
+         is.read (reinterpret_cast<char*>(&renum), sizeof(ENodeType));   
+         is.read (reinterpret_cast<char*>(&ctxtnb), sizeof(StdSize));
 
          if (renum != CContextGroup::GetType())
             ERROR("CTreeManager::FromBinary(StdIStream & is)",
                   << "[ renum = " << renum << "] Bad type !");
+                  
+                  
+//         std::cout << "Nombre de contexte :" << ctxtnb << std::endl;
 
          for (StdSize i = 0; i < ctxtnb; i++)
@@ -144,4 +147,6 @@
                StdString id(size, ' ');
                is.read (const_cast<char *>(id.data()), size * sizeof(char));
+               
+//               std::cout << "context ::::" << id << std::endl;
                
                CTreeManager::SetCurrentContextId(id);               
Index: XMLIO_V2/dev/common/src/xmlio/manager/xios_manager.cpp
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/manager/xios_manager.cpp	(revision 273)
+++ XMLIO_V2/dev/common/src/xmlio/manager/xios_manager.cpp	(revision 274)
@@ -67,4 +67,5 @@
          StdString main_data_tree = clientBuffer[0]->getString(0);        
          tree::CTreeManager::FromBinary(main_data_tree);
+         std::cout << "main_data_tree" << main_data_tree.size() << std::endl;
          
          // Obtention des sous-domaines clients.
@@ -74,4 +75,9 @@
             tree::CTreeManager::DomainsFromBinary(main_data_tree);
          }
+         
+         StdOStringStream osss;
+         osss << StdString("./def_server_next.")
+              << CMPIManager::GetCommRank(CMPIManager::GetCommWorld());
+         CTreeManager::PrintTreeToFile(osss.str());
 
          {  // Traitement de tous les contextes
@@ -82,7 +88,8 @@
                                it = def_vector.begin(), end = def_vector.end();
 
-            for (; it != end; it++)
+            //for (; it != end; it++ )
             {
                boost::shared_ptr<CContext> context = *it;
+               CTreeManager::SetCurrentContextId(context->getId());
                boost::shared_ptr<data::CDataTreatment> dt(new data::CDataTreatment (context));
                context->setDataTreatment(dt);
@@ -93,5 +100,5 @@
         
          StdOStringStream oss;
-         oss << StdString("data/def/def_server_end.")
+         oss << StdString("./def_server_end.")
              << CMPIManager::GetCommRank(CMPIManager::GetCommWorld());
          CTreeManager::PrintTreeToFile(oss.str());      
@@ -233,8 +240,16 @@
       //---------------------------------------------------------------
       
-      void CXIOSManager::RunClient(comm::MPIComm comm_client)
-      {
-         CXIOSManager::Status  = LOC_CLIENT_SERVER;
-         (CXIOSManager::Clients.begin()->second.entry)(comm_client, comm_client, comm_client);
+      void CXIOSManager::RunClient(bool launch, comm::MPIComm comm_client)
+      {
+         if (launch)
+         {
+            CXIOSManager::Status  = LOC_CLIENT_SERVER;         
+            (CXIOSManager::Clients.begin()->second.entry)
+               (comm_client, comm_client, comm_client);
+         }
+         else
+         {
+            CXIOSManager::Status  = LOC_CLIENT;
+         }
       }
 
Index: XMLIO_V2/dev/common/src/xmlio/manager/xios_manager.hpp
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/manager/xios_manager.hpp	(revision 273)
+++ XMLIO_V2/dev/common/src/xmlio/manager/xios_manager.hpp	(revision 274)
@@ -43,6 +43,6 @@
          static void RunServer(StdString clientName,
                                comm::MPIComm comm_client_server, comm::MPIComm comm_server);
-         static void RunClient(comm::MPIComm comm_client =
-                               comm::CMPIManager::GetCommWorld());
+         static void RunClient(bool launch = false, comm::MPIComm comm_client =
+                                                    comm::CMPIManager::GetCommWorld());
          static void RunClientServer(comm::MPIComm comm_client_server =
                                      comm::CMPIManager::GetCommWorld());
Index: XMLIO_V2/dev/common/src/xmlio/node/context.cpp
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/node/context.cpp	(revision 273)
+++ XMLIO_V2/dev/common/src/xmlio/node/context.cpp	(revision 274)
@@ -201,5 +201,5 @@
                << "[ renum = " << renum << "] Bad type !");                \
       if (val) CObjectFactory::CreateObject<C##Name_##Definition>          \
-                  (C##Name_##Definition::GetDefName()) -> fromBinary(is);  \
+                   (C##Name_##Definition::GetDefName()) -> fromBinary(is); \
    }   
 #define DECLARE_NODE_PAR(Name_, name_)
Index: XMLIO_V2/dev/common/src/xmlio/node/domain.cpp
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/node/domain.cpp	(revision 273)
+++ XMLIO_V2/dev/common/src/xmlio/node/domain.cpp	(revision 274)
@@ -6,4 +6,6 @@
 
 #include "mpi_manager.hpp"
+
+#include "tree_manager.hpp"
 
 #include <algorithm>
@@ -18,4 +20,5 @@
       , isChecked(false), local_mask(new CArray<int, 2>(boost::extents[0][0])), relFiles()
       , ibegin_sub(), iend_sub(), jbegin_sub(), jend_sub()
+      , ibegin_zoom_sub(), jbegin_zoom_sub()
       , lonvalue_sub(), latvalue_sub()
    { /* Ne rien faire de plus */ }
@@ -25,4 +28,5 @@
       , isChecked(false), local_mask(new CArray<int, 2>(boost::extents[0][0])), relFiles()
       , ibegin_sub(), iend_sub(), jbegin_sub(), jend_sub()
+      , ibegin_zoom_sub(), jbegin_zoom_sub()
       , lonvalue_sub(), latvalue_sub()
    { /* Ne rien faire de plus */ }
@@ -81,11 +85,23 @@
       SuperClass::fromBinary(is);
       
-      this->ibegin_sub.push_back(this->ibegin.getValue());
-      this->jbegin_sub.push_back(this->jbegin.getValue());
-      this->iend_sub.push_back(this->iend.getValue());
-      this->jend_sub.push_back(this->jend.getValue()); 
-      
-      this->latvalue_sub.push_back(this->latvalue.getValue());
-      this->lonvalue_sub.push_back(this->lonvalue.getValue());   
+      if ( !this->ibegin.isEmpty()   &&
+           !this->jbegin.isEmpty()   &&
+           !this->iend.isEmpty()     &&
+           !this->jend.isEmpty()     &&
+           !this->latvalue.isEmpty() &&
+           !this->lonvalue.isEmpty())
+      {
+      
+         this->ibegin_sub.push_back(this->ibegin.getValue());
+         this->jbegin_sub.push_back(this->jbegin.getValue());
+         this->iend_sub.push_back(this->iend.getValue());
+         this->jend_sub.push_back(this->jend.getValue()); 
+         
+         this->ibegin_zoom_sub.push_back(this->zoom_ibegin_loc.getValue());
+         this->jbegin_zoom_sub.push_back(this->zoom_jbegin_loc.getValue());
+      
+         this->latvalue_sub.push_back(this->latvalue.getValue());
+         this->lonvalue_sub.push_back(this->lonvalue.getValue());
+      }
       
 #define CLEAR_ATT(name_)\
@@ -107,8 +123,17 @@
 #undef CLEAR_ATT
 
-      this->ibegin.setValue(*std::min_element(this->ibegin_sub.begin(),this->ibegin_sub.end()));
-      this->jbegin.setValue(*std::min_element(this->jbegin_sub.begin(),this->jbegin_sub.end()));
-      this->iend.setValue(*std::max_element(this->iend_sub.begin(),this->iend_sub.end()));
-      this->jend.setValue(*std::max_element(this->jend_sub.begin(),this->jend_sub.end()));
+      if ( !this->ibegin.isEmpty()   &&
+           !this->jbegin.isEmpty()   &&
+           !this->iend.isEmpty()     &&
+           !this->jend.isEmpty()     &&
+           !this->latvalue.isEmpty() &&
+           !this->lonvalue.isEmpty())
+      {
+
+         this->ibegin.setValue(*std::min_element(this->ibegin_sub.begin(),this->ibegin_sub.end()));
+         this->jbegin.setValue(*std::min_element(this->jbegin_sub.begin(),this->jbegin_sub.end()));
+         this->iend.setValue(*std::max_element(this->iend_sub.begin(),this->iend_sub.end()));
+         this->jend.setValue(*std::max_element(this->jend_sub.begin(),this->jend_sub.end()));
+      }
    }
 
@@ -124,9 +149,12 @@
    {
       if ((ni_glo.isEmpty() || ni_glo.getValue() <= 0 ) ||
-          (ni_glo.isEmpty() || nj_glo.getValue() <= 0 ))
+          (nj_glo.isEmpty() || nj_glo.getValue() <= 0 ))
+      {
+         abort();
          ERROR("CDomain::checkAttributes(void)",
                << "[ Id = " << this->getId() << " ] "
                << "Le domaine global est mal dÃ©fini,"
-               << " vÃ©rifiez les valeurs de \'ni_glo\' et \'nj_glo\' !") ;
+               << " vÃ©rifiez les valeurs de \'ni_glo\' et \'nj_glo\' !") 
+      }
    }
 
@@ -675,4 +703,11 @@
    //----------------------------------------------------------------
    
+   const std::vector<int> & CDomain::getIBeginZoomSub(void) const
+   {
+      return (this->ibegin_zoom_sub);
+   }
+               
+   //----------------------------------------------------------------
+                     
    const std::vector<int> & CDomain::getIEndSub(void) const
    {
@@ -686,4 +721,12 @@
       return (this->jbegin_sub);
    }
+   
+   //----------------------------------------------------------------
+      
+   const std::vector<int> & CDomain::getJBeginZoomSub(void) const
+   {
+      return (this->jbegin_zoom_sub);
+   }
+                  
    
    //----------------------------------------------------------------
Index: XMLIO_V2/dev/common/src/xmlio/node/domain.hpp
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/node/domain.hpp	(revision 273)
+++ XMLIO_V2/dev/common/src/xmlio/node/domain.hpp	(revision 274)
@@ -77,4 +77,7 @@
          const std::vector<int> & getJBeginSub(void) const;
          const std::vector<int> & getJEndSub(void) const;
+
+         const std::vector<int> & getIBeginZoomSub(void) const;
+         const std::vector<int> & getJBeginZoomSub(void) const;
          
          const std::vector<ARRAY(double, 1)> & getLonValueSub(void) const;
@@ -110,4 +113,5 @@
 
          std::vector<int> ibegin_sub, iend_sub, jbegin_sub, jend_sub;
+         std::vector<int> ibegin_zoom_sub, jbegin_zoom_sub;
          std::vector<ARRAY(double, 1)> lonvalue_sub, latvalue_sub;
 
Index: XMLIO_V2/dev/common/src/xmlio/node/grid.cpp
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/node/grid.cpp	(revision 273)
+++ XMLIO_V2/dev/common/src/xmlio/node/grid.cpp	(revision 274)
@@ -437,4 +437,6 @@
       const std::vector<int> & ibegin = this->domain->getIBeginSub();
       const std::vector<int> & jbegin = this->domain->getJBeginSub();
+      const std::vector<int> & ibegin_zoom = this->domain->getIBeginZoomSub();
+      const std::vector<int> & jbegin_zoom = this->domain->getJBeginZoomSub();
       
       const int ibegin_srv  = this->domain->ibegin.getValue();
@@ -465,11 +467,20 @@
          const int jbegin_cl = jbegin[i];
          
+         int ibegin_zoom_cl = ibegin[i]; //ibegin_zoom[i];
+         int jbegin_zoom_cl = jbegin[i]; //jbegin_zoom[i];
+         
+         if (ibegin_zoom.size() != 0)
+         {
+            ibegin_zoom_cl = ibegin_zoom[i];
+            jbegin_zoom_cl = jbegin_zoom[i];
+         }
+         
          for (StdSize n = dn, m = 0; n < (dn + storeIndex_cl->size()); n++, m++)
          {
             (*storeIndex_srv)[n]  = (*storeIndex_cl)[m]; // Faux mais inutile dans le cas serveur.
             (*out_i_index_srv)[n] = (*out_i_index_cl)[m] 
-                                  + (ibegin_cl - 1) - (ibegin_srv - 1) - (ibegin_zoom_srv - 1);
+                                  /*+ (ibegin_cl - 1)*/ - (ibegin_srv - 1) + (ibegin_zoom_cl - 1) - (ibegin_zoom_srv - 1); 
             (*out_j_index_srv)[n] = (*out_j_index_cl)[m]
-                                  + (jbegin_cl - 1) - (jbegin_srv - 1) - (jbegin_zoom_srv - 1);
+                                  /*+ (jbegin_cl - 1)*/ - (jbegin_srv - 1) + (jbegin_zoom_cl - 1) - (jbegin_zoom_srv - 1);
             (*out_l_index_srv)[n] = (*out_l_index_cl)[m];
          }
@@ -493,5 +504,12 @@
          {
             ERROR("CGrid::computeIndexServer(void)",
-                  <<"Erreur d'indexation de la grille au niveau du serveur") ;
+                  << "[ grille = "      << this->getId()
+                  << ", ibegin_t = "    << ibegin_t
+                  << ", jbegin_t = "    << jbegin_t
+                  << ", iend_t = "      << iend_t
+                  << ", jend_t = "      << jend_t
+                  << ", zoom_ni_srv = " << zoom_ni_srv
+                  << ", zoom_nj_srv = " << zoom_nj_srv
+                  <<" ] Erreur d'indexation de la grille au niveau du serveur") ;
          }
       }
Index: XMLIO_V2/dev/common/src/xmlio/node/variable.cpp
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/node/variable.cpp	(revision 273)
+++ XMLIO_V2/dev/common/src/xmlio/node/variable.cpp	(revision 274)
@@ -16,4 +16,5 @@
       : CObjectTemplate<CVariable>()
       , CVariableAttributes()
+      , content()
    { /* Ne rien faire de plus */ }
 
@@ -21,4 +22,5 @@
       : CObjectTemplate<CVariable>(id)
       , CVariableAttributes()
+      , content()
    { /* Ne rien faire de plus */ }
 
@@ -30,4 +32,86 @@
    ENodeType CVariable::GetType(void)   { return (eVariable); }
 
+   void CVariable::parse(xml::CXMLNode & node)
+   {
+      SuperClass::parse(node);
+      StdString id = (this->hasId()) ? this->getId() : StdString("undefined");
+      if (!node.getContent(this->content))
+      {
+         ERROR("CVariable::parse(xml::CXMLNode & node)",
+               << "[ variable id = " << id
+               << " ] variable is not defined !");
+      }
+   }
+
+   const StdString & CVariable::getContent (void) const
+   {
+      return (this->content);
+   }
+
+   StdString CVariable::toString(void) const
+   {
+      StdOStringStream oss;
+
+      oss << "<" << CVariable::GetName() << " ";
+      if (this->hasId())
+         oss << " id=\"" << this->getId() << "\" ";
+      oss << SuperClassAttribute::toString() << ">" << std::endl
+          << this->content /*<< std::endl*/;
+      oss << "</" << CVariable::GetName() << " >";
+      return (oss.str());
+   }
+
+   void CVariable::toBinary(StdOStream & os) const
+   {
+     const StdString & content = this->content;
+     const StdSize size        =  content.size();
+     SuperClass::toBinary(os);
+
+     os.write (reinterpret_cast<const char*>(&size), sizeof(StdSize));
+     os.write (content.data(), size * sizeof(char));
+   }
+
+   void CVariable::fromBinary(StdIStream & is)
+   {
+      SuperClass::fromBinary(is);
+      StdSize size  = 0;
+      is.read (reinterpret_cast<char*>(&size), sizeof(StdSize));
+      this->content.assign(size, ' ');
+      is.read (const_cast<char *>(this->content.data()), size * sizeof(char));
+   }
+
+   void CVariableGroup::parse(xml::CXMLNode & node, bool withAttr)
+   {
+      boost::shared_ptr<CVariableGroup> group_ptr = (this->hasId())
+         ? CObjectFactory::GetObject<CVariableGroup>(this->getId())
+         : CObjectFactory::GetObject(this);
+
+      StdString content;
+      if (this->getId().compare(CVariableGroup::GetDefName()) != 0 && node.getContent(content))
+      {
+        StdSize beginid = 0, endid = 0, begindata = 0, enddata = 0;
+        StdString subdata, subid;
+
+        while ((beginid = content.find_first_not_of ( " \r\n\t;", enddata)) != StdString::npos)
+        {
+           endid   = content.find_first_of ( " \r\n\t=", beginid );
+           subid   = content.substr ( beginid, endid-beginid);
+
+           begindata = content.find_first_of ( "=", endid ) + 1;
+           enddata   = content.find_first_of ( ";", begindata );
+           subdata   = content.substr ( begindata, enddata-begindata);
+
+           //std::cout << "\"" << subid << "\":\"" << subdata << "\"" << std::endl;
+           CGroupFactory::CreateChild(group_ptr, subid)->content = subdata;
+        }
+      }
+      else
+      {
+         SuperClass::parse(node, withAttr);
+      }
+      //SuperClass::parse(node, withAttr);
+
+   }
+
 } // namespace tree
 } // namespace xmlioserver
Index: XMLIO_V2/dev/common/src/xmlio/node/variable.hpp
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/node/variable.hpp	(revision 273)
+++ XMLIO_V2/dev/common/src/xmlio/node/variable.hpp	(revision 274)
@@ -35,4 +35,6 @@
             typedef CVariableAttributes SuperClassAttribute;
 
+            friend class CVariableGroup;
+
          public :
 
@@ -49,8 +51,31 @@
             virtual ~CVariable(void);
 
+         public :
+         
+            /// Autres ///
+            virtual void parse(xml::CXMLNode & node);
+            virtual StdString toString(void) const;
+
+            virtual void toBinary  (StdOStream & os) const;
+            virtual void fromBinary(StdIStream & is);
+
+            /// Accesseur ///
+            const StdString & getContent (void) const;
+
+            
+            template <typename T> inline void getData(T & _data) const;
+            template <typename T, StdSize N>
+               inline void getData(ARRAY(T, N) _data_array) const;
+
+         public :
+         
             /// Accesseurs statiques ///
             static StdString GetName(void);
             static StdString GetDefName(void);
             static ENodeType GetType(void);
+
+         private :
+
+            StdString content;
 
       }; // class CVar
@@ -59,5 +84,5 @@
 
       // Declare/Define CVarGroup and CVarDefinition
-      DECLARE_GROUP(CVariable);
+      DECLARE_GROUP_PARSE_REDEF(CVariable);
 
 
Index: XMLIO_V2/dev/common/src/xmlio/output/nc4_data_output.cpp
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/output/nc4_data_output.cpp	(revision 273)
+++ XMLIO_V2/dev/common/src/xmlio/output/nc4_data_output.cpp	(revision 274)
@@ -4,4 +4,5 @@
 #include <boost/lexical_cast.hpp>
 #include "attribute_template_impl.hpp"
+#include "group_template_impl.hpp"
 
 #include "file.hpp"
Index: XMLIO_V2/dev/common/src/xmlio/output/onetcdf4.cpp
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/output/onetcdf4.cpp	(revision 273)
+++ XMLIO_V2/dev/common/src/xmlio/output/onetcdf4.cpp	(revision 274)
@@ -1,3 +1,4 @@
 #include "onetcdf4.hpp"
+#include "group_template_impl.hpp"
 
 namespace xmlioserver
Index: XMLIO_V2/dev/common/src/xmlio/server.cpp
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/server.cpp	(revision 273)
+++ XMLIO_V2/dev/common/src/xmlio/server.cpp	(revision 274)
@@ -4,4 +4,5 @@
 #include "duration.hpp"
 #include "data_treatment.hpp"
+#include "group_template_impl.hpp"
 
 namespace xmlioserver {
Index: XMLIO_V2/dev/common/src/xmlio/xml_node.cpp
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/xml_node.cpp	(revision 273)
+++ XMLIO_V2/dev/common/src/xmlio/xml_node.cpp	(revision 274)
@@ -65,4 +65,11 @@
       }
 
+      bool CXMLNode::getContent(StdString & content)
+      {
+         if (this->node->value_size() == 0) return (false);
+         content.assign(this->node->value(), this->node->value_size());
+         return (true);
+      }
+
       const StdString & CXMLNode::GetRootName(void)
       { 
Index: XMLIO_V2/dev/common/src/xmlio/xml_node.hpp
===================================================================
--- XMLIO_V2/dev/common/src/xmlio/xml_node.hpp	(revision 273)
+++ XMLIO_V2/dev/common/src/xmlio/xml_node.hpp	(revision 274)
@@ -33,4 +33,5 @@
             bool goToChildElement(void);
             bool goToParentElement(void);
+            bool getContent(StdString & content);
 
             /// Accesseurs statiques ///
Index: XMLIO_V2/dev/common/tools/preprocess_cpp
===================================================================
--- XMLIO_V2/dev/common/tools/preprocess_cpp	(revision 273)
+++ 	(revision )
@@ -1,17 +1,0 @@
-#!/bin/bash
-if [[ $# != 2 ]] ; then
-   echo "Usage : ./prepocess_cpp.sh <output> <input>"
-   exit
-fi
-
-if test -f $2; then
-   cpp -x c++ -P -o $1.0.temp  $2;
-   sed 's/;;/\r\n/g' <$1.0.temp >$1.1.temp
-   sed 's/INCLUDE/#include/g' <$1.1.temp >$1.0.temp
-   sed 's/\r\n \r\n/\r\n/g' <$1.0.temp >$1
-   rm -f $1.0.temp $1.1.temp
-else
-   echo "le fichier d'entrÃ©e n'existe pas !"
-fi
-
-
Index: XMLIO_V2/dev/common/tools/preprocess_f03
===================================================================
--- XMLIO_V2/dev/common/tools/preprocess_f03	(revision 273)
+++ 	(revision )
@@ -1,15 +1,0 @@
-#!/bin/bash
-if [[ $# != 2 ]] ; then
-   echo "Usage : ./prepocess_f03.sh <output> <input>"
-   exit
-fi
-
-if test -f $2; then
-   cpp -P -o $1.temp  $2;
-   sed 's/;/\r\n/g' <$1.temp >$1
-   rm -f $1.temp
-else
-   echo "le fichier d'entrÃ©e n'existe pas !"
-fi
-
-
