Index: XIOS/trunk/bld.cfg
===================================================================
--- XIOS/trunk/bld.cfg	(revision 656)
+++ XIOS/trunk/bld.cfg	(revision 657)
@@ -31,5 +31,5 @@
 bld::target libxios.a
 #bld::target generate_fortran_interface.exe 
-bld::target xios_server.exe test_client.exe parse_xml.exe test_complete.exe test_xios_interface.exe test_new_features.exe
+bld::target xios_server.exe test_client.exe parse_xml.exe test_complete.exe test_xios_interface.exe test_new_features.exe test_unstruct_complete.exe
 bld::exe_dep
 
Index: XIOS/trunk/inputs/Unstruct/iodef.xml
===================================================================
--- XIOS/trunk/inputs/Unstruct/iodef.xml	(revision 657)
+++ XIOS/trunk/inputs/Unstruct/iodef.xml	(revision 657)
@@ -0,0 +1,49 @@
+<?xml version="1.0"?>
+<simulation>
+
+ <context id="surface">
+   <calendar type="Gregorian" start_date="2012-03-01 15:00:00" time_origin="2012-02-28 15:00:00 + 1d" />
+
+   <field_definition level="1" enabled=".TRUE.">
+     <field id="field_A_srf"  operation="average" freq_op="3600s" grid_ref="grid_A"/>
+   </field_definition>
+
+   <file_definition type="multiple_file" par_access="collective" output_freq="6h" output_level="10" enabled=".TRUE.">
+     <file id="output" name="output">
+        <field field_ref="field_A_srf" name="field_A_srf" />
+     </file>
+   </file_definition>
+
+   <axis_definition>
+     <axis id="axis_srf"/>
+   </axis_definition>
+
+   <domain_definition>
+     <domain id="domain_srf" />
+   </domain_definition>
+
+   <grid_definition>
+     <grid id="grid_A">
+       <domain domain_ref="domain_srf" />
+       <axis axis_ref="axis_srf" />
+     </grid>
+   </grid_definition>
+  </context>
+
+  <context id="xios">
+      <variable_definition>
+        <variable_group id="buffer">
+            <variable id="optimal_buffer_size" type="string">performance</variable>
+            <variable id="buffer_factor_size" type="double">1.0</variable>
+         </variable_group>
+
+        <variable_group id="parameters" >
+          <variable id="using_server" type="bool">false</variable>
+          <variable id="info_level" type="int">50</variable>
+          <variable id="print_file" type="bool">true</variable>
+        </variable_group>
+      </variable_definition>
+  </context>
+
+</simulation>
+
Index: XIOS/trunk/inputs/Version2/iodef.xml
===================================================================
--- XIOS/trunk/inputs/Version2/iodef.xml	(revision 656)
+++ XIOS/trunk/inputs/Version2/iodef.xml	(revision 657)
@@ -11,6 +11,7 @@
      <field id="field_Two_Axis"  operation="average" freq_op="3600s" grid_ref="grid_Two_Axis" />
      <field id="field_All_Axis" operation="average" freq_op="3600s" grid_ref="grid_All_Axis" />
-     <field id="field_Axis_transformed"  operation="average" freq_op="3600s" field_ref="field_Two_Axis" grid_ref="grid_Axis_tranformed" />
+     <field id="field_Axis_transformed"  operation="average" freq_op="3600s" field_ref="field_A" grid_ref="grid_Axis_tranformed" />
      <field id="field_Axis_transformed_Interpolated"  operation="average" freq_op="3600s" field_ref="field_Axis" grid_ref="grid_Axis_tranformed_Interpolated" />
+     <field id="field_Domain_transformed_Interpolated"  operation="average" freq_op="3600s" field_ref="field_A" grid_ref="grid_Domain_tranformed_Interpolated" />
      <field id="field_Scalar" operation="average" freq_op="3600s" grid_ref="ScalarGrid" />
    </field_definition>
@@ -18,17 +19,20 @@
    <file_definition type="multiple_file" par_access="collective" output_freq="6h" output_level="10" enabled=".TRUE.">
      <file id="output" name="output" type="one_file">
-        <field field_ref="field_A" />
+<!--        <field field_ref="field_A" />-->
      </file>
      <file id="output_Axis" name="output_Axis" type="one_file">
-        <field field_ref="field_Axis" />
+<!--        <field field_ref="field_Axis" />-->
      </file>
      <file id="output_All_Axis" name="output_All_Axis" type="one_file">
-        <field field_ref="field_All_Axis" />
+<!--        <field field_ref="field_All_Axis" />-->
      </file>
      <file id="output_Axis_transformed" name="output_Axis_transformed" type="one_file">
-        <field field_ref="field_Axis_transformed" />
+<!--        <field field_ref="field_Axis_transformed" />-->
      </file>
      <file id="output_Axis_transformed_interpolated" name="output_Axis_transformed_interpolated">
-        <field field_ref="field_Axis_transformed_Interpolated" />
+<!--        <field field_ref="field_Axis_transformed_Interpolated" />-->
+     </file>
+     <file id="output_Domain_transformed_interpolated" name="output_Domain_transformed_interpolated">
+        <field field_ref="field_Domain_transformed_Interpolated" />
      </file>
      <file id="output_Scalar" name="output_Scalar" type="one_file">
@@ -54,6 +58,6 @@
      </axis>
      <axis id="axis_H" axis_ref="axis_C">
-       <inverse_axis />
-       <zoom_axis zoom_begin="0" zoom_size="1" />
+<!--       <inverse_axis />-->
+<!--       <zoom_axis zoom_begin="0" zoom_size="1" />-->
      </axis>
    </axis_definition>
@@ -62,6 +66,10 @@
      <domain id="domain_A" />
      <domain id="domain_A_zoom" domain_ref="domain_A">
-       <zoom_domain zoom_ibegin="1" zoom_ni="3" zoom_jbegin="0" zoom_nj="4"/>
-       <zoom_domain zoom_ibegin="0" zoom_ni="2" zoom_jbegin="0" zoom_nj="2"/>
+<!--       <zoom_domain zoom_ibegin="1" zoom_ni="3" zoom_jbegin="0" zoom_nj="2"/>-->
+       <zoom_domain zoom_ibegin="39" zoom_ni="20" zoom_jbegin="39" zoom_nj="20"/>
+<!--       <zoom_domain zoom_ibegin="0" zoom_ni="2" zoom_jbegin="0" zoom_nj="2"/>-->
+     </domain>
+     <domain id="domain_A_transformed" domain_ref="domain_A">
+       <interpolate_from_file_domain file="" />
      </domain>
    </domain_definition>
@@ -87,8 +95,12 @@
        <grid id="grid_Axis_tranformed">
 <!--         <domain domain_ref="domain_A" />-->
-<!--         <domain domain_ref="domain_A_zoom" />-->
-<!--         <axis axis_ref="axis_H" />-->
-         <axis axis_ref="axis_E" />
-         <axis axis_ref="axis_F" />
+         <domain domain_ref="domain_A_zoom" />
+         <axis axis_ref="axis_H" />
+<!--         <axis axis_ref="axis_E" />-->
+<!--         <axis axis_ref="axis_F" />-->
+       </grid>
+       <grid id="grid_Domain_tranformed_Interpolated">
+         <domain domain_ref="domain_A_transformed" />
+         <axis axis_ref="axis_H" />
        </grid>
        <grid id="grid_Axis_tranformed_Interpolated">
Index: XIOS/trunk/src/config/domain_attribute.conf
===================================================================
--- XIOS/trunk/src/config/domain_attribute.conf	(revision 656)
+++ XIOS/trunk/src/config/domain_attribute.conf	(revision 657)
@@ -13,17 +13,17 @@
 /* LOCAL */
 DECLARE_ATTRIBUTE(int             , ibegin)
-DECLARE_ATTRIBUTE(int             , iend)
 DECLARE_ATTRIBUTE(int             , ni)
 
 /* LOCAL */
 DECLARE_ATTRIBUTE(int             , jbegin)
-DECLARE_ATTRIBUTE(int             , jend)
 DECLARE_ATTRIBUTE(int             , nj)
 
 
-DECLARE_ARRAY(int,2             , i_index)
-DECLARE_ARRAY(int,2             , j_index)
+DECLARE_ARRAY(int,1             , i_index)
+DECLARE_ARRAY(int,1             , j_index)
 
 /* LOCAL */
+DECLARE_ARRAY(bool, 1 , mask_1D)
+DECLARE_ARRAY(bool, 2 , mask_2D)
 DECLARE_ARRAY(bool, 2 , mask)
 
@@ -36,16 +36,4 @@
 DECLARE_ATTRIBUTE(int             , data_ibegin)
 DECLARE_ATTRIBUTE(int             , data_jbegin)
-
-/* GLOBAL */
-DECLARE_ATTRIBUTE(int             , zoom_ni)
-DECLARE_ATTRIBUTE(int             , zoom_nj)
-DECLARE_ATTRIBUTE(int             , zoom_ibegin)
-DECLARE_ATTRIBUTE(int             , zoom_jbegin)
-
-/* LOCAL */
-DECLARE_ATTRIBUTE(int             , zoom_ni_loc)
-DECLARE_ATTRIBUTE(int             , zoom_nj_loc)
-DECLARE_ATTRIBUTE(int             , zoom_ibegin_loc)
-DECLARE_ATTRIBUTE(int             , zoom_jbegin_loc)
 
 /* LOCAL */
@@ -62,5 +50,5 @@
 DECLARE_ARRAY(double, 2, area)
 
-DECLARE_ENUM3(type,regular,curvilinear,unstructured)
+DECLARE_ENUM3(type,regular,curvilinear,unstructured) //rectilinear
 DECLARE_ATTRIBUTE(StdString, domain_ref)
 
Index: XIOS/trunk/src/config/interpolate_from_file_domain_attribute.conf
===================================================================
--- XIOS/trunk/src/config/interpolate_from_file_domain_attribute.conf	(revision 657)
+++ XIOS/trunk/src/config/interpolate_from_file_domain_attribute.conf	(revision 657)
@@ -0,0 +1,2 @@
+/* GLOBAL */
+DECLARE_ATTRIBUTE(StdString, file)
Index: XIOS/trunk/src/config/node_type.conf
===================================================================
--- XIOS/trunk/src/config/node_type.conf	(revision 656)
+++ XIOS/trunk/src/config/node_type.conf	(revision 657)
@@ -47,4 +47,8 @@
 #endif //__XIOS_CZoomDomain__
 
+#ifdef __XIOS_CInterpolateFromFileDomain__
+   DECLARE_NODE(InterpolateFromFileDomain, interpolate_from_file_domain)
+#endif //__XIOS_CInterpolateFromFileDomain__
+
 #ifdef __XIOS_CContext__
    DECLARE_NODE_PAR(Context, context)
Index: XIOS/trunk/src/distribution_client.cpp
===================================================================
--- XIOS/trunk/src/distribution_client.cpp	(revision 656)
+++ XIOS/trunk/src/distribution_client.cpp	(revision 657)
@@ -85,6 +85,6 @@
     int ni = domList[k]->ni;
     int nj = domList[k]->nj;
-    nIndexDomain_[k][0].resize(ni,nj);
-    nIndexDomain_[k][1].resize(ni,nj);
+    nIndexDomain_[k][0].resize(ni*nj);
+    nIndexDomain_[k][1].resize(ni*nj);
     nIndexDomain_[k][0] = domList[k]->i_index;
     nIndexDomain_[k][1] = domList[k]->j_index;
Index: XIOS/trunk/src/distribution_client.hpp
===================================================================
--- XIOS/trunk/src/distribution_client.hpp	(revision 656)
+++ XIOS/trunk/src/distribution_client.hpp	(revision 657)
@@ -89,5 +89,5 @@
     std::vector<int> nZoomBegin_; //!< Begin index of zoom of each dimension
     std::vector<int> nZoomEnd_; //!< End index of zoom of each dimension
-    std::vector<std::vector<CArray<int,2> > > nIndexDomain_; //!< Local index of each domain dimension (e.x: i_index, j_index)
+    std::vector<std::vector<CArray<int,1> > > nIndexDomain_; //!< Local index of each domain dimension (e.x: i_index, j_index)
     std::vector<CArray<int,1> > nIndexAxis_;
 
Index: XIOS/trunk/src/group_factory_decl.cpp
===================================================================
--- XIOS/trunk/src/group_factory_decl.cpp	(revision 656)
+++ XIOS/trunk/src/group_factory_decl.cpp	(revision 657)
@@ -29,3 +29,4 @@
   macro(CInterpolateAxisGroup)
   macro(CZoomDomainGroup)
+  macro(CInterpolateFromFileDomainGroup)
 }
Index: XIOS/trunk/src/group_template_decl.cpp
===================================================================
--- XIOS/trunk/src/group_template_decl.cpp	(revision 656)
+++ XIOS/trunk/src/group_template_decl.cpp	(revision 657)
@@ -18,4 +18,5 @@
   macro(InterpolateAxis)
   macro(ZoomDomain)
+  macro(InterpolateFromFileDomain)
 
 }
Index: XIOS/trunk/src/interface/c_attr/icdomain_attr.cpp
===================================================================
--- XIOS/trunk/src/interface/c_attr/icdomain_attr.cpp	(revision 656)
+++ XIOS/trunk/src/interface/c_attr/icdomain_attr.cpp	(revision 657)
@@ -333,16 +333,16 @@
 
 
-  void cxios_set_domain_i_index(domain_Ptr domain_hdl, int* i_index, int extent1, int extent2)
-  {
-    CTimer::get("XIOS").resume();
-    CArray<int,2> tmp(i_index, shape(extent1, extent2), neverDeleteData);
+  void cxios_set_domain_i_index(domain_Ptr domain_hdl, int* i_index, int extent1)
+  {
+    CTimer::get("XIOS").resume();
+    CArray<int,1> tmp(i_index, shape(extent1), neverDeleteData);
     domain_hdl->i_index.reference(tmp.copy());
      CTimer::get("XIOS").suspend();
   }
 
-  void cxios_get_domain_i_index(domain_Ptr domain_hdl, int* i_index, int extent1, int extent2)
-  {
-    CTimer::get("XIOS").resume();
-    CArray<int,2> tmp(i_index, shape(extent1, extent2), neverDeleteData);
+  void cxios_get_domain_i_index(domain_Ptr domain_hdl, int* i_index, int extent1)
+  {
+    CTimer::get("XIOS").resume();
+    CArray<int,1> tmp(i_index, shape(extent1), neverDeleteData);
     tmp=domain_hdl->i_index.getInheritedValue();
      CTimer::get("XIOS").suspend();
@@ -381,39 +381,16 @@
 
 
-  void cxios_set_domain_iend(domain_Ptr domain_hdl, int iend)
-  {
-    CTimer::get("XIOS").resume();
-    domain_hdl->iend.setValue(iend);
-    CTimer::get("XIOS").suspend();
-  }
-
-  void cxios_get_domain_iend(domain_Ptr domain_hdl, int* iend)
-  {
-    CTimer::get("XIOS").resume();
-    *iend = domain_hdl->iend.getInheritedValue();
-    CTimer::get("XIOS").suspend();
-  }
-
-  bool cxios_is_defined_domain_iend(domain_Ptr domain_hdl)
-  {
-     CTimer::get("XIOS").resume();
-     bool isDefined = domain_hdl->iend.hasInheritedValue();
-     CTimer::get("XIOS").suspend();
-     return isDefined;
-  }
-
-
-  void cxios_set_domain_j_index(domain_Ptr domain_hdl, int* j_index, int extent1, int extent2)
-  {
-    CTimer::get("XIOS").resume();
-    CArray<int,2> tmp(j_index, shape(extent1, extent2), neverDeleteData);
+  void cxios_set_domain_j_index(domain_Ptr domain_hdl, int* j_index, int extent1)
+  {
+    CTimer::get("XIOS").resume();
+    CArray<int,1> tmp(j_index, shape(extent1), neverDeleteData);
     domain_hdl->j_index.reference(tmp.copy());
      CTimer::get("XIOS").suspend();
   }
 
-  void cxios_get_domain_j_index(domain_Ptr domain_hdl, int* j_index, int extent1, int extent2)
-  {
-    CTimer::get("XIOS").resume();
-    CArray<int,2> tmp(j_index, shape(extent1, extent2), neverDeleteData);
+  void cxios_get_domain_j_index(domain_Ptr domain_hdl, int* j_index, int extent1)
+  {
+    CTimer::get("XIOS").resume();
+    CArray<int,1> tmp(j_index, shape(extent1), neverDeleteData);
     tmp=domain_hdl->j_index.getInheritedValue();
      CTimer::get("XIOS").suspend();
@@ -447,27 +424,4 @@
      CTimer::get("XIOS").resume();
      bool isDefined = domain_hdl->jbegin.hasInheritedValue();
-     CTimer::get("XIOS").suspend();
-     return isDefined;
-  }
-
-
-  void cxios_set_domain_jend(domain_Ptr domain_hdl, int jend)
-  {
-    CTimer::get("XIOS").resume();
-    domain_hdl->jend.setValue(jend);
-    CTimer::get("XIOS").suspend();
-  }
-
-  void cxios_get_domain_jend(domain_Ptr domain_hdl, int* jend)
-  {
-    CTimer::get("XIOS").resume();
-    *jend = domain_hdl->jend.getInheritedValue();
-    CTimer::get("XIOS").suspend();
-  }
-
-  bool cxios_is_defined_domain_jend(domain_Ptr domain_hdl)
-  {
-     CTimer::get("XIOS").resume();
-     bool isDefined = domain_hdl->jend.hasInheritedValue();
      CTimer::get("XIOS").suspend();
      return isDefined;
@@ -767,187 +721,3 @@
      return isDefined;
   }
-
-
-  void cxios_set_domain_zoom_ibegin(domain_Ptr domain_hdl, int zoom_ibegin)
-  {
-    CTimer::get("XIOS").resume();
-    domain_hdl->zoom_ibegin.setValue(zoom_ibegin);
-    CTimer::get("XIOS").suspend();
-  }
-
-  void cxios_get_domain_zoom_ibegin(domain_Ptr domain_hdl, int* zoom_ibegin)
-  {
-    CTimer::get("XIOS").resume();
-    *zoom_ibegin = domain_hdl->zoom_ibegin.getInheritedValue();
-    CTimer::get("XIOS").suspend();
-  }
-
-  bool cxios_is_defined_domain_zoom_ibegin(domain_Ptr domain_hdl)
-  {
-     CTimer::get("XIOS").resume();
-     bool isDefined = domain_hdl->zoom_ibegin.hasInheritedValue();
-     CTimer::get("XIOS").suspend();
-     return isDefined;
-  }
-
-
-  void cxios_set_domain_zoom_ibegin_loc(domain_Ptr domain_hdl, int zoom_ibegin_loc)
-  {
-    CTimer::get("XIOS").resume();
-    domain_hdl->zoom_ibegin_loc.setValue(zoom_ibegin_loc);
-    CTimer::get("XIOS").suspend();
-  }
-
-  void cxios_get_domain_zoom_ibegin_loc(domain_Ptr domain_hdl, int* zoom_ibegin_loc)
-  {
-    CTimer::get("XIOS").resume();
-    *zoom_ibegin_loc = domain_hdl->zoom_ibegin_loc.getInheritedValue();
-    CTimer::get("XIOS").suspend();
-  }
-
-  bool cxios_is_defined_domain_zoom_ibegin_loc(domain_Ptr domain_hdl)
-  {
-     CTimer::get("XIOS").resume();
-     bool isDefined = domain_hdl->zoom_ibegin_loc.hasInheritedValue();
-     CTimer::get("XIOS").suspend();
-     return isDefined;
-  }
-
-
-  void cxios_set_domain_zoom_jbegin(domain_Ptr domain_hdl, int zoom_jbegin)
-  {
-    CTimer::get("XIOS").resume();
-    domain_hdl->zoom_jbegin.setValue(zoom_jbegin);
-    CTimer::get("XIOS").suspend();
-  }
-
-  void cxios_get_domain_zoom_jbegin(domain_Ptr domain_hdl, int* zoom_jbegin)
-  {
-    CTimer::get("XIOS").resume();
-    *zoom_jbegin = domain_hdl->zoom_jbegin.getInheritedValue();
-    CTimer::get("XIOS").suspend();
-  }
-
-  bool cxios_is_defined_domain_zoom_jbegin(domain_Ptr domain_hdl)
-  {
-     CTimer::get("XIOS").resume();
-     bool isDefined = domain_hdl->zoom_jbegin.hasInheritedValue();
-     CTimer::get("XIOS").suspend();
-     return isDefined;
-  }
-
-
-  void cxios_set_domain_zoom_jbegin_loc(domain_Ptr domain_hdl, int zoom_jbegin_loc)
-  {
-    CTimer::get("XIOS").resume();
-    domain_hdl->zoom_jbegin_loc.setValue(zoom_jbegin_loc);
-    CTimer::get("XIOS").suspend();
-  }
-
-  void cxios_get_domain_zoom_jbegin_loc(domain_Ptr domain_hdl, int* zoom_jbegin_loc)
-  {
-    CTimer::get("XIOS").resume();
-    *zoom_jbegin_loc = domain_hdl->zoom_jbegin_loc.getInheritedValue();
-    CTimer::get("XIOS").suspend();
-  }
-
-  bool cxios_is_defined_domain_zoom_jbegin_loc(domain_Ptr domain_hdl)
-  {
-     CTimer::get("XIOS").resume();
-     bool isDefined = domain_hdl->zoom_jbegin_loc.hasInheritedValue();
-     CTimer::get("XIOS").suspend();
-     return isDefined;
-  }
-
-
-  void cxios_set_domain_zoom_ni(domain_Ptr domain_hdl, int zoom_ni)
-  {
-    CTimer::get("XIOS").resume();
-    domain_hdl->zoom_ni.setValue(zoom_ni);
-    CTimer::get("XIOS").suspend();
-  }
-
-  void cxios_get_domain_zoom_ni(domain_Ptr domain_hdl, int* zoom_ni)
-  {
-    CTimer::get("XIOS").resume();
-    *zoom_ni = domain_hdl->zoom_ni.getInheritedValue();
-    CTimer::get("XIOS").suspend();
-  }
-
-  bool cxios_is_defined_domain_zoom_ni(domain_Ptr domain_hdl)
-  {
-     CTimer::get("XIOS").resume();
-     bool isDefined = domain_hdl->zoom_ni.hasInheritedValue();
-     CTimer::get("XIOS").suspend();
-     return isDefined;
-  }
-
-
-  void cxios_set_domain_zoom_ni_loc(domain_Ptr domain_hdl, int zoom_ni_loc)
-  {
-    CTimer::get("XIOS").resume();
-    domain_hdl->zoom_ni_loc.setValue(zoom_ni_loc);
-    CTimer::get("XIOS").suspend();
-  }
-
-  void cxios_get_domain_zoom_ni_loc(domain_Ptr domain_hdl, int* zoom_ni_loc)
-  {
-    CTimer::get("XIOS").resume();
-    *zoom_ni_loc = domain_hdl->zoom_ni_loc.getInheritedValue();
-    CTimer::get("XIOS").suspend();
-  }
-
-  bool cxios_is_defined_domain_zoom_ni_loc(domain_Ptr domain_hdl)
-  {
-     CTimer::get("XIOS").resume();
-     bool isDefined = domain_hdl->zoom_ni_loc.hasInheritedValue();
-     CTimer::get("XIOS").suspend();
-     return isDefined;
-  }
-
-
-  void cxios_set_domain_zoom_nj(domain_Ptr domain_hdl, int zoom_nj)
-  {
-    CTimer::get("XIOS").resume();
-    domain_hdl->zoom_nj.setValue(zoom_nj);
-    CTimer::get("XIOS").suspend();
-  }
-
-  void cxios_get_domain_zoom_nj(domain_Ptr domain_hdl, int* zoom_nj)
-  {
-    CTimer::get("XIOS").resume();
-    *zoom_nj = domain_hdl->zoom_nj.getInheritedValue();
-    CTimer::get("XIOS").suspend();
-  }
-
-  bool cxios_is_defined_domain_zoom_nj(domain_Ptr domain_hdl)
-  {
-     CTimer::get("XIOS").resume();
-     bool isDefined = domain_hdl->zoom_nj.hasInheritedValue();
-     CTimer::get("XIOS").suspend();
-     return isDefined;
-  }
-
-
-  void cxios_set_domain_zoom_nj_loc(domain_Ptr domain_hdl, int zoom_nj_loc)
-  {
-    CTimer::get("XIOS").resume();
-    domain_hdl->zoom_nj_loc.setValue(zoom_nj_loc);
-    CTimer::get("XIOS").suspend();
-  }
-
-  void cxios_get_domain_zoom_nj_loc(domain_Ptr domain_hdl, int* zoom_nj_loc)
-  {
-    CTimer::get("XIOS").resume();
-    *zoom_nj_loc = domain_hdl->zoom_nj_loc.getInheritedValue();
-    CTimer::get("XIOS").suspend();
-  }
-
-  bool cxios_is_defined_domain_zoom_nj_loc(domain_Ptr domain_hdl)
-  {
-     CTimer::get("XIOS").resume();
-     bool isDefined = domain_hdl->zoom_nj_loc.hasInheritedValue();
-     CTimer::get("XIOS").suspend();
-     return isDefined;
-  }
 }
Index: XIOS/trunk/src/interface/c_attr/icdomaingroup_attr.cpp
===================================================================
--- XIOS/trunk/src/interface/c_attr/icdomaingroup_attr.cpp	(revision 656)
+++ XIOS/trunk/src/interface/c_attr/icdomaingroup_attr.cpp	(revision 657)
@@ -359,16 +359,16 @@
 
 
-  void cxios_set_domaingroup_i_index(domaingroup_Ptr domaingroup_hdl, int* i_index, int extent1, int extent2)
-  {
-    CTimer::get("XIOS").resume();
-    CArray<int,2> tmp(i_index, shape(extent1, extent2), neverDeleteData);
+  void cxios_set_domaingroup_i_index(domaingroup_Ptr domaingroup_hdl, int* i_index, int extent1)
+  {
+    CTimer::get("XIOS").resume();
+    CArray<int,1> tmp(i_index, shape(extent1), neverDeleteData);
     domaingroup_hdl->i_index.reference(tmp.copy());
      CTimer::get("XIOS").suspend();
   }
 
-  void cxios_get_domaingroup_i_index(domaingroup_Ptr domaingroup_hdl, int* i_index, int extent1, int extent2)
-  {
-    CTimer::get("XIOS").resume();
-    CArray<int,2> tmp(i_index, shape(extent1, extent2), neverDeleteData);
+  void cxios_get_domaingroup_i_index(domaingroup_Ptr domaingroup_hdl, int* i_index, int extent1)
+  {
+    CTimer::get("XIOS").resume();
+    CArray<int,1> tmp(i_index, shape(extent1), neverDeleteData);
     tmp=domaingroup_hdl->i_index.getInheritedValue();
      CTimer::get("XIOS").suspend();
@@ -407,39 +407,16 @@
 
 
-  void cxios_set_domaingroup_iend(domaingroup_Ptr domaingroup_hdl, int iend)
-  {
-    CTimer::get("XIOS").resume();
-    domaingroup_hdl->iend.setValue(iend);
-    CTimer::get("XIOS").suspend();
-  }
-
-  void cxios_get_domaingroup_iend(domaingroup_Ptr domaingroup_hdl, int* iend)
-  {
-    CTimer::get("XIOS").resume();
-    *iend = domaingroup_hdl->iend.getInheritedValue();
-    CTimer::get("XIOS").suspend();
-  }
-
-  bool cxios_is_defined_domaingroup_iend(domaingroup_Ptr domaingroup_hdl)
-  {
-     CTimer::get("XIOS").resume();
-     bool isDefined = domaingroup_hdl->iend.hasInheritedValue();
-     CTimer::get("XIOS").suspend();
-     return isDefined;
-  }
-
-
-  void cxios_set_domaingroup_j_index(domaingroup_Ptr domaingroup_hdl, int* j_index, int extent1, int extent2)
-  {
-    CTimer::get("XIOS").resume();
-    CArray<int,2> tmp(j_index, shape(extent1, extent2), neverDeleteData);
+  void cxios_set_domaingroup_j_index(domaingroup_Ptr domaingroup_hdl, int* j_index, int extent1)
+  {
+    CTimer::get("XIOS").resume();
+    CArray<int,1> tmp(j_index, shape(extent1), neverDeleteData);
     domaingroup_hdl->j_index.reference(tmp.copy());
      CTimer::get("XIOS").suspend();
   }
 
-  void cxios_get_domaingroup_j_index(domaingroup_Ptr domaingroup_hdl, int* j_index, int extent1, int extent2)
-  {
-    CTimer::get("XIOS").resume();
-    CArray<int,2> tmp(j_index, shape(extent1, extent2), neverDeleteData);
+  void cxios_get_domaingroup_j_index(domaingroup_Ptr domaingroup_hdl, int* j_index, int extent1)
+  {
+    CTimer::get("XIOS").resume();
+    CArray<int,1> tmp(j_index, shape(extent1), neverDeleteData);
     tmp=domaingroup_hdl->j_index.getInheritedValue();
      CTimer::get("XIOS").suspend();
@@ -473,27 +450,4 @@
      CTimer::get("XIOS").resume();
      bool isDefined = domaingroup_hdl->jbegin.hasInheritedValue();
-     CTimer::get("XIOS").suspend();
-     return isDefined;
-  }
-
-
-  void cxios_set_domaingroup_jend(domaingroup_Ptr domaingroup_hdl, int jend)
-  {
-    CTimer::get("XIOS").resume();
-    domaingroup_hdl->jend.setValue(jend);
-    CTimer::get("XIOS").suspend();
-  }
-
-  void cxios_get_domaingroup_jend(domaingroup_Ptr domaingroup_hdl, int* jend)
-  {
-    CTimer::get("XIOS").resume();
-    *jend = domaingroup_hdl->jend.getInheritedValue();
-    CTimer::get("XIOS").suspend();
-  }
-
-  bool cxios_is_defined_domaingroup_jend(domaingroup_Ptr domaingroup_hdl)
-  {
-     CTimer::get("XIOS").resume();
-     bool isDefined = domaingroup_hdl->jend.hasInheritedValue();
      CTimer::get("XIOS").suspend();
      return isDefined;
@@ -793,187 +747,3 @@
      return isDefined;
   }
-
-
-  void cxios_set_domaingroup_zoom_ibegin(domaingroup_Ptr domaingroup_hdl, int zoom_ibegin)
-  {
-    CTimer::get("XIOS").resume();
-    domaingroup_hdl->zoom_ibegin.setValue(zoom_ibegin);
-    CTimer::get("XIOS").suspend();
-  }
-
-  void cxios_get_domaingroup_zoom_ibegin(domaingroup_Ptr domaingroup_hdl, int* zoom_ibegin)
-  {
-    CTimer::get("XIOS").resume();
-    *zoom_ibegin = domaingroup_hdl->zoom_ibegin.getInheritedValue();
-    CTimer::get("XIOS").suspend();
-  }
-
-  bool cxios_is_defined_domaingroup_zoom_ibegin(domaingroup_Ptr domaingroup_hdl)
-  {
-     CTimer::get("XIOS").resume();
-     bool isDefined = domaingroup_hdl->zoom_ibegin.hasInheritedValue();
-     CTimer::get("XIOS").suspend();
-     return isDefined;
-  }
-
-
-  void cxios_set_domaingroup_zoom_ibegin_loc(domaingroup_Ptr domaingroup_hdl, int zoom_ibegin_loc)
-  {
-    CTimer::get("XIOS").resume();
-    domaingroup_hdl->zoom_ibegin_loc.setValue(zoom_ibegin_loc);
-    CTimer::get("XIOS").suspend();
-  }
-
-  void cxios_get_domaingroup_zoom_ibegin_loc(domaingroup_Ptr domaingroup_hdl, int* zoom_ibegin_loc)
-  {
-    CTimer::get("XIOS").resume();
-    *zoom_ibegin_loc = domaingroup_hdl->zoom_ibegin_loc.getInheritedValue();
-    CTimer::get("XIOS").suspend();
-  }
-
-  bool cxios_is_defined_domaingroup_zoom_ibegin_loc(domaingroup_Ptr domaingroup_hdl)
-  {
-     CTimer::get("XIOS").resume();
-     bool isDefined = domaingroup_hdl->zoom_ibegin_loc.hasInheritedValue();
-     CTimer::get("XIOS").suspend();
-     return isDefined;
-  }
-
-
-  void cxios_set_domaingroup_zoom_jbegin(domaingroup_Ptr domaingroup_hdl, int zoom_jbegin)
-  {
-    CTimer::get("XIOS").resume();
-    domaingroup_hdl->zoom_jbegin.setValue(zoom_jbegin);
-    CTimer::get("XIOS").suspend();
-  }
-
-  void cxios_get_domaingroup_zoom_jbegin(domaingroup_Ptr domaingroup_hdl, int* zoom_jbegin)
-  {
-    CTimer::get("XIOS").resume();
-    *zoom_jbegin = domaingroup_hdl->zoom_jbegin.getInheritedValue();
-    CTimer::get("XIOS").suspend();
-  }
-
-  bool cxios_is_defined_domaingroup_zoom_jbegin(domaingroup_Ptr domaingroup_hdl)
-  {
-     CTimer::get("XIOS").resume();
-     bool isDefined = domaingroup_hdl->zoom_jbegin.hasInheritedValue();
-     CTimer::get("XIOS").suspend();
-     return isDefined;
-  }
-
-
-  void cxios_set_domaingroup_zoom_jbegin_loc(domaingroup_Ptr domaingroup_hdl, int zoom_jbegin_loc)
-  {
-    CTimer::get("XIOS").resume();
-    domaingroup_hdl->zoom_jbegin_loc.setValue(zoom_jbegin_loc);
-    CTimer::get("XIOS").suspend();
-  }
-
-  void cxios_get_domaingroup_zoom_jbegin_loc(domaingroup_Ptr domaingroup_hdl, int* zoom_jbegin_loc)
-  {
-    CTimer::get("XIOS").resume();
-    *zoom_jbegin_loc = domaingroup_hdl->zoom_jbegin_loc.getInheritedValue();
-    CTimer::get("XIOS").suspend();
-  }
-
-  bool cxios_is_defined_domaingroup_zoom_jbegin_loc(domaingroup_Ptr domaingroup_hdl)
-  {
-     CTimer::get("XIOS").resume();
-     bool isDefined = domaingroup_hdl->zoom_jbegin_loc.hasInheritedValue();
-     CTimer::get("XIOS").suspend();
-     return isDefined;
-  }
-
-
-  void cxios_set_domaingroup_zoom_ni(domaingroup_Ptr domaingroup_hdl, int zoom_ni)
-  {
-    CTimer::get("XIOS").resume();
-    domaingroup_hdl->zoom_ni.setValue(zoom_ni);
-    CTimer::get("XIOS").suspend();
-  }
-
-  void cxios_get_domaingroup_zoom_ni(domaingroup_Ptr domaingroup_hdl, int* zoom_ni)
-  {
-    CTimer::get("XIOS").resume();
-    *zoom_ni = domaingroup_hdl->zoom_ni.getInheritedValue();
-    CTimer::get("XIOS").suspend();
-  }
-
-  bool cxios_is_defined_domaingroup_zoom_ni(domaingroup_Ptr domaingroup_hdl)
-  {
-     CTimer::get("XIOS").resume();
-     bool isDefined = domaingroup_hdl->zoom_ni.hasInheritedValue();
-     CTimer::get("XIOS").suspend();
-     return isDefined;
-  }
-
-
-  void cxios_set_domaingroup_zoom_ni_loc(domaingroup_Ptr domaingroup_hdl, int zoom_ni_loc)
-  {
-    CTimer::get("XIOS").resume();
-    domaingroup_hdl->zoom_ni_loc.setValue(zoom_ni_loc);
-    CTimer::get("XIOS").suspend();
-  }
-
-  void cxios_get_domaingroup_zoom_ni_loc(domaingroup_Ptr domaingroup_hdl, int* zoom_ni_loc)
-  {
-    CTimer::get("XIOS").resume();
-    *zoom_ni_loc = domaingroup_hdl->zoom_ni_loc.getInheritedValue();
-    CTimer::get("XIOS").suspend();
-  }
-
-  bool cxios_is_defined_domaingroup_zoom_ni_loc(domaingroup_Ptr domaingroup_hdl)
-  {
-     CTimer::get("XIOS").resume();
-     bool isDefined = domaingroup_hdl->zoom_ni_loc.hasInheritedValue();
-     CTimer::get("XIOS").suspend();
-     return isDefined;
-  }
-
-
-  void cxios_set_domaingroup_zoom_nj(domaingroup_Ptr domaingroup_hdl, int zoom_nj)
-  {
-    CTimer::get("XIOS").resume();
-    domaingroup_hdl->zoom_nj.setValue(zoom_nj);
-    CTimer::get("XIOS").suspend();
-  }
-
-  void cxios_get_domaingroup_zoom_nj(domaingroup_Ptr domaingroup_hdl, int* zoom_nj)
-  {
-    CTimer::get("XIOS").resume();
-    *zoom_nj = domaingroup_hdl->zoom_nj.getInheritedValue();
-    CTimer::get("XIOS").suspend();
-  }
-
-  bool cxios_is_defined_domaingroup_zoom_nj(domaingroup_Ptr domaingroup_hdl)
-  {
-     CTimer::get("XIOS").resume();
-     bool isDefined = domaingroup_hdl->zoom_nj.hasInheritedValue();
-     CTimer::get("XIOS").suspend();
-     return isDefined;
-  }
-
-
-  void cxios_set_domaingroup_zoom_nj_loc(domaingroup_Ptr domaingroup_hdl, int zoom_nj_loc)
-  {
-    CTimer::get("XIOS").resume();
-    domaingroup_hdl->zoom_nj_loc.setValue(zoom_nj_loc);
-    CTimer::get("XIOS").suspend();
-  }
-
-  void cxios_get_domaingroup_zoom_nj_loc(domaingroup_Ptr domaingroup_hdl, int* zoom_nj_loc)
-  {
-    CTimer::get("XIOS").resume();
-    *zoom_nj_loc = domaingroup_hdl->zoom_nj_loc.getInheritedValue();
-    CTimer::get("XIOS").suspend();
-  }
-
-  bool cxios_is_defined_domaingroup_zoom_nj_loc(domaingroup_Ptr domaingroup_hdl)
-  {
-     CTimer::get("XIOS").resume();
-     bool isDefined = domaingroup_hdl->zoom_nj_loc.hasInheritedValue();
-     CTimer::get("XIOS").suspend();
-     return isDefined;
-  }
 }
Index: XIOS/trunk/src/interface/fortran_attr/domain_interface_attr.F90
===================================================================
--- XIOS/trunk/src/interface/fortran_attr/domain_interface_attr.F90	(revision 656)
+++ XIOS/trunk/src/interface/fortran_attr/domain_interface_attr.F90	(revision 657)
@@ -277,18 +277,16 @@
 
 
-    SUBROUTINE cxios_set_domain_i_index(domain_hdl, i_index, extent1, extent2) BIND(C)
+    SUBROUTINE cxios_set_domain_i_index(domain_hdl, i_index, extent1) BIND(C)
       USE ISO_C_BINDING
       INTEGER (kind = C_INTPTR_T), VALUE       :: domain_hdl
       INTEGER (KIND=C_INT)     , DIMENSION(*) :: i_index
       INTEGER (kind = C_INT), VALUE  :: extent1
-      INTEGER (kind = C_INT), VALUE  :: extent2
     END SUBROUTINE cxios_set_domain_i_index
 
-    SUBROUTINE cxios_get_domain_i_index(domain_hdl, i_index, extent1, extent2) BIND(C)
+    SUBROUTINE cxios_get_domain_i_index(domain_hdl, i_index, extent1) BIND(C)
       USE ISO_C_BINDING
       INTEGER (kind = C_INTPTR_T), VALUE       :: domain_hdl
       INTEGER (KIND=C_INT)     , DIMENSION(*) :: i_index
       INTEGER (kind = C_INT), VALUE  :: extent1
-      INTEGER (kind = C_INT), VALUE  :: extent2
     END SUBROUTINE cxios_get_domain_i_index
 
@@ -319,37 +317,16 @@
 
 
-    SUBROUTINE cxios_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 cxios_set_domain_iend
-
-    SUBROUTINE cxios_get_domain_iend(domain_hdl, iend) BIND(C)
-      USE ISO_C_BINDING
-      INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
-      INTEGER (KIND=C_INT)             :: iend
-    END SUBROUTINE cxios_get_domain_iend
-
-    FUNCTION cxios_is_defined_domain_iend(domain_hdl) BIND(C)
-      USE ISO_C_BINDING
-      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domain_iend
-      INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
-    END FUNCTION cxios_is_defined_domain_iend
-
-
-    SUBROUTINE cxios_set_domain_j_index(domain_hdl, j_index, extent1, extent2) BIND(C)
+    SUBROUTINE cxios_set_domain_j_index(domain_hdl, j_index, extent1) BIND(C)
       USE ISO_C_BINDING
       INTEGER (kind = C_INTPTR_T), VALUE       :: domain_hdl
       INTEGER (KIND=C_INT)     , DIMENSION(*) :: j_index
       INTEGER (kind = C_INT), VALUE  :: extent1
-      INTEGER (kind = C_INT), VALUE  :: extent2
     END SUBROUTINE cxios_set_domain_j_index
 
-    SUBROUTINE cxios_get_domain_j_index(domain_hdl, j_index, extent1, extent2) BIND(C)
+    SUBROUTINE cxios_get_domain_j_index(domain_hdl, j_index, extent1) BIND(C)
       USE ISO_C_BINDING
       INTEGER (kind = C_INTPTR_T), VALUE       :: domain_hdl
       INTEGER (KIND=C_INT)     , DIMENSION(*) :: j_index
       INTEGER (kind = C_INT), VALUE  :: extent1
-      INTEGER (kind = C_INT), VALUE  :: extent2
     END SUBROUTINE cxios_get_domain_j_index
 
@@ -378,23 +355,4 @@
       INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
     END FUNCTION cxios_is_defined_domain_jbegin
-
-
-    SUBROUTINE cxios_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 cxios_set_domain_jend
-
-    SUBROUTINE cxios_get_domain_jend(domain_hdl, jend) BIND(C)
-      USE ISO_C_BINDING
-      INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
-      INTEGER (KIND=C_INT)             :: jend
-    END SUBROUTINE cxios_get_domain_jend
-
-    FUNCTION cxios_is_defined_domain_jend(domain_hdl) BIND(C)
-      USE ISO_C_BINDING
-      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domain_jend
-      INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
-    END FUNCTION cxios_is_defined_domain_jend
 
 
@@ -642,156 +600,4 @@
     END FUNCTION cxios_is_defined_domain_type
 
-
-    SUBROUTINE cxios_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 cxios_set_domain_zoom_ibegin
-
-    SUBROUTINE cxios_get_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)             :: zoom_ibegin
-    END SUBROUTINE cxios_get_domain_zoom_ibegin
-
-    FUNCTION cxios_is_defined_domain_zoom_ibegin(domain_hdl) BIND(C)
-      USE ISO_C_BINDING
-      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domain_zoom_ibegin
-      INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
-    END FUNCTION cxios_is_defined_domain_zoom_ibegin
-
-
-    SUBROUTINE cxios_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 cxios_set_domain_zoom_ibegin_loc
-
-    SUBROUTINE cxios_get_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)             :: zoom_ibegin_loc
-    END SUBROUTINE cxios_get_domain_zoom_ibegin_loc
-
-    FUNCTION cxios_is_defined_domain_zoom_ibegin_loc(domain_hdl) BIND(C)
-      USE ISO_C_BINDING
-      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domain_zoom_ibegin_loc
-      INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
-    END FUNCTION cxios_is_defined_domain_zoom_ibegin_loc
-
-
-    SUBROUTINE cxios_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 cxios_set_domain_zoom_jbegin
-
-    SUBROUTINE cxios_get_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)             :: zoom_jbegin
-    END SUBROUTINE cxios_get_domain_zoom_jbegin
-
-    FUNCTION cxios_is_defined_domain_zoom_jbegin(domain_hdl) BIND(C)
-      USE ISO_C_BINDING
-      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domain_zoom_jbegin
-      INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
-    END FUNCTION cxios_is_defined_domain_zoom_jbegin
-
-
-    SUBROUTINE cxios_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 cxios_set_domain_zoom_jbegin_loc
-
-    SUBROUTINE cxios_get_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)             :: zoom_jbegin_loc
-    END SUBROUTINE cxios_get_domain_zoom_jbegin_loc
-
-    FUNCTION cxios_is_defined_domain_zoom_jbegin_loc(domain_hdl) BIND(C)
-      USE ISO_C_BINDING
-      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domain_zoom_jbegin_loc
-      INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
-    END FUNCTION cxios_is_defined_domain_zoom_jbegin_loc
-
-
-    SUBROUTINE cxios_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 cxios_set_domain_zoom_ni
-
-    SUBROUTINE cxios_get_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)             :: zoom_ni
-    END SUBROUTINE cxios_get_domain_zoom_ni
-
-    FUNCTION cxios_is_defined_domain_zoom_ni(domain_hdl) BIND(C)
-      USE ISO_C_BINDING
-      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domain_zoom_ni
-      INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
-    END FUNCTION cxios_is_defined_domain_zoom_ni
-
-
-    SUBROUTINE cxios_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 cxios_set_domain_zoom_ni_loc
-
-    SUBROUTINE cxios_get_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)             :: zoom_ni_loc
-    END SUBROUTINE cxios_get_domain_zoom_ni_loc
-
-    FUNCTION cxios_is_defined_domain_zoom_ni_loc(domain_hdl) BIND(C)
-      USE ISO_C_BINDING
-      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domain_zoom_ni_loc
-      INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
-    END FUNCTION cxios_is_defined_domain_zoom_ni_loc
-
-
-    SUBROUTINE cxios_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 cxios_set_domain_zoom_nj
-
-    SUBROUTINE cxios_get_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)             :: zoom_nj
-    END SUBROUTINE cxios_get_domain_zoom_nj
-
-    FUNCTION cxios_is_defined_domain_zoom_nj(domain_hdl) BIND(C)
-      USE ISO_C_BINDING
-      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domain_zoom_nj
-      INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
-    END FUNCTION cxios_is_defined_domain_zoom_nj
-
-
-    SUBROUTINE cxios_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 cxios_set_domain_zoom_nj_loc
-
-    SUBROUTINE cxios_get_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)             :: zoom_nj_loc
-    END SUBROUTINE cxios_get_domain_zoom_nj_loc
-
-    FUNCTION cxios_is_defined_domain_zoom_nj_loc(domain_hdl) BIND(C)
-      USE ISO_C_BINDING
-      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domain_zoom_nj_loc
-      INTEGER (kind = C_INTPTR_T), VALUE :: domain_hdl
-    END FUNCTION cxios_is_defined_domain_zoom_nj_loc
-
   END INTERFACE
 
Index: XIOS/trunk/src/interface/fortran_attr/domaingroup_interface_attr.F90
===================================================================
--- XIOS/trunk/src/interface/fortran_attr/domaingroup_interface_attr.F90	(revision 656)
+++ XIOS/trunk/src/interface/fortran_attr/domaingroup_interface_attr.F90	(revision 657)
@@ -298,18 +298,16 @@
 
 
-    SUBROUTINE cxios_set_domaingroup_i_index(domaingroup_hdl, i_index, extent1, extent2) BIND(C)
+    SUBROUTINE cxios_set_domaingroup_i_index(domaingroup_hdl, i_index, extent1) BIND(C)
       USE ISO_C_BINDING
       INTEGER (kind = C_INTPTR_T), VALUE       :: domaingroup_hdl
       INTEGER (KIND=C_INT)     , DIMENSION(*) :: i_index
       INTEGER (kind = C_INT), VALUE  :: extent1
-      INTEGER (kind = C_INT), VALUE  :: extent2
     END SUBROUTINE cxios_set_domaingroup_i_index
 
-    SUBROUTINE cxios_get_domaingroup_i_index(domaingroup_hdl, i_index, extent1, extent2) BIND(C)
+    SUBROUTINE cxios_get_domaingroup_i_index(domaingroup_hdl, i_index, extent1) BIND(C)
       USE ISO_C_BINDING
       INTEGER (kind = C_INTPTR_T), VALUE       :: domaingroup_hdl
       INTEGER (KIND=C_INT)     , DIMENSION(*) :: i_index
       INTEGER (kind = C_INT), VALUE  :: extent1
-      INTEGER (kind = C_INT), VALUE  :: extent2
     END SUBROUTINE cxios_get_domaingroup_i_index
 
@@ -340,37 +338,16 @@
 
 
-    SUBROUTINE cxios_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 cxios_set_domaingroup_iend
-
-    SUBROUTINE cxios_get_domaingroup_iend(domaingroup_hdl, iend) BIND(C)
-      USE ISO_C_BINDING
-      INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
-      INTEGER (KIND=C_INT)             :: iend
-    END SUBROUTINE cxios_get_domaingroup_iend
-
-    FUNCTION cxios_is_defined_domaingroup_iend(domaingroup_hdl) BIND(C)
-      USE ISO_C_BINDING
-      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domaingroup_iend
-      INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
-    END FUNCTION cxios_is_defined_domaingroup_iend
-
-
-    SUBROUTINE cxios_set_domaingroup_j_index(domaingroup_hdl, j_index, extent1, extent2) BIND(C)
+    SUBROUTINE cxios_set_domaingroup_j_index(domaingroup_hdl, j_index, extent1) BIND(C)
       USE ISO_C_BINDING
       INTEGER (kind = C_INTPTR_T), VALUE       :: domaingroup_hdl
       INTEGER (KIND=C_INT)     , DIMENSION(*) :: j_index
       INTEGER (kind = C_INT), VALUE  :: extent1
-      INTEGER (kind = C_INT), VALUE  :: extent2
     END SUBROUTINE cxios_set_domaingroup_j_index
 
-    SUBROUTINE cxios_get_domaingroup_j_index(domaingroup_hdl, j_index, extent1, extent2) BIND(C)
+    SUBROUTINE cxios_get_domaingroup_j_index(domaingroup_hdl, j_index, extent1) BIND(C)
       USE ISO_C_BINDING
       INTEGER (kind = C_INTPTR_T), VALUE       :: domaingroup_hdl
       INTEGER (KIND=C_INT)     , DIMENSION(*) :: j_index
       INTEGER (kind = C_INT), VALUE  :: extent1
-      INTEGER (kind = C_INT), VALUE  :: extent2
     END SUBROUTINE cxios_get_domaingroup_j_index
 
@@ -399,23 +376,4 @@
       INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
     END FUNCTION cxios_is_defined_domaingroup_jbegin
-
-
-    SUBROUTINE cxios_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 cxios_set_domaingroup_jend
-
-    SUBROUTINE cxios_get_domaingroup_jend(domaingroup_hdl, jend) BIND(C)
-      USE ISO_C_BINDING
-      INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
-      INTEGER (KIND=C_INT)             :: jend
-    END SUBROUTINE cxios_get_domaingroup_jend
-
-    FUNCTION cxios_is_defined_domaingroup_jend(domaingroup_hdl) BIND(C)
-      USE ISO_C_BINDING
-      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domaingroup_jend
-      INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
-    END FUNCTION cxios_is_defined_domaingroup_jend
 
 
@@ -663,156 +621,4 @@
     END FUNCTION cxios_is_defined_domaingroup_type
 
-
-    SUBROUTINE cxios_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 cxios_set_domaingroup_zoom_ibegin
-
-    SUBROUTINE cxios_get_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)             :: zoom_ibegin
-    END SUBROUTINE cxios_get_domaingroup_zoom_ibegin
-
-    FUNCTION cxios_is_defined_domaingroup_zoom_ibegin(domaingroup_hdl) BIND(C)
-      USE ISO_C_BINDING
-      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domaingroup_zoom_ibegin
-      INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
-    END FUNCTION cxios_is_defined_domaingroup_zoom_ibegin
-
-
-    SUBROUTINE cxios_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 cxios_set_domaingroup_zoom_ibegin_loc
-
-    SUBROUTINE cxios_get_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)             :: zoom_ibegin_loc
-    END SUBROUTINE cxios_get_domaingroup_zoom_ibegin_loc
-
-    FUNCTION cxios_is_defined_domaingroup_zoom_ibegin_loc(domaingroup_hdl) BIND(C)
-      USE ISO_C_BINDING
-      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domaingroup_zoom_ibegin_loc
-      INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
-    END FUNCTION cxios_is_defined_domaingroup_zoom_ibegin_loc
-
-
-    SUBROUTINE cxios_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 cxios_set_domaingroup_zoom_jbegin
-
-    SUBROUTINE cxios_get_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)             :: zoom_jbegin
-    END SUBROUTINE cxios_get_domaingroup_zoom_jbegin
-
-    FUNCTION cxios_is_defined_domaingroup_zoom_jbegin(domaingroup_hdl) BIND(C)
-      USE ISO_C_BINDING
-      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domaingroup_zoom_jbegin
-      INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
-    END FUNCTION cxios_is_defined_domaingroup_zoom_jbegin
-
-
-    SUBROUTINE cxios_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 cxios_set_domaingroup_zoom_jbegin_loc
-
-    SUBROUTINE cxios_get_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)             :: zoom_jbegin_loc
-    END SUBROUTINE cxios_get_domaingroup_zoom_jbegin_loc
-
-    FUNCTION cxios_is_defined_domaingroup_zoom_jbegin_loc(domaingroup_hdl) BIND(C)
-      USE ISO_C_BINDING
-      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domaingroup_zoom_jbegin_loc
-      INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
-    END FUNCTION cxios_is_defined_domaingroup_zoom_jbegin_loc
-
-
-    SUBROUTINE cxios_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 cxios_set_domaingroup_zoom_ni
-
-    SUBROUTINE cxios_get_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)             :: zoom_ni
-    END SUBROUTINE cxios_get_domaingroup_zoom_ni
-
-    FUNCTION cxios_is_defined_domaingroup_zoom_ni(domaingroup_hdl) BIND(C)
-      USE ISO_C_BINDING
-      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domaingroup_zoom_ni
-      INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
-    END FUNCTION cxios_is_defined_domaingroup_zoom_ni
-
-
-    SUBROUTINE cxios_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 cxios_set_domaingroup_zoom_ni_loc
-
-    SUBROUTINE cxios_get_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)             :: zoom_ni_loc
-    END SUBROUTINE cxios_get_domaingroup_zoom_ni_loc
-
-    FUNCTION cxios_is_defined_domaingroup_zoom_ni_loc(domaingroup_hdl) BIND(C)
-      USE ISO_C_BINDING
-      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domaingroup_zoom_ni_loc
-      INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
-    END FUNCTION cxios_is_defined_domaingroup_zoom_ni_loc
-
-
-    SUBROUTINE cxios_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 cxios_set_domaingroup_zoom_nj
-
-    SUBROUTINE cxios_get_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)             :: zoom_nj
-    END SUBROUTINE cxios_get_domaingroup_zoom_nj
-
-    FUNCTION cxios_is_defined_domaingroup_zoom_nj(domaingroup_hdl) BIND(C)
-      USE ISO_C_BINDING
-      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domaingroup_zoom_nj
-      INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
-    END FUNCTION cxios_is_defined_domaingroup_zoom_nj
-
-
-    SUBROUTINE cxios_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 cxios_set_domaingroup_zoom_nj_loc
-
-    SUBROUTINE cxios_get_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)             :: zoom_nj_loc
-    END SUBROUTINE cxios_get_domaingroup_zoom_nj_loc
-
-    FUNCTION cxios_is_defined_domaingroup_zoom_nj_loc(domaingroup_hdl) BIND(C)
-      USE ISO_C_BINDING
-      LOGICAL(kind=C_BOOL) :: cxios_is_defined_domaingroup_zoom_nj_loc
-      INTEGER (kind = C_INTPTR_T), VALUE :: domaingroup_hdl
-    END FUNCTION cxios_is_defined_domaingroup_zoom_nj_loc
-
   END INTERFACE
 
Index: XIOS/trunk/src/interface/fortran_attr/idomain_attr.F90
===================================================================
--- XIOS/trunk/src/interface/fortran_attr/idomain_attr.F90	(revision 656)
+++ XIOS/trunk/src/interface/fortran_attr/idomain_attr.F90	(revision 657)
@@ -14,7 +14,6 @@
     ( domain_id, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  &
     , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, i_index, ibegin  &
-    , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  &
-    , nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni  &
-    , zoom_ni_loc, zoom_nj, zoom_nj_loc )
+    , j_index, jbegin, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex  &
+    , standard_name, type )
 
     IMPLICIT NONE
@@ -34,10 +33,8 @@
       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: domain_group_ref
       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: domain_ref
-      INTEGER  , OPTIONAL, INTENT(IN) :: i_index(:,:)
+      INTEGER  , OPTIONAL, INTENT(IN) :: i_index(:)
       INTEGER  , OPTIONAL, INTENT(IN) :: ibegin
-      INTEGER  , OPTIONAL, INTENT(IN) :: iend
-      INTEGER  , OPTIONAL, INTENT(IN) :: j_index(:,:)
+      INTEGER  , OPTIONAL, INTENT(IN) :: j_index(:)
       INTEGER  , OPTIONAL, INTENT(IN) :: jbegin
-      INTEGER  , OPTIONAL, INTENT(IN) :: jend
       REAL (KIND=8) , OPTIONAL, INTENT(IN) :: latvalue(:)
       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: long_name
@@ -53,12 +50,4 @@
       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name
       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: type
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ibegin
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ibegin_loc
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_jbegin
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_jbegin_loc
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ni
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ni_loc
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_nj
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_nj_loc
 
       CALL xios(get_domain_handle)(domain_id,domain_hdl)
@@ -66,7 +55,6 @@
       ( domain_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  &
       , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, i_index, ibegin  &
-      , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  &
-      , nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni  &
-      , zoom_ni_loc, zoom_nj, zoom_nj_loc )
+      , j_index, jbegin, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex  &
+      , standard_name, type )
 
   END SUBROUTINE xios(set_domain_attr)
@@ -75,7 +63,6 @@
     ( domain_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  &
     , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, i_index, ibegin  &
-    , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  &
-    , nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni  &
-    , zoom_ni_loc, zoom_nj, zoom_nj_loc )
+    , j_index, jbegin, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex  &
+    , standard_name, type )
 
     IMPLICIT NONE
@@ -94,10 +81,8 @@
       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: domain_group_ref
       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: domain_ref
-      INTEGER  , OPTIONAL, INTENT(IN) :: i_index(:,:)
+      INTEGER  , OPTIONAL, INTENT(IN) :: i_index(:)
       INTEGER  , OPTIONAL, INTENT(IN) :: ibegin
-      INTEGER  , OPTIONAL, INTENT(IN) :: iend
-      INTEGER  , OPTIONAL, INTENT(IN) :: j_index(:,:)
+      INTEGER  , OPTIONAL, INTENT(IN) :: j_index(:)
       INTEGER  , OPTIONAL, INTENT(IN) :: jbegin
-      INTEGER  , OPTIONAL, INTENT(IN) :: jend
       REAL (KIND=8) , OPTIONAL, INTENT(IN) :: latvalue(:)
       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: long_name
@@ -113,19 +98,10 @@
       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name
       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: type
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ibegin
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ibegin_loc
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_jbegin
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_jbegin_loc
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ni
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ni_loc
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_nj
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_nj_loc
 
       CALL xios(set_domain_attr_hdl_)  &
       ( domain_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  &
       , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, i_index, ibegin  &
-      , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  &
-      , nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni  &
-      , zoom_ni_loc, zoom_nj, zoom_nj_loc )
+      , j_index, jbegin, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex  &
+      , standard_name, type )
 
   END SUBROUTINE xios(set_domain_attr_hdl)
@@ -134,7 +110,6 @@
     ( domain_hdl, area_, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  &
     , data_jbegin_, data_n_index_, data_ni_, data_nj_, domain_group_ref_, domain_ref_, i_index_  &
-    , ibegin_, iend_, j_index_, jbegin_, jend_, latvalue_, long_name_, lonvalue_, mask_, name_, ni_  &
-    , ni_glo_, nj_, nj_glo_, nvertex_, standard_name_, type_, zoom_ibegin_, zoom_ibegin_loc_, zoom_jbegin_  &
-    , zoom_jbegin_loc_, zoom_ni_, zoom_ni_loc_, zoom_nj_, zoom_nj_loc_ )
+    , ibegin_, j_index_, jbegin_, latvalue_, long_name_, lonvalue_, mask_, name_, ni_, ni_glo_, nj_  &
+    , nj_glo_, nvertex_, standard_name_, type_ )
 
     IMPLICIT NONE
@@ -153,10 +128,8 @@
       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: domain_group_ref_
       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: domain_ref_
-      INTEGER  , OPTIONAL, INTENT(IN) :: i_index_(:,:)
+      INTEGER  , OPTIONAL, INTENT(IN) :: i_index_(:)
       INTEGER  , OPTIONAL, INTENT(IN) :: ibegin_
-      INTEGER  , OPTIONAL, INTENT(IN) :: iend_
-      INTEGER  , OPTIONAL, INTENT(IN) :: j_index_(:,:)
+      INTEGER  , OPTIONAL, INTENT(IN) :: j_index_(:)
       INTEGER  , OPTIONAL, INTENT(IN) :: jbegin_
-      INTEGER  , OPTIONAL, INTENT(IN) :: jend_
       REAL (KIND=8) , OPTIONAL, INTENT(IN) :: latvalue_(:)
       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: long_name_
@@ -172,12 +145,4 @@
       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name_
       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: type_
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ibegin_
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ibegin_loc_
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_jbegin_
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_jbegin_loc_
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ni_
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ni_loc_
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_nj_
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_nj_loc_
 
       IF (PRESENT(area_)) THEN
@@ -234,5 +199,5 @@
 
       IF (PRESENT(i_index_)) THEN
-        CALL cxios_set_domain_i_index(domain_hdl%daddr, i_index_, size(i_index_,1), size(i_index_,2))
+        CALL cxios_set_domain_i_index(domain_hdl%daddr, i_index_, size(i_index_,1))
       ENDIF
 
@@ -241,18 +206,10 @@
       ENDIF
 
-      IF (PRESENT(iend_)) THEN
-        CALL cxios_set_domain_iend(domain_hdl%daddr, iend_)
-      ENDIF
-
       IF (PRESENT(j_index_)) THEN
-        CALL cxios_set_domain_j_index(domain_hdl%daddr, j_index_, size(j_index_,1), size(j_index_,2))
+        CALL cxios_set_domain_j_index(domain_hdl%daddr, j_index_, size(j_index_,1))
       ENDIF
 
       IF (PRESENT(jbegin_)) THEN
         CALL cxios_set_domain_jbegin(domain_hdl%daddr, jbegin_)
-      ENDIF
-
-      IF (PRESENT(jend_)) THEN
-        CALL cxios_set_domain_jend(domain_hdl%daddr, jend_)
       ENDIF
 
@@ -307,36 +264,4 @@
       ENDIF
 
-      IF (PRESENT(zoom_ibegin_)) THEN
-        CALL cxios_set_domain_zoom_ibegin(domain_hdl%daddr, zoom_ibegin_)
-      ENDIF
-
-      IF (PRESENT(zoom_ibegin_loc_)) THEN
-        CALL cxios_set_domain_zoom_ibegin_loc(domain_hdl%daddr, zoom_ibegin_loc_)
-      ENDIF
-
-      IF (PRESENT(zoom_jbegin_)) THEN
-        CALL cxios_set_domain_zoom_jbegin(domain_hdl%daddr, zoom_jbegin_)
-      ENDIF
-
-      IF (PRESENT(zoom_jbegin_loc_)) THEN
-        CALL cxios_set_domain_zoom_jbegin_loc(domain_hdl%daddr, zoom_jbegin_loc_)
-      ENDIF
-
-      IF (PRESENT(zoom_ni_)) THEN
-        CALL cxios_set_domain_zoom_ni(domain_hdl%daddr, zoom_ni_)
-      ENDIF
-
-      IF (PRESENT(zoom_ni_loc_)) THEN
-        CALL cxios_set_domain_zoom_ni_loc(domain_hdl%daddr, zoom_ni_loc_)
-      ENDIF
-
-      IF (PRESENT(zoom_nj_)) THEN
-        CALL cxios_set_domain_zoom_nj(domain_hdl%daddr, zoom_nj_)
-      ENDIF
-
-      IF (PRESENT(zoom_nj_loc_)) THEN
-        CALL cxios_set_domain_zoom_nj_loc(domain_hdl%daddr, zoom_nj_loc_)
-      ENDIF
-
   END SUBROUTINE xios(set_domain_attr_hdl_)
 
@@ -344,7 +269,6 @@
     ( domain_id, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  &
     , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, i_index, ibegin  &
-    , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  &
-    , nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni  &
-    , zoom_ni_loc, zoom_nj, zoom_nj_loc )
+    , j_index, jbegin, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex  &
+    , standard_name, type )
 
     IMPLICIT NONE
@@ -364,10 +288,8 @@
       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: domain_group_ref
       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: domain_ref
-      INTEGER  , OPTIONAL, INTENT(OUT) :: i_index(:,:)
+      INTEGER  , OPTIONAL, INTENT(OUT) :: i_index(:)
       INTEGER  , OPTIONAL, INTENT(OUT) :: ibegin
-      INTEGER  , OPTIONAL, INTENT(OUT) :: iend
-      INTEGER  , OPTIONAL, INTENT(OUT) :: j_index(:,:)
+      INTEGER  , OPTIONAL, INTENT(OUT) :: j_index(:)
       INTEGER  , OPTIONAL, INTENT(OUT) :: jbegin
-      INTEGER  , OPTIONAL, INTENT(OUT) :: jend
       REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: latvalue(:)
       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: long_name
@@ -383,12 +305,4 @@
       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name
       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: type
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ibegin
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ibegin_loc
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_jbegin
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_jbegin_loc
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ni
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ni_loc
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_nj
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_nj_loc
 
       CALL xios(get_domain_handle)(domain_id,domain_hdl)
@@ -396,7 +310,6 @@
       ( domain_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  &
       , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, i_index, ibegin  &
-      , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  &
-      , nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni  &
-      , zoom_ni_loc, zoom_nj, zoom_nj_loc )
+      , j_index, jbegin, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex  &
+      , standard_name, type )
 
   END SUBROUTINE xios(get_domain_attr)
@@ -405,7 +318,6 @@
     ( domain_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  &
     , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, i_index, ibegin  &
-    , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  &
-    , nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni  &
-    , zoom_ni_loc, zoom_nj, zoom_nj_loc )
+    , j_index, jbegin, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex  &
+    , standard_name, type )
 
     IMPLICIT NONE
@@ -424,10 +336,8 @@
       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: domain_group_ref
       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: domain_ref
-      INTEGER  , OPTIONAL, INTENT(OUT) :: i_index(:,:)
+      INTEGER  , OPTIONAL, INTENT(OUT) :: i_index(:)
       INTEGER  , OPTIONAL, INTENT(OUT) :: ibegin
-      INTEGER  , OPTIONAL, INTENT(OUT) :: iend
-      INTEGER  , OPTIONAL, INTENT(OUT) :: j_index(:,:)
+      INTEGER  , OPTIONAL, INTENT(OUT) :: j_index(:)
       INTEGER  , OPTIONAL, INTENT(OUT) :: jbegin
-      INTEGER  , OPTIONAL, INTENT(OUT) :: jend
       REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: latvalue(:)
       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: long_name
@@ -443,19 +353,10 @@
       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name
       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: type
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ibegin
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ibegin_loc
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_jbegin
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_jbegin_loc
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ni
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ni_loc
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_nj
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_nj_loc
 
       CALL xios(get_domain_attr_hdl_)  &
       ( domain_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  &
       , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, i_index, ibegin  &
-      , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  &
-      , nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni  &
-      , zoom_ni_loc, zoom_nj, zoom_nj_loc )
+      , j_index, jbegin, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex  &
+      , standard_name, type )
 
   END SUBROUTINE xios(get_domain_attr_hdl)
@@ -464,7 +365,6 @@
     ( domain_hdl, area_, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  &
     , data_jbegin_, data_n_index_, data_ni_, data_nj_, domain_group_ref_, domain_ref_, i_index_  &
-    , ibegin_, iend_, j_index_, jbegin_, jend_, latvalue_, long_name_, lonvalue_, mask_, name_, ni_  &
-    , ni_glo_, nj_, nj_glo_, nvertex_, standard_name_, type_, zoom_ibegin_, zoom_ibegin_loc_, zoom_jbegin_  &
-    , zoom_jbegin_loc_, zoom_ni_, zoom_ni_loc_, zoom_nj_, zoom_nj_loc_ )
+    , ibegin_, j_index_, jbegin_, latvalue_, long_name_, lonvalue_, mask_, name_, ni_, ni_glo_, nj_  &
+    , nj_glo_, nvertex_, standard_name_, type_ )
 
     IMPLICIT NONE
@@ -483,10 +383,8 @@
       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: domain_group_ref_
       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: domain_ref_
-      INTEGER  , OPTIONAL, INTENT(OUT) :: i_index_(:,:)
+      INTEGER  , OPTIONAL, INTENT(OUT) :: i_index_(:)
       INTEGER  , OPTIONAL, INTENT(OUT) :: ibegin_
-      INTEGER  , OPTIONAL, INTENT(OUT) :: iend_
-      INTEGER  , OPTIONAL, INTENT(OUT) :: j_index_(:,:)
+      INTEGER  , OPTIONAL, INTENT(OUT) :: j_index_(:)
       INTEGER  , OPTIONAL, INTENT(OUT) :: jbegin_
-      INTEGER  , OPTIONAL, INTENT(OUT) :: jend_
       REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: latvalue_(:)
       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: long_name_
@@ -502,12 +400,4 @@
       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name_
       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: type_
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ibegin_
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ibegin_loc_
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_jbegin_
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_jbegin_loc_
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ni_
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ni_loc_
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_nj_
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_nj_loc_
 
       IF (PRESENT(area_)) THEN
@@ -564,5 +454,5 @@
 
       IF (PRESENT(i_index_)) THEN
-        CALL cxios_get_domain_i_index(domain_hdl%daddr, i_index_, size(i_index_,1), size(i_index_,2))
+        CALL cxios_get_domain_i_index(domain_hdl%daddr, i_index_, size(i_index_,1))
       ENDIF
 
@@ -571,18 +461,10 @@
       ENDIF
 
-      IF (PRESENT(iend_)) THEN
-        CALL cxios_get_domain_iend(domain_hdl%daddr, iend_)
-      ENDIF
-
       IF (PRESENT(j_index_)) THEN
-        CALL cxios_get_domain_j_index(domain_hdl%daddr, j_index_, size(j_index_,1), size(j_index_,2))
+        CALL cxios_get_domain_j_index(domain_hdl%daddr, j_index_, size(j_index_,1))
       ENDIF
 
       IF (PRESENT(jbegin_)) THEN
         CALL cxios_get_domain_jbegin(domain_hdl%daddr, jbegin_)
-      ENDIF
-
-      IF (PRESENT(jend_)) THEN
-        CALL cxios_get_domain_jend(domain_hdl%daddr, jend_)
       ENDIF
 
@@ -637,36 +519,4 @@
       ENDIF
 
-      IF (PRESENT(zoom_ibegin_)) THEN
-        CALL cxios_get_domain_zoom_ibegin(domain_hdl%daddr, zoom_ibegin_)
-      ENDIF
-
-      IF (PRESENT(zoom_ibegin_loc_)) THEN
-        CALL cxios_get_domain_zoom_ibegin_loc(domain_hdl%daddr, zoom_ibegin_loc_)
-      ENDIF
-
-      IF (PRESENT(zoom_jbegin_)) THEN
-        CALL cxios_get_domain_zoom_jbegin(domain_hdl%daddr, zoom_jbegin_)
-      ENDIF
-
-      IF (PRESENT(zoom_jbegin_loc_)) THEN
-        CALL cxios_get_domain_zoom_jbegin_loc(domain_hdl%daddr, zoom_jbegin_loc_)
-      ENDIF
-
-      IF (PRESENT(zoom_ni_)) THEN
-        CALL cxios_get_domain_zoom_ni(domain_hdl%daddr, zoom_ni_)
-      ENDIF
-
-      IF (PRESENT(zoom_ni_loc_)) THEN
-        CALL cxios_get_domain_zoom_ni_loc(domain_hdl%daddr, zoom_ni_loc_)
-      ENDIF
-
-      IF (PRESENT(zoom_nj_)) THEN
-        CALL cxios_get_domain_zoom_nj(domain_hdl%daddr, zoom_nj_)
-      ENDIF
-
-      IF (PRESENT(zoom_nj_loc_)) THEN
-        CALL cxios_get_domain_zoom_nj_loc(domain_hdl%daddr, zoom_nj_loc_)
-      ENDIF
-
   END SUBROUTINE xios(get_domain_attr_hdl_)
 
@@ -674,7 +524,6 @@
     ( domain_id, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  &
     , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, i_index, ibegin  &
-    , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  &
-    , nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni  &
-    , zoom_ni_loc, zoom_nj, zoom_nj_loc )
+    , j_index, jbegin, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex  &
+    , standard_name, type )
 
     IMPLICIT NONE
@@ -711,12 +560,8 @@
       LOGICAL, OPTIONAL, INTENT(OUT) :: ibegin
       LOGICAL(KIND=C_BOOL) :: ibegin_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: iend
-      LOGICAL(KIND=C_BOOL) :: iend_tmp
       LOGICAL, OPTIONAL, INTENT(OUT) :: j_index
       LOGICAL(KIND=C_BOOL) :: j_index_tmp
       LOGICAL, OPTIONAL, INTENT(OUT) :: jbegin
       LOGICAL(KIND=C_BOOL) :: jbegin_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: jend
-      LOGICAL(KIND=C_BOOL) :: jend_tmp
       LOGICAL, OPTIONAL, INTENT(OUT) :: latvalue
       LOGICAL(KIND=C_BOOL) :: latvalue_tmp
@@ -743,20 +588,4 @@
       LOGICAL, OPTIONAL, INTENT(OUT) :: type
       LOGICAL(KIND=C_BOOL) :: type_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_ibegin
-      LOGICAL(KIND=C_BOOL) :: zoom_ibegin_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_ibegin_loc
-      LOGICAL(KIND=C_BOOL) :: zoom_ibegin_loc_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_jbegin
-      LOGICAL(KIND=C_BOOL) :: zoom_jbegin_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_jbegin_loc
-      LOGICAL(KIND=C_BOOL) :: zoom_jbegin_loc_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_ni
-      LOGICAL(KIND=C_BOOL) :: zoom_ni_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_ni_loc
-      LOGICAL(KIND=C_BOOL) :: zoom_ni_loc_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_nj
-      LOGICAL(KIND=C_BOOL) :: zoom_nj_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_nj_loc
-      LOGICAL(KIND=C_BOOL) :: zoom_nj_loc_tmp
 
       CALL xios(get_domain_handle)(domain_id,domain_hdl)
@@ -764,7 +593,6 @@
       ( domain_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  &
       , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, i_index, ibegin  &
-      , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  &
-      , nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni  &
-      , zoom_ni_loc, zoom_nj, zoom_nj_loc )
+      , j_index, jbegin, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex  &
+      , standard_name, type )
 
   END SUBROUTINE xios(is_defined_domain_attr)
@@ -773,7 +601,6 @@
     ( domain_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  &
     , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, i_index, ibegin  &
-    , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  &
-    , nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni  &
-    , zoom_ni_loc, zoom_nj, zoom_nj_loc )
+    , j_index, jbegin, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex  &
+    , standard_name, type )
 
     IMPLICIT NONE
@@ -809,12 +636,8 @@
       LOGICAL, OPTIONAL, INTENT(OUT) :: ibegin
       LOGICAL(KIND=C_BOOL) :: ibegin_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: iend
-      LOGICAL(KIND=C_BOOL) :: iend_tmp
       LOGICAL, OPTIONAL, INTENT(OUT) :: j_index
       LOGICAL(KIND=C_BOOL) :: j_index_tmp
       LOGICAL, OPTIONAL, INTENT(OUT) :: jbegin
       LOGICAL(KIND=C_BOOL) :: jbegin_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: jend
-      LOGICAL(KIND=C_BOOL) :: jend_tmp
       LOGICAL, OPTIONAL, INTENT(OUT) :: latvalue
       LOGICAL(KIND=C_BOOL) :: latvalue_tmp
@@ -841,27 +664,10 @@
       LOGICAL, OPTIONAL, INTENT(OUT) :: type
       LOGICAL(KIND=C_BOOL) :: type_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_ibegin
-      LOGICAL(KIND=C_BOOL) :: zoom_ibegin_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_ibegin_loc
-      LOGICAL(KIND=C_BOOL) :: zoom_ibegin_loc_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_jbegin
-      LOGICAL(KIND=C_BOOL) :: zoom_jbegin_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_jbegin_loc
-      LOGICAL(KIND=C_BOOL) :: zoom_jbegin_loc_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_ni
-      LOGICAL(KIND=C_BOOL) :: zoom_ni_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_ni_loc
-      LOGICAL(KIND=C_BOOL) :: zoom_ni_loc_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_nj
-      LOGICAL(KIND=C_BOOL) :: zoom_nj_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_nj_loc
-      LOGICAL(KIND=C_BOOL) :: zoom_nj_loc_tmp
 
       CALL xios(is_defined_domain_attr_hdl_)  &
       ( domain_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  &
       , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, i_index, ibegin  &
-      , iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  &
-      , nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc, zoom_ni  &
-      , zoom_ni_loc, zoom_nj, zoom_nj_loc )
+      , j_index, jbegin, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo, nvertex  &
+      , standard_name, type )
 
   END SUBROUTINE xios(is_defined_domain_attr_hdl)
@@ -870,7 +676,6 @@
     ( domain_hdl, area_, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  &
     , data_jbegin_, data_n_index_, data_ni_, data_nj_, domain_group_ref_, domain_ref_, i_index_  &
-    , ibegin_, iend_, j_index_, jbegin_, jend_, latvalue_, long_name_, lonvalue_, mask_, name_, ni_  &
-    , ni_glo_, nj_, nj_glo_, nvertex_, standard_name_, type_, zoom_ibegin_, zoom_ibegin_loc_, zoom_jbegin_  &
-    , zoom_jbegin_loc_, zoom_ni_, zoom_ni_loc_, zoom_nj_, zoom_nj_loc_ )
+    , ibegin_, j_index_, jbegin_, latvalue_, long_name_, lonvalue_, mask_, name_, ni_, ni_glo_, nj_  &
+    , nj_glo_, nvertex_, standard_name_, type_ )
 
     IMPLICIT NONE
@@ -906,12 +711,8 @@
       LOGICAL, OPTIONAL, INTENT(OUT) :: ibegin_
       LOGICAL(KIND=C_BOOL) :: ibegin__tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: iend_
-      LOGICAL(KIND=C_BOOL) :: iend__tmp
       LOGICAL, OPTIONAL, INTENT(OUT) :: j_index_
       LOGICAL(KIND=C_BOOL) :: j_index__tmp
       LOGICAL, OPTIONAL, INTENT(OUT) :: jbegin_
       LOGICAL(KIND=C_BOOL) :: jbegin__tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: jend_
-      LOGICAL(KIND=C_BOOL) :: jend__tmp
       LOGICAL, OPTIONAL, INTENT(OUT) :: latvalue_
       LOGICAL(KIND=C_BOOL) :: latvalue__tmp
@@ -938,20 +739,4 @@
       LOGICAL, OPTIONAL, INTENT(OUT) :: type_
       LOGICAL(KIND=C_BOOL) :: type__tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_ibegin_
-      LOGICAL(KIND=C_BOOL) :: zoom_ibegin__tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_ibegin_loc_
-      LOGICAL(KIND=C_BOOL) :: zoom_ibegin_loc__tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_jbegin_
-      LOGICAL(KIND=C_BOOL) :: zoom_jbegin__tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_jbegin_loc_
-      LOGICAL(KIND=C_BOOL) :: zoom_jbegin_loc__tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_ni_
-      LOGICAL(KIND=C_BOOL) :: zoom_ni__tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_ni_loc_
-      LOGICAL(KIND=C_BOOL) :: zoom_ni_loc__tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_nj_
-      LOGICAL(KIND=C_BOOL) :: zoom_nj__tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_nj_loc_
-      LOGICAL(KIND=C_BOOL) :: zoom_nj_loc__tmp
 
       IF (PRESENT(area_)) THEN
@@ -1030,9 +815,4 @@
       ENDIF
 
-      IF (PRESENT(iend_)) THEN
-        iend__tmp = cxios_is_defined_domain_iend(domain_hdl%daddr)
-        iend_ = iend__tmp
-      ENDIF
-
       IF (PRESENT(j_index_)) THEN
         j_index__tmp = cxios_is_defined_domain_j_index(domain_hdl%daddr)
@@ -1045,9 +825,4 @@
       ENDIF
 
-      IF (PRESENT(jend_)) THEN
-        jend__tmp = cxios_is_defined_domain_jend(domain_hdl%daddr)
-        jend_ = jend__tmp
-      ENDIF
-
       IF (PRESENT(latvalue_)) THEN
         latvalue__tmp = cxios_is_defined_domain_latvalue(domain_hdl%daddr)
@@ -1110,44 +885,4 @@
       ENDIF
 
-      IF (PRESENT(zoom_ibegin_)) THEN
-        zoom_ibegin__tmp = cxios_is_defined_domain_zoom_ibegin(domain_hdl%daddr)
-        zoom_ibegin_ = zoom_ibegin__tmp
-      ENDIF
-
-      IF (PRESENT(zoom_ibegin_loc_)) THEN
-        zoom_ibegin_loc__tmp = cxios_is_defined_domain_zoom_ibegin_loc(domain_hdl%daddr)
-        zoom_ibegin_loc_ = zoom_ibegin_loc__tmp
-      ENDIF
-
-      IF (PRESENT(zoom_jbegin_)) THEN
-        zoom_jbegin__tmp = cxios_is_defined_domain_zoom_jbegin(domain_hdl%daddr)
-        zoom_jbegin_ = zoom_jbegin__tmp
-      ENDIF
-
-      IF (PRESENT(zoom_jbegin_loc_)) THEN
-        zoom_jbegin_loc__tmp = cxios_is_defined_domain_zoom_jbegin_loc(domain_hdl%daddr)
-        zoom_jbegin_loc_ = zoom_jbegin_loc__tmp
-      ENDIF
-
-      IF (PRESENT(zoom_ni_)) THEN
-        zoom_ni__tmp = cxios_is_defined_domain_zoom_ni(domain_hdl%daddr)
-        zoom_ni_ = zoom_ni__tmp
-      ENDIF
-
-      IF (PRESENT(zoom_ni_loc_)) THEN
-        zoom_ni_loc__tmp = cxios_is_defined_domain_zoom_ni_loc(domain_hdl%daddr)
-        zoom_ni_loc_ = zoom_ni_loc__tmp
-      ENDIF
-
-      IF (PRESENT(zoom_nj_)) THEN
-        zoom_nj__tmp = cxios_is_defined_domain_zoom_nj(domain_hdl%daddr)
-        zoom_nj_ = zoom_nj__tmp
-      ENDIF
-
-      IF (PRESENT(zoom_nj_loc_)) THEN
-        zoom_nj_loc__tmp = cxios_is_defined_domain_zoom_nj_loc(domain_hdl%daddr)
-        zoom_nj_loc_ = zoom_nj_loc__tmp
-      ENDIF
-
   END SUBROUTINE xios(is_defined_domain_attr_hdl_)
 
Index: XIOS/trunk/src/interface/fortran_attr/idomaingroup_attr.F90
===================================================================
--- XIOS/trunk/src/interface/fortran_attr/idomaingroup_attr.F90	(revision 656)
+++ XIOS/trunk/src/interface/fortran_attr/idomaingroup_attr.F90	(revision 657)
@@ -14,7 +14,6 @@
     ( domaingroup_id, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  &
     , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, group_ref, i_index  &
-    , ibegin, iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo  &
-    , nj, nj_glo, nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc  &
-    , zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc )
+    , ibegin, j_index, jbegin, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  &
+    , nvertex, standard_name, type )
 
     IMPLICIT NONE
@@ -35,10 +34,8 @@
       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: domain_ref
       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: group_ref
-      INTEGER  , OPTIONAL, INTENT(IN) :: i_index(:,:)
+      INTEGER  , OPTIONAL, INTENT(IN) :: i_index(:)
       INTEGER  , OPTIONAL, INTENT(IN) :: ibegin
-      INTEGER  , OPTIONAL, INTENT(IN) :: iend
-      INTEGER  , OPTIONAL, INTENT(IN) :: j_index(:,:)
+      INTEGER  , OPTIONAL, INTENT(IN) :: j_index(:)
       INTEGER  , OPTIONAL, INTENT(IN) :: jbegin
-      INTEGER  , OPTIONAL, INTENT(IN) :: jend
       REAL (KIND=8) , OPTIONAL, INTENT(IN) :: latvalue(:)
       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: long_name
@@ -54,12 +51,4 @@
       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name
       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: type
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ibegin
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ibegin_loc
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_jbegin
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_jbegin_loc
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ni
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ni_loc
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_nj
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_nj_loc
 
       CALL xios(get_domaingroup_handle)(domaingroup_id,domaingroup_hdl)
@@ -67,7 +56,6 @@
       ( domaingroup_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  &
       , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, group_ref, i_index  &
-      , ibegin, iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo  &
-      , nj, nj_glo, nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc  &
-      , zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc )
+      , ibegin, j_index, jbegin, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  &
+      , nvertex, standard_name, type )
 
   END SUBROUTINE xios(set_domaingroup_attr)
@@ -76,7 +64,6 @@
     ( domaingroup_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  &
     , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, group_ref, i_index  &
-    , ibegin, iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo  &
-    , nj, nj_glo, nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc  &
-    , zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc )
+    , ibegin, j_index, jbegin, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  &
+    , nvertex, standard_name, type )
 
     IMPLICIT NONE
@@ -96,10 +83,8 @@
       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: domain_ref
       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: group_ref
-      INTEGER  , OPTIONAL, INTENT(IN) :: i_index(:,:)
+      INTEGER  , OPTIONAL, INTENT(IN) :: i_index(:)
       INTEGER  , OPTIONAL, INTENT(IN) :: ibegin
-      INTEGER  , OPTIONAL, INTENT(IN) :: iend
-      INTEGER  , OPTIONAL, INTENT(IN) :: j_index(:,:)
+      INTEGER  , OPTIONAL, INTENT(IN) :: j_index(:)
       INTEGER  , OPTIONAL, INTENT(IN) :: jbegin
-      INTEGER  , OPTIONAL, INTENT(IN) :: jend
       REAL (KIND=8) , OPTIONAL, INTENT(IN) :: latvalue(:)
       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: long_name
@@ -115,19 +100,10 @@
       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name
       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: type
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ibegin
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ibegin_loc
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_jbegin
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_jbegin_loc
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ni
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ni_loc
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_nj
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_nj_loc
 
       CALL xios(set_domaingroup_attr_hdl_)  &
       ( domaingroup_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  &
       , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, group_ref, i_index  &
-      , ibegin, iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo  &
-      , nj, nj_glo, nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc  &
-      , zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc )
+      , ibegin, j_index, jbegin, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  &
+      , nvertex, standard_name, type )
 
   END SUBROUTINE xios(set_domaingroup_attr_hdl)
@@ -136,7 +112,6 @@
     ( domaingroup_hdl, area_, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  &
     , data_jbegin_, data_n_index_, data_ni_, data_nj_, domain_group_ref_, domain_ref_, group_ref_  &
-    , i_index_, ibegin_, iend_, j_index_, jbegin_, jend_, latvalue_, long_name_, lonvalue_, mask_  &
-    , name_, ni_, ni_glo_, nj_, nj_glo_, nvertex_, standard_name_, type_, zoom_ibegin_, zoom_ibegin_loc_  &
-    , zoom_jbegin_, zoom_jbegin_loc_, zoom_ni_, zoom_ni_loc_, zoom_nj_, zoom_nj_loc_ )
+    , i_index_, ibegin_, j_index_, jbegin_, latvalue_, long_name_, lonvalue_, mask_, name_, ni_  &
+    , ni_glo_, nj_, nj_glo_, nvertex_, standard_name_, type_ )
 
     IMPLICIT NONE
@@ -156,10 +131,8 @@
       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: domain_ref_
       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: group_ref_
-      INTEGER  , OPTIONAL, INTENT(IN) :: i_index_(:,:)
+      INTEGER  , OPTIONAL, INTENT(IN) :: i_index_(:)
       INTEGER  , OPTIONAL, INTENT(IN) :: ibegin_
-      INTEGER  , OPTIONAL, INTENT(IN) :: iend_
-      INTEGER  , OPTIONAL, INTENT(IN) :: j_index_(:,:)
+      INTEGER  , OPTIONAL, INTENT(IN) :: j_index_(:)
       INTEGER  , OPTIONAL, INTENT(IN) :: jbegin_
-      INTEGER  , OPTIONAL, INTENT(IN) :: jend_
       REAL (KIND=8) , OPTIONAL, INTENT(IN) :: latvalue_(:)
       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: long_name_
@@ -175,12 +148,4 @@
       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: standard_name_
       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: type_
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ibegin_
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ibegin_loc_
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_jbegin_
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_jbegin_loc_
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ni_
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_ni_loc_
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_nj_
-      INTEGER  , OPTIONAL, INTENT(IN) :: zoom_nj_loc_
 
       IF (PRESENT(area_)) THEN
@@ -241,5 +206,5 @@
 
       IF (PRESENT(i_index_)) THEN
-        CALL cxios_set_domaingroup_i_index(domaingroup_hdl%daddr, i_index_, size(i_index_,1), size(i_index_,2))
+        CALL cxios_set_domaingroup_i_index(domaingroup_hdl%daddr, i_index_, size(i_index_,1))
       ENDIF
 
@@ -248,18 +213,10 @@
       ENDIF
 
-      IF (PRESENT(iend_)) THEN
-        CALL cxios_set_domaingroup_iend(domaingroup_hdl%daddr, iend_)
-      ENDIF
-
       IF (PRESENT(j_index_)) THEN
-        CALL cxios_set_domaingroup_j_index(domaingroup_hdl%daddr, j_index_, size(j_index_,1), size(j_index_,2))
+        CALL cxios_set_domaingroup_j_index(domaingroup_hdl%daddr, j_index_, size(j_index_,1))
       ENDIF
 
       IF (PRESENT(jbegin_)) THEN
         CALL cxios_set_domaingroup_jbegin(domaingroup_hdl%daddr, jbegin_)
-      ENDIF
-
-      IF (PRESENT(jend_)) THEN
-        CALL cxios_set_domaingroup_jend(domaingroup_hdl%daddr, jend_)
       ENDIF
 
@@ -314,36 +271,4 @@
       ENDIF
 
-      IF (PRESENT(zoom_ibegin_)) THEN
-        CALL cxios_set_domaingroup_zoom_ibegin(domaingroup_hdl%daddr, zoom_ibegin_)
-      ENDIF
-
-      IF (PRESENT(zoom_ibegin_loc_)) THEN
-        CALL cxios_set_domaingroup_zoom_ibegin_loc(domaingroup_hdl%daddr, zoom_ibegin_loc_)
-      ENDIF
-
-      IF (PRESENT(zoom_jbegin_)) THEN
-        CALL cxios_set_domaingroup_zoom_jbegin(domaingroup_hdl%daddr, zoom_jbegin_)
-      ENDIF
-
-      IF (PRESENT(zoom_jbegin_loc_)) THEN
-        CALL cxios_set_domaingroup_zoom_jbegin_loc(domaingroup_hdl%daddr, zoom_jbegin_loc_)
-      ENDIF
-
-      IF (PRESENT(zoom_ni_)) THEN
-        CALL cxios_set_domaingroup_zoom_ni(domaingroup_hdl%daddr, zoom_ni_)
-      ENDIF
-
-      IF (PRESENT(zoom_ni_loc_)) THEN
-        CALL cxios_set_domaingroup_zoom_ni_loc(domaingroup_hdl%daddr, zoom_ni_loc_)
-      ENDIF
-
-      IF (PRESENT(zoom_nj_)) THEN
-        CALL cxios_set_domaingroup_zoom_nj(domaingroup_hdl%daddr, zoom_nj_)
-      ENDIF
-
-      IF (PRESENT(zoom_nj_loc_)) THEN
-        CALL cxios_set_domaingroup_zoom_nj_loc(domaingroup_hdl%daddr, zoom_nj_loc_)
-      ENDIF
-
   END SUBROUTINE xios(set_domaingroup_attr_hdl_)
 
@@ -351,7 +276,6 @@
     ( domaingroup_id, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  &
     , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, group_ref, i_index  &
-    , ibegin, iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo  &
-    , nj, nj_glo, nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc  &
-    , zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc )
+    , ibegin, j_index, jbegin, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  &
+    , nvertex, standard_name, type )
 
     IMPLICIT NONE
@@ -372,10 +296,8 @@
       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: domain_ref
       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: group_ref
-      INTEGER  , OPTIONAL, INTENT(OUT) :: i_index(:,:)
+      INTEGER  , OPTIONAL, INTENT(OUT) :: i_index(:)
       INTEGER  , OPTIONAL, INTENT(OUT) :: ibegin
-      INTEGER  , OPTIONAL, INTENT(OUT) :: iend
-      INTEGER  , OPTIONAL, INTENT(OUT) :: j_index(:,:)
+      INTEGER  , OPTIONAL, INTENT(OUT) :: j_index(:)
       INTEGER  , OPTIONAL, INTENT(OUT) :: jbegin
-      INTEGER  , OPTIONAL, INTENT(OUT) :: jend
       REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: latvalue(:)
       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: long_name
@@ -391,12 +313,4 @@
       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name
       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: type
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ibegin
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ibegin_loc
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_jbegin
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_jbegin_loc
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ni
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ni_loc
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_nj
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_nj_loc
 
       CALL xios(get_domaingroup_handle)(domaingroup_id,domaingroup_hdl)
@@ -404,7 +318,6 @@
       ( domaingroup_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  &
       , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, group_ref, i_index  &
-      , ibegin, iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo  &
-      , nj, nj_glo, nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc  &
-      , zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc )
+      , ibegin, j_index, jbegin, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  &
+      , nvertex, standard_name, type )
 
   END SUBROUTINE xios(get_domaingroup_attr)
@@ -413,7 +326,6 @@
     ( domaingroup_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  &
     , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, group_ref, i_index  &
-    , ibegin, iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo  &
-    , nj, nj_glo, nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc  &
-    , zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc )
+    , ibegin, j_index, jbegin, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  &
+    , nvertex, standard_name, type )
 
     IMPLICIT NONE
@@ -433,10 +345,8 @@
       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: domain_ref
       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: group_ref
-      INTEGER  , OPTIONAL, INTENT(OUT) :: i_index(:,:)
+      INTEGER  , OPTIONAL, INTENT(OUT) :: i_index(:)
       INTEGER  , OPTIONAL, INTENT(OUT) :: ibegin
-      INTEGER  , OPTIONAL, INTENT(OUT) :: iend
-      INTEGER  , OPTIONAL, INTENT(OUT) :: j_index(:,:)
+      INTEGER  , OPTIONAL, INTENT(OUT) :: j_index(:)
       INTEGER  , OPTIONAL, INTENT(OUT) :: jbegin
-      INTEGER  , OPTIONAL, INTENT(OUT) :: jend
       REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: latvalue(:)
       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: long_name
@@ -452,19 +362,10 @@
       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name
       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: type
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ibegin
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ibegin_loc
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_jbegin
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_jbegin_loc
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ni
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ni_loc
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_nj
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_nj_loc
 
       CALL xios(get_domaingroup_attr_hdl_)  &
       ( domaingroup_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  &
       , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, group_ref, i_index  &
-      , ibegin, iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo  &
-      , nj, nj_glo, nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc  &
-      , zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc )
+      , ibegin, j_index, jbegin, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  &
+      , nvertex, standard_name, type )
 
   END SUBROUTINE xios(get_domaingroup_attr_hdl)
@@ -473,7 +374,6 @@
     ( domaingroup_hdl, area_, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  &
     , data_jbegin_, data_n_index_, data_ni_, data_nj_, domain_group_ref_, domain_ref_, group_ref_  &
-    , i_index_, ibegin_, iend_, j_index_, jbegin_, jend_, latvalue_, long_name_, lonvalue_, mask_  &
-    , name_, ni_, ni_glo_, nj_, nj_glo_, nvertex_, standard_name_, type_, zoom_ibegin_, zoom_ibegin_loc_  &
-    , zoom_jbegin_, zoom_jbegin_loc_, zoom_ni_, zoom_ni_loc_, zoom_nj_, zoom_nj_loc_ )
+    , i_index_, ibegin_, j_index_, jbegin_, latvalue_, long_name_, lonvalue_, mask_, name_, ni_  &
+    , ni_glo_, nj_, nj_glo_, nvertex_, standard_name_, type_ )
 
     IMPLICIT NONE
@@ -493,10 +393,8 @@
       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: domain_ref_
       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: group_ref_
-      INTEGER  , OPTIONAL, INTENT(OUT) :: i_index_(:,:)
+      INTEGER  , OPTIONAL, INTENT(OUT) :: i_index_(:)
       INTEGER  , OPTIONAL, INTENT(OUT) :: ibegin_
-      INTEGER  , OPTIONAL, INTENT(OUT) :: iend_
-      INTEGER  , OPTIONAL, INTENT(OUT) :: j_index_(:,:)
+      INTEGER  , OPTIONAL, INTENT(OUT) :: j_index_(:)
       INTEGER  , OPTIONAL, INTENT(OUT) :: jbegin_
-      INTEGER  , OPTIONAL, INTENT(OUT) :: jend_
       REAL (KIND=8) , OPTIONAL, INTENT(OUT) :: latvalue_(:)
       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: long_name_
@@ -512,12 +410,4 @@
       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: standard_name_
       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: type_
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ibegin_
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ibegin_loc_
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_jbegin_
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_jbegin_loc_
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ni_
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_ni_loc_
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_nj_
-      INTEGER  , OPTIONAL, INTENT(OUT) :: zoom_nj_loc_
 
       IF (PRESENT(area_)) THEN
@@ -578,5 +468,5 @@
 
       IF (PRESENT(i_index_)) THEN
-        CALL cxios_get_domaingroup_i_index(domaingroup_hdl%daddr, i_index_, size(i_index_,1), size(i_index_,2))
+        CALL cxios_get_domaingroup_i_index(domaingroup_hdl%daddr, i_index_, size(i_index_,1))
       ENDIF
 
@@ -585,18 +475,10 @@
       ENDIF
 
-      IF (PRESENT(iend_)) THEN
-        CALL cxios_get_domaingroup_iend(domaingroup_hdl%daddr, iend_)
-      ENDIF
-
       IF (PRESENT(j_index_)) THEN
-        CALL cxios_get_domaingroup_j_index(domaingroup_hdl%daddr, j_index_, size(j_index_,1), size(j_index_,2))
+        CALL cxios_get_domaingroup_j_index(domaingroup_hdl%daddr, j_index_, size(j_index_,1))
       ENDIF
 
       IF (PRESENT(jbegin_)) THEN
         CALL cxios_get_domaingroup_jbegin(domaingroup_hdl%daddr, jbegin_)
-      ENDIF
-
-      IF (PRESENT(jend_)) THEN
-        CALL cxios_get_domaingroup_jend(domaingroup_hdl%daddr, jend_)
       ENDIF
 
@@ -651,36 +533,4 @@
       ENDIF
 
-      IF (PRESENT(zoom_ibegin_)) THEN
-        CALL cxios_get_domaingroup_zoom_ibegin(domaingroup_hdl%daddr, zoom_ibegin_)
-      ENDIF
-
-      IF (PRESENT(zoom_ibegin_loc_)) THEN
-        CALL cxios_get_domaingroup_zoom_ibegin_loc(domaingroup_hdl%daddr, zoom_ibegin_loc_)
-      ENDIF
-
-      IF (PRESENT(zoom_jbegin_)) THEN
-        CALL cxios_get_domaingroup_zoom_jbegin(domaingroup_hdl%daddr, zoom_jbegin_)
-      ENDIF
-
-      IF (PRESENT(zoom_jbegin_loc_)) THEN
-        CALL cxios_get_domaingroup_zoom_jbegin_loc(domaingroup_hdl%daddr, zoom_jbegin_loc_)
-      ENDIF
-
-      IF (PRESENT(zoom_ni_)) THEN
-        CALL cxios_get_domaingroup_zoom_ni(domaingroup_hdl%daddr, zoom_ni_)
-      ENDIF
-
-      IF (PRESENT(zoom_ni_loc_)) THEN
-        CALL cxios_get_domaingroup_zoom_ni_loc(domaingroup_hdl%daddr, zoom_ni_loc_)
-      ENDIF
-
-      IF (PRESENT(zoom_nj_)) THEN
-        CALL cxios_get_domaingroup_zoom_nj(domaingroup_hdl%daddr, zoom_nj_)
-      ENDIF
-
-      IF (PRESENT(zoom_nj_loc_)) THEN
-        CALL cxios_get_domaingroup_zoom_nj_loc(domaingroup_hdl%daddr, zoom_nj_loc_)
-      ENDIF
-
   END SUBROUTINE xios(get_domaingroup_attr_hdl_)
 
@@ -688,7 +538,6 @@
     ( domaingroup_id, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  &
     , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, group_ref, i_index  &
-    , ibegin, iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo  &
-    , nj, nj_glo, nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc  &
-    , zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc )
+    , ibegin, j_index, jbegin, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  &
+    , nvertex, standard_name, type )
 
     IMPLICIT NONE
@@ -727,12 +576,8 @@
       LOGICAL, OPTIONAL, INTENT(OUT) :: ibegin
       LOGICAL(KIND=C_BOOL) :: ibegin_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: iend
-      LOGICAL(KIND=C_BOOL) :: iend_tmp
       LOGICAL, OPTIONAL, INTENT(OUT) :: j_index
       LOGICAL(KIND=C_BOOL) :: j_index_tmp
       LOGICAL, OPTIONAL, INTENT(OUT) :: jbegin
       LOGICAL(KIND=C_BOOL) :: jbegin_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: jend
-      LOGICAL(KIND=C_BOOL) :: jend_tmp
       LOGICAL, OPTIONAL, INTENT(OUT) :: latvalue
       LOGICAL(KIND=C_BOOL) :: latvalue_tmp
@@ -759,20 +604,4 @@
       LOGICAL, OPTIONAL, INTENT(OUT) :: type
       LOGICAL(KIND=C_BOOL) :: type_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_ibegin
-      LOGICAL(KIND=C_BOOL) :: zoom_ibegin_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_ibegin_loc
-      LOGICAL(KIND=C_BOOL) :: zoom_ibegin_loc_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_jbegin
-      LOGICAL(KIND=C_BOOL) :: zoom_jbegin_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_jbegin_loc
-      LOGICAL(KIND=C_BOOL) :: zoom_jbegin_loc_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_ni
-      LOGICAL(KIND=C_BOOL) :: zoom_ni_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_ni_loc
-      LOGICAL(KIND=C_BOOL) :: zoom_ni_loc_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_nj
-      LOGICAL(KIND=C_BOOL) :: zoom_nj_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_nj_loc
-      LOGICAL(KIND=C_BOOL) :: zoom_nj_loc_tmp
 
       CALL xios(get_domaingroup_handle)(domaingroup_id,domaingroup_hdl)
@@ -780,7 +609,6 @@
       ( domaingroup_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  &
       , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, group_ref, i_index  &
-      , ibegin, iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo  &
-      , nj, nj_glo, nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc  &
-      , zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc )
+      , ibegin, j_index, jbegin, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  &
+      , nvertex, standard_name, type )
 
   END SUBROUTINE xios(is_defined_domaingroup_attr)
@@ -789,7 +617,6 @@
     ( domaingroup_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  &
     , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, group_ref, i_index  &
-    , ibegin, iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo  &
-    , nj, nj_glo, nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc  &
-    , zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc )
+    , ibegin, j_index, jbegin, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  &
+    , nvertex, standard_name, type )
 
     IMPLICIT NONE
@@ -827,12 +654,8 @@
       LOGICAL, OPTIONAL, INTENT(OUT) :: ibegin
       LOGICAL(KIND=C_BOOL) :: ibegin_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: iend
-      LOGICAL(KIND=C_BOOL) :: iend_tmp
       LOGICAL, OPTIONAL, INTENT(OUT) :: j_index
       LOGICAL(KIND=C_BOOL) :: j_index_tmp
       LOGICAL, OPTIONAL, INTENT(OUT) :: jbegin
       LOGICAL(KIND=C_BOOL) :: jbegin_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: jend
-      LOGICAL(KIND=C_BOOL) :: jend_tmp
       LOGICAL, OPTIONAL, INTENT(OUT) :: latvalue
       LOGICAL(KIND=C_BOOL) :: latvalue_tmp
@@ -859,27 +682,10 @@
       LOGICAL, OPTIONAL, INTENT(OUT) :: type
       LOGICAL(KIND=C_BOOL) :: type_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_ibegin
-      LOGICAL(KIND=C_BOOL) :: zoom_ibegin_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_ibegin_loc
-      LOGICAL(KIND=C_BOOL) :: zoom_ibegin_loc_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_jbegin
-      LOGICAL(KIND=C_BOOL) :: zoom_jbegin_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_jbegin_loc
-      LOGICAL(KIND=C_BOOL) :: zoom_jbegin_loc_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_ni
-      LOGICAL(KIND=C_BOOL) :: zoom_ni_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_ni_loc
-      LOGICAL(KIND=C_BOOL) :: zoom_ni_loc_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_nj
-      LOGICAL(KIND=C_BOOL) :: zoom_nj_tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_nj_loc
-      LOGICAL(KIND=C_BOOL) :: zoom_nj_loc_tmp
 
       CALL xios(is_defined_domaingroup_attr_hdl_)  &
       ( domaingroup_hdl, area, bounds_lat, bounds_lon, data_dim, data_i_index, data_ibegin, data_j_index  &
       , data_jbegin, data_n_index, data_ni, data_nj, domain_group_ref, domain_ref, group_ref, i_index  &
-      , ibegin, iend, j_index, jbegin, jend, latvalue, long_name, lonvalue, mask, name, ni, ni_glo  &
-      , nj, nj_glo, nvertex, standard_name, type, zoom_ibegin, zoom_ibegin_loc, zoom_jbegin, zoom_jbegin_loc  &
-      , zoom_ni, zoom_ni_loc, zoom_nj, zoom_nj_loc )
+      , ibegin, j_index, jbegin, latvalue, long_name, lonvalue, mask, name, ni, ni_glo, nj, nj_glo  &
+      , nvertex, standard_name, type )
 
   END SUBROUTINE xios(is_defined_domaingroup_attr_hdl)
@@ -888,7 +694,6 @@
     ( domaingroup_hdl, area_, bounds_lat_, bounds_lon_, data_dim_, data_i_index_, data_ibegin_, data_j_index_  &
     , data_jbegin_, data_n_index_, data_ni_, data_nj_, domain_group_ref_, domain_ref_, group_ref_  &
-    , i_index_, ibegin_, iend_, j_index_, jbegin_, jend_, latvalue_, long_name_, lonvalue_, mask_  &
-    , name_, ni_, ni_glo_, nj_, nj_glo_, nvertex_, standard_name_, type_, zoom_ibegin_, zoom_ibegin_loc_  &
-    , zoom_jbegin_, zoom_jbegin_loc_, zoom_ni_, zoom_ni_loc_, zoom_nj_, zoom_nj_loc_ )
+    , i_index_, ibegin_, j_index_, jbegin_, latvalue_, long_name_, lonvalue_, mask_, name_, ni_  &
+    , ni_glo_, nj_, nj_glo_, nvertex_, standard_name_, type_ )
 
     IMPLICIT NONE
@@ -926,12 +731,8 @@
       LOGICAL, OPTIONAL, INTENT(OUT) :: ibegin_
       LOGICAL(KIND=C_BOOL) :: ibegin__tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: iend_
-      LOGICAL(KIND=C_BOOL) :: iend__tmp
       LOGICAL, OPTIONAL, INTENT(OUT) :: j_index_
       LOGICAL(KIND=C_BOOL) :: j_index__tmp
       LOGICAL, OPTIONAL, INTENT(OUT) :: jbegin_
       LOGICAL(KIND=C_BOOL) :: jbegin__tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: jend_
-      LOGICAL(KIND=C_BOOL) :: jend__tmp
       LOGICAL, OPTIONAL, INTENT(OUT) :: latvalue_
       LOGICAL(KIND=C_BOOL) :: latvalue__tmp
@@ -958,20 +759,4 @@
       LOGICAL, OPTIONAL, INTENT(OUT) :: type_
       LOGICAL(KIND=C_BOOL) :: type__tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_ibegin_
-      LOGICAL(KIND=C_BOOL) :: zoom_ibegin__tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_ibegin_loc_
-      LOGICAL(KIND=C_BOOL) :: zoom_ibegin_loc__tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_jbegin_
-      LOGICAL(KIND=C_BOOL) :: zoom_jbegin__tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_jbegin_loc_
-      LOGICAL(KIND=C_BOOL) :: zoom_jbegin_loc__tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_ni_
-      LOGICAL(KIND=C_BOOL) :: zoom_ni__tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_ni_loc_
-      LOGICAL(KIND=C_BOOL) :: zoom_ni_loc__tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_nj_
-      LOGICAL(KIND=C_BOOL) :: zoom_nj__tmp
-      LOGICAL, OPTIONAL, INTENT(OUT) :: zoom_nj_loc_
-      LOGICAL(KIND=C_BOOL) :: zoom_nj_loc__tmp
 
       IF (PRESENT(area_)) THEN
@@ -1055,9 +840,4 @@
       ENDIF
 
-      IF (PRESENT(iend_)) THEN
-        iend__tmp = cxios_is_defined_domaingroup_iend(domaingroup_hdl%daddr)
-        iend_ = iend__tmp
-      ENDIF
-
       IF (PRESENT(j_index_)) THEN
         j_index__tmp = cxios_is_defined_domaingroup_j_index(domaingroup_hdl%daddr)
@@ -1070,9 +850,4 @@
       ENDIF
 
-      IF (PRESENT(jend_)) THEN
-        jend__tmp = cxios_is_defined_domaingroup_jend(domaingroup_hdl%daddr)
-        jend_ = jend__tmp
-      ENDIF
-
       IF (PRESENT(latvalue_)) THEN
         latvalue__tmp = cxios_is_defined_domaingroup_latvalue(domaingroup_hdl%daddr)
@@ -1135,44 +910,4 @@
       ENDIF
 
-      IF (PRESENT(zoom_ibegin_)) THEN
-        zoom_ibegin__tmp = cxios_is_defined_domaingroup_zoom_ibegin(domaingroup_hdl%daddr)
-        zoom_ibegin_ = zoom_ibegin__tmp
-      ENDIF
-
-      IF (PRESENT(zoom_ibegin_loc_)) THEN
-        zoom_ibegin_loc__tmp = cxios_is_defined_domaingroup_zoom_ibegin_loc(domaingroup_hdl%daddr)
-        zoom_ibegin_loc_ = zoom_ibegin_loc__tmp
-      ENDIF
-
-      IF (PRESENT(zoom_jbegin_)) THEN
-        zoom_jbegin__tmp = cxios_is_defined_domaingroup_zoom_jbegin(domaingroup_hdl%daddr)
-        zoom_jbegin_ = zoom_jbegin__tmp
-      ENDIF
-
-      IF (PRESENT(zoom_jbegin_loc_)) THEN
-        zoom_jbegin_loc__tmp = cxios_is_defined_domaingroup_zoom_jbegin_loc(domaingroup_hdl%daddr)
-        zoom_jbegin_loc_ = zoom_jbegin_loc__tmp
-      ENDIF
-
-      IF (PRESENT(zoom_ni_)) THEN
-        zoom_ni__tmp = cxios_is_defined_domaingroup_zoom_ni(domaingroup_hdl%daddr)
-        zoom_ni_ = zoom_ni__tmp
-      ENDIF
-
-      IF (PRESENT(zoom_ni_loc_)) THEN
-        zoom_ni_loc__tmp = cxios_is_defined_domaingroup_zoom_ni_loc(domaingroup_hdl%daddr)
-        zoom_ni_loc_ = zoom_ni_loc__tmp
-      ENDIF
-
-      IF (PRESENT(zoom_nj_)) THEN
-        zoom_nj__tmp = cxios_is_defined_domaingroup_zoom_nj(domaingroup_hdl%daddr)
-        zoom_nj_ = zoom_nj__tmp
-      ENDIF
-
-      IF (PRESENT(zoom_nj_loc_)) THEN
-        zoom_nj_loc__tmp = cxios_is_defined_domaingroup_zoom_nj_loc(domaingroup_hdl%daddr)
-        zoom_nj_loc_ = zoom_nj_loc__tmp
-      ENDIF
-
   END SUBROUTINE xios(is_defined_domaingroup_attr_hdl_)
 
Index: XIOS/trunk/src/node/axis.cpp
===================================================================
--- XIOS/trunk/src/node/axis.cpp	(revision 656)
+++ XIOS/trunk/src/node/axis.cpp	(revision 657)
@@ -300,8 +300,8 @@
 
     CServerDistributionDescription serverDescription(nGlobDomain);
-    serverDescription.computeServerGlobalIndexInRange(nbServer, std::make_pair<size_t,size_t>(indexBegin, indexEnd));
-    CClientServerMappingDistributed clientServerMap(serverDescription.getGlobalIndexRange(), client->intraComm);
-    clientServerMap.computeServerIndexMapping(globalIndexAxis);
-    const std::map<int, std::vector<size_t> >& globalIndexAxisOnServer = clientServerMap.getGlobalIndexOnServer();
+    serverDescription.computeServerGlobalIndexInRange(nbServer, std::make_pair<size_t,size_t>(indexBegin, indexEnd), 0);
+    CClientServerMapping* clientServerMap = new CClientServerMappingDistributed(serverDescription.getGlobalIndexRange(), client->intraComm);
+    clientServerMap->computeServerIndexMapping(globalIndexAxis);
+    const std::map<int, std::vector<size_t> >& globalIndexAxisOnServer = clientServerMap->getGlobalIndexOnServer();
 
     std::map<int, std::vector<size_t> >::const_iterator it = globalIndexAxisOnServer.begin(),
@@ -336,6 +336,6 @@
         connectedServerRank_.push_back(it->first);
     }
-    nbConnectedClients_ = clientServerMap.computeConnectedClients(client->serverSize, client->clientSize, client->intraComm, connectedServerRank_);
-
+    nbConnectedClients_ = clientServerMap->computeConnectedClients(client->serverSize, client->clientSize, client->intraComm, connectedServerRank_);
+    delete clientServerMap;
   }
 
Index: XIOS/trunk/src/node/domain.cpp
===================================================================
--- XIOS/trunk/src/node/domain.cpp	(revision 656)
+++ XIOS/trunk/src/node/domain.cpp	(revision 657)
@@ -17,4 +17,5 @@
 #include "client_server_mapping_distributed.hpp"
 #include "zoom_domain.hpp"
+#include "interpolate_from_file_domain.hpp"
 
 namespace xios {
@@ -25,6 +26,7 @@
       : CObjectTemplate<CDomain>(), CDomainAttributes()
       , isChecked(false), relFiles(), isClientChecked(false), nbConnectedClients_(), indSrv_(), connectedServerRank_()
-      , hasBounds(false), hasArea(false), isDistributed_(false)
-      , global_zoom_ibegin(0), global_zoom_ni(0), global_zoom_jbegin(0), global_zoom_nj(0)
+      , hasBounds(false), hasArea(false), isDistributed_(false), nGlobDomain_(), isUnstructed_(false)
+      , global_zoom_ni(0), global_zoom_ibegin(0), global_zoom_nj(0), global_zoom_jbegin(0), maskInter_()
+      , isClientAfterTransformationChecked(false)
    { /* Ne rien faire de plus */ }
 
@@ -32,6 +34,7 @@
       : CObjectTemplate<CDomain>(id), CDomainAttributes()
       , isChecked(false), relFiles(), isClientChecked(false), nbConnectedClients_(), indSrv_(), connectedServerRank_()
-      , hasBounds(false), hasArea(false), isDistributed_(false)
-      , global_zoom_ibegin(0), global_zoom_ni(0), global_zoom_jbegin(0), global_zoom_nj(0)
+      , hasBounds(false), hasArea(false), isDistributed_(false), nGlobDomain_(), isUnstructed_(false)
+      , global_zoom_ni(0), global_zoom_ibegin(0), global_zoom_nj(0), global_zoom_jbegin(0), maskInter_()
+      , isClientAfterTransformationChecked(false)
    { /* Ne rien faire de plus */ }
 
@@ -59,13 +62,4 @@
 
    //----------------------------------------------------------------
-
-   bool CDomain::hasZoom(void) const
-   {
-      return ((this->zoom_ni.getValue() != this->ni_glo.getValue()) &&
-              (this->zoom_nj.getValue() != this->nj_glo.getValue()));
-   }
-
-   //----------------------------------------------------------------
-
    bool CDomain::isEmpty(void) const
    {
@@ -75,5 +69,4 @@
 
    //----------------------------------------------------------------
-
    bool CDomain::IsWritten(const StdString & filename) const
    {
@@ -82,5 +75,4 @@
 
    //----------------------------------------------------------------
-
    bool CDomain::isDistributed(void) const
    {
@@ -89,5 +81,4 @@
 
    //----------------------------------------------------------------
-
    void CDomain::addRelFile(const StdString & filename)
    {
@@ -113,31 +104,39 @@
                << " check the \'ni_glo\'  value !")
          }
-         nj_glo=ni_glo ;
-         ni_glo=1 ;
-         if (!ni.isEmpty()) nj=ni ;
-         if (!ibegin.isEmpty()) jbegin=ibegin ;
-         if (!iend.isEmpty()) jend=iend ;
-         if (!i_index.isEmpty())
-         {
-          j_index.resize(1,nj) ;
-          for(int i=0;i<ni;i++) j_index(0,i)=i_index(i,0) ;
-          i_index.resize(1,nj) ;
-          for(int j=0;j<nj;j++) i_index(0,j)=0 ;
-         }
-
-         if (!mask.isEmpty())
-         {
-          CArray<int,2> mask_tmp(nj,1) ;
-          mask_tmp = mask ;
-          mask.resize(1,nj) ;
-          for(int j=0;j<nj;j++) mask(0,j)=mask_tmp(j,0) ;
-         }
+         isUnstructed_ = true;
+         nj_glo = 1;
+         nj = 1;
+         jbegin = 0;
+         if (ni.isEmpty()) ni = i_index.numElements();
+         j_index.resize(ni);
+         for(int i=0;i<ni;++i) j_index(i)=0;
+
+//         nj_glo=ni_glo ;
+//         ni_glo=1 ;
+//         if (!ni.isEmpty()) nj=ni ;
+//         if (!ibegin.isEmpty()) jbegin=ibegin ;
+//         if (!iend.isEmpty()) jend=iend ;
+//         if (!i_index.isEmpty())
+//         {
+//          j_index.resize(1,nj) ;
+//          for(int i=0;i<ni;i++) j_index(0,i)=i_index(i,0) ;
+//          i_index.resize(1,nj) ;
+//          for(int j=0;j<nj;j++) i_index(0,j)=0 ;
+//         }
+//
+//         if (!mask.isEmpty())
+//         {
+//          CArray<int,2> mask_tmp(nj,1);
+//          mask_tmp = mask ;
+//          mask.resize(1,nj) ;
+//          for(int j=0;j<nj;j++) mask(0,j)=mask_tmp(j,0) ;
+//         }
 
          if (!area.isEmpty())
            area.transposeSelf(1, 0);
 
-         ni=1 ;
-         ibegin=0 ;
-         iend=0 ;
+//         ni=1 ;
+//         ibegin=0 ;
+//         iend=0 ;
 
       }
@@ -151,25 +150,26 @@
       }
 
-      isDistributed_ = !ibegin.isEmpty() || !iend.isEmpty() || !ni.isEmpty() || !jbegin.isEmpty() || !jend.isEmpty() || !nj.isEmpty();
+      isDistributed_ = !ibegin.isEmpty() || !ni.isEmpty() || !jbegin.isEmpty() || !nj.isEmpty();
 
       checkLocalIDomain();
       checkLocalJDomain();
 
-      ibegin_client = ibegin; iend_client = iend; ni_client = ni;
-      jbegin_client = jbegin; jend_client = jend; nj_client = nj;
+      ibegin_client = ibegin; ni_client = ni; iend_client = ibegin + ni - 1;
+      jbegin_client = jbegin; nj_client = nj; jend_client = jbegin + nj - 1;
 
       if (i_index.isEmpty())
       {
-        i_index.resize(ni,nj);
-        for (int j = 0; j < nj; j++)
-          for (int i = 0; i < ni; i++) i_index(i,j) = i;
+        i_index.resize(ni*nj);
+        for (int j = 0; j < nj; ++j)
+          for (int i = 0; i < ni; ++i) i_index(i+j*ni) = i+ibegin;
       }
 
       if (j_index.isEmpty())
       {
-        j_index.resize(ni,nj);
-        for (int j = 0; j < nj; j++)
-          for (int i = 0; i < ni; i++) j_index(i,j) = j;
-      }
+        j_index.resize(ni*nj);
+        for (int j = 0; j < nj; ++j)
+          for (int i = 0; i < ni; ++i) j_index(i+j*ni) = j+jbegin;
+      }
+      computeNGlobDomain();
    }
 
@@ -178,86 +178,48 @@
    void CDomain::checkLocalIDomain(void)
    {
-      if (!ni.isEmpty() && !ibegin.isEmpty() && iend.isEmpty())
-        iend.setValue(ibegin.getValue() + ni.getValue() - 1);
-      else if (!ni.isEmpty() && !iend.isEmpty() && ibegin.isEmpty())
-        ibegin.setValue(iend.getValue() - ni.getValue()  + 1);
-      else if (!ibegin.isEmpty() && !iend.isEmpty() && ni.isEmpty())
-        ni.setValue(iend.getValue() - ibegin.getValue() + 1);
-      else if (!ibegin.isEmpty() && !iend.isEmpty() && !ni.isEmpty())
-      {
-        if (iend.getValue() != ibegin.getValue() + ni.getValue() - 1)
-          ERROR("CDomain::checkLocalIDomain(void)",
-                << "[ Id = " << this->getId() << " ] "
-                << "The local domain is wrongly defined,"
-                << " iend is different from (ibegin + ni - 1)");
-      }
-      else if (ibegin.isEmpty() && iend.isEmpty() && ni.isEmpty())
+      if (ibegin.isEmpty() && ni.isEmpty())
       {
         ibegin = 0;
-        iend = ni_glo - 1;
         ni = ni_glo;
       }
-      else
+      else if (!i_index.isEmpty())
+      {
+        ibegin = i_index(0);
+      }
+
+      if (ni.getValue() < 0 || ibegin.getValue() < 0 ||
+         (ibegin.getValue() + ni.getValue()) > ni_glo.getValue())
       {
         ERROR("CDomain::checkLocalIDomain(void)",
               << "[ Id = " << this->getId() << " ] "
               << "The local domain is wrongly defined,"
-              << " defining just one attribute among 'ibegin', 'iend' or 'ni' is invalid");
-      }
-
-      if (ni.getValue() < 0 || ibegin.getValue() > iend.getValue() ||
-          ibegin.getValue() < 0 || iend.getValue() > (ni_glo.getValue() - 1))
-      {
-        ERROR("CDomain::checkLocalIDomain(void)",
-              << "[ Id = " << this->getId() << " ] "
-              << "The local domain is wrongly defined,"
-              << " check the attributes 'ni_glo', 'ni', 'ibegin' and 'iend'");
-      }
-   }
-
-   //----------------------------------------------------------------
-
+              << " check the attributes 'ni_glo', 'ni' and 'ibegin'");
+      }
+   }
+
+   //----------------------------------------------------------------
    void CDomain::checkLocalJDomain(void)
    {
-      if (!nj.isEmpty() && !jbegin.isEmpty() && jend.isEmpty())
-        jend.setValue(jbegin.getValue() + nj.getValue() - 1);
-      else if (!nj.isEmpty() && !jend.isEmpty() && jbegin.isEmpty())
-        jbegin.setValue(jend.getValue() - nj.getValue() + 1);
-      else if (!jbegin.isEmpty() && !jend.isEmpty() && nj.isEmpty())
-        nj.setValue(jend.getValue() - jbegin.getValue() + 1);
-      else if (!jbegin.isEmpty() && !jend.isEmpty() && !nj.isEmpty())
-      {
-        if (jend.getValue() != jbegin.getValue() + nj.getValue() - 1)
-          ERROR("CDomain::checkLocalJDomain(void)",
-                << "[ Id = " << this->getId() << " ] "
-                << "The local domain is wrongly defined,"
-                << " jend is different from (jbegin + nj - 1)");
-      }
-      else if (jbegin.isEmpty() && jend.isEmpty() && nj.isEmpty())
-      {
-        jbegin = 0;
-        jend = nj_glo - 1;
-        nj = nj_glo;
-      }
-      else
+     if (jbegin.isEmpty() && nj.isEmpty())
+     {
+       jbegin = 0;
+       nj = nj_glo;
+     }
+     else if (!j_index.isEmpty())
+     {
+       jbegin = j_index(0);
+     }
+
+      if (nj.getValue() < 0 || jbegin.getValue() < 0 ||
+         (jbegin.getValue() + nj.getValue()) > nj_glo.getValue())
       {
         ERROR("CDomain::checkLocalJDomain(void)",
               << "[ Id = " << this->getId() << " ] "
               << "The local domain is wrongly defined,"
-              << " defining just one attribute among 'jbegin', 'jend' or 'nj' is invalid");
-      }
-
-      if (nj.getValue() < 0 || jbegin.getValue() > jend.getValue() ||
-          jbegin.getValue() < 0 || jend.getValue() > (nj_glo.getValue() - 1))
-      {
-        ERROR("CDomain::checkLocalJDomain(void)",
-              << "[ Id = " << this->getId() << " ] "
-              << "The local domain is wrongly defined,"
-              << " check the attributes 'nj_glo', 'nj', 'jbegin' and 'jend'");
-      }
-   }
-
-   //----------------------------------------------------------------
-
+              << " check the attributes 'nj_glo', 'nj' and 'jbegin'");
+      }
+   }
+
+   //----------------------------------------------------------------
    void CDomain::checkMask(void)
    {
@@ -266,23 +228,59 @@
       int ibegin_mask = 0,
           jbegin_mask = 0,
-          iend_mask = iend.getValue() - ibegin.getValue(),
-          jend_mask = jend.getValue() - jbegin.getValue();
-
-      if (!zoom_ibegin.isEmpty())
-      {
-         int zoom_iend = zoom_ibegin.getValue() + zoom_ni.getValue() - 1;
-         int zoom_jend = zoom_jbegin.getValue() + zoom_nj.getValue() - 1;
-
-         ibegin_mask = max (ibegin.getValue(), zoom_ibegin.getValue());
-         jbegin_mask = max (jbegin.getValue(), zoom_jbegin.getValue());
-         iend_mask   = min (iend.getValue(), zoom_iend);
-         jend_mask   = min (jend.getValue(), zoom_jend);
-
-         ibegin_mask -= ibegin.getValue();
-         jbegin_mask -= jbegin.getValue();
-         iend_mask   -= ibegin.getValue();
-         jend_mask   -= jbegin.getValue();
-      }
-
+          iend_mask = ibegin.getValue() + ni.getValue() - 1,
+          jend_mask = jbegin.getValue() + nj.getValue() - 1;
+
+      if (!mask_1D.isEmpty() && !mask_2D.isEmpty())
+        ERROR("CDomain::checkMask(void)",
+             <<"Only one mask is used but both mask_1D and mask_2D are defined! "<<endl
+             <<"Define only one mask: mask_1D or mask_2D ");
+
+      if (!mask_1D.isEmpty() && mask_2D.isEmpty())
+      {
+        if (mask_1D.numElements() != i_index.numElements())
+          ERROR("CDomain::checkMask(void)",
+                <<"the mask_1D has not the same size than the local domain"<<endl
+                <<"Local size is "<<i_index.numElements()<<endl
+                <<"Mask size is "<<mask_1D.numElements());
+      }
+
+      if (mask_1D.isEmpty() && !mask_2D.isEmpty())
+      {
+         if ((mask_2D.extent(0) != ni) ||
+             (mask_2D.extent(1) != nj))
+            ERROR("CDomain::checkMask(void)",
+                  <<"the mask has not the same size than the local domain"<<endl
+                  <<"Local size is "<<ni<<"x"<<nj<<endl
+                  <<"Mask size is "<<mask.extent(0)<<"x"<<mask.extent(1));
+      }
+
+      if (!mask_1D.isEmpty())
+      {
+        maskInter_.resize(mask_1D.numElements());
+        maskInter_ = mask_1D;
+      }
+      else if (!mask_2D.isEmpty())
+      {
+        maskInter_.resize(mask_2D.extent(0) * mask_2D.extent(0));
+        for (int j = 0; j < nj; ++j)
+          for (int i = 0; i < ni; ++i) maskInter_(i+j*ni) = mask_2D(i,j);
+      }
+      else
+      {
+        maskInter_.resize(i_index.numElements());
+        for (int i = 0; i < i_index.numElements(); ++i) maskInter_(i) = true;
+      }
+
+      if (!mask.isEmpty())
+      {
+        maskInter_.resize(mask.extent(0) * mask.extent(1));
+        for (int j = 0; j < nj; ++j)
+          for (int i = 0; i < ni; ++i) maskInter_(i+j*ni) = mask(i,j);
+      }
+      else
+      {
+        maskInter_.resize(ni*nj);
+        for (int i = 0; i < maskInter_.numElements(); ++i) maskInter_(i) = true;
+      }
 
       if (!mask.isEmpty())
@@ -294,13 +292,13 @@
                    <<"Local size is "<<ni<<"x"<<nj<<endl
                   <<"Mask size is "<<mask.extent(0)<<"x"<<mask.extent(1));
-         for (int i = 0; i < ni; i++)
-         {
-            for (int j = 0; j < nj; j++)
-            {
-               if (i < ibegin_mask && i > iend_mask &&
-                   j < jbegin_mask && j > jend_mask )
-                     mask(i,j) = false;
-            }
-         }
+//         for (int i = 0; i < ni; i++)
+//         {
+//            for (int j = 0; j < nj; j++)
+//            {
+//               if (i < ibegin_mask && i > iend_mask &&
+//                   j < jbegin_mask && j > jend_mask )
+//                     mask(i,j) = false;
+//            }
+//         }
       }
       else // (!mask.hasValue())
@@ -520,33 +518,4 @@
    void CDomain::checkZoom(void)
    {
-      // RÃ©solution et vÃ©rification des donnÃ©es globales de zoom.
-      if (!this->zoom_ni.isEmpty() || !this->zoom_nj.isEmpty() ||
-          !this->zoom_ibegin.isEmpty() || !this->zoom_jbegin.isEmpty())
-      {
-         if (this->zoom_ni.isEmpty()     || this->zoom_nj.isEmpty() ||
-             this->zoom_ibegin.isEmpty() || this->zoom_jbegin.isEmpty())
-         {
-            ERROR("CDomain::checkZoom(void)",
-                  <<"if one of zoom attributes is defined then all zoom attributes must be defined") ;
-         }
-         else
-         {
-            int zoom_iend = zoom_ibegin + zoom_ni - 1;
-            int zoom_jend = zoom_jbegin + zoom_nj - 1;
-
-            if (zoom_ibegin < 0  || zoom_jbegin < 0 || zoom_iend > (ni_glo-1) || zoom_jend > (nj_glo-1))
-               ERROR("CDomain::checkZoom(void)",
-                     << "Zoom is wrongly defined,"
-                     << " Check the values : zoom_ni, zoom_nj, zoom_ibegin, zoom_jbegin") ;
-         }
-      }
-      else
-      {
-         zoom_ni = ni_glo;
-         zoom_nj = nj_glo;
-         zoom_ibegin = 0;
-         zoom_jbegin = 0;
-      }
-
       // compute client zoom indices
       // compute client zoom indices
@@ -594,4 +563,38 @@
    }
 
+//   void CDomain::checkAttributesOnClientBeforeTransformation()
+//   {
+//      if (this->isClientBeforeTransformationChecked) return;
+//      CContext* context=CContext::getCurrent();
+//
+//      this->checkDomain();
+//      this->checkBounds();
+//      this->checkArea();
+//
+//      if (context->hasClient)
+//      {
+//        this->checkDomainData();
+//        this->checkCompression();
+//      }
+//
+//      this->isClientBeforeTransformationChecked = true;
+//   }
+
+   void CDomain::checkAttributesOnClientAfterTransformation()
+   {
+     CContext* context=CContext::getCurrent() ;
+
+     this->checkZoom();
+     if (this->isClientAfterTransformationChecked) return;
+     if (context->hasClient)
+     {
+       this->checkMask();
+       this->computeConnectedServer();
+       this->completeLonLatClient();
+     }
+
+     this->isClientAfterTransformationChecked = true;
+   }
+
    //----------------------------------------------------------------
    // Divide function checkAttributes into 2 seperate ones
@@ -625,4 +628,5 @@
    {
      if (!this->isClientChecked) checkAttributesOnClient();
+     if (!this->isClientAfterTransformationChecked) checkAttributesOnClientAfterTransformation();
      CContext* context=CContext::getCurrent() ;
 
@@ -631,6 +635,6 @@
      if (context->hasClient)
      {
-       this->computeConnectedServer();
-       this->completeLonLatClient();
+//       this->computeConnectedServer();
+//       this->completeLonLatClient();
 
        sendServerAttribut() ;
@@ -676,8 +680,5 @@
   void CDomain::sendServerAttribut(void)
   {
-    std::vector<int> nGlobDomain(2);
-    nGlobDomain[0] = ni_glo.getValue();
-    nGlobDomain[1] = nj_glo.getValue();
-    CServerDistributionDescription serverDescription(nGlobDomain);
+    CServerDistributionDescription serverDescription(nGlobDomain_);
 
     CContext* context = CContext::getCurrent();
@@ -685,5 +686,7 @@
     int nbServer = client->serverSize;
 
-    serverDescription.computeServerDistribution(nbServer);
+    if (isUnstructed_) serverDescription.computeServerDistribution(nbServer,0);
+    else serverDescription.computeServerDistribution(nbServer,1);
+
     std::vector<std::vector<int> > serverIndexBegin = serverDescription.getServerIndexBegin();
     std::vector<std::vector<int> > serverDimensionSizes = serverDescription.getServerDimensionSizes();
@@ -718,8 +721,15 @@
   }
 
+  void CDomain::computeNGlobDomain()
+  {
+    nGlobDomain_.resize(2);
+    nGlobDomain_[0] = ni_glo.getValue();
+    nGlobDomain_[1] = nj_glo.getValue();
+  }
+
   void CDomain::computeConnectedServer(void)
   {
-    ibegin_client=ibegin ; iend_client=iend ; ni_client=ni ;
-    jbegin_client=jbegin ; jend_client=jend ; nj_client=nj ;
+    ibegin_client=ibegin; ni_client=ni; iend_client=ibegin_client + ni_client - 1;
+    jbegin_client=jbegin; nj_client=nj; jend_client=jbegin_client + nj_client - 1;
 
     CContext* context=CContext::getCurrent() ;
@@ -728,5 +738,5 @@
     bool doComputeGlobalIndexServer = true;
 
-    int i,j,i_ind,j_ind ;
+    int i,j,i_ind,j_ind, nbIndex;
     int zoom_iend=global_zoom_ibegin+global_zoom_ni-1 ;
     int zoom_jend=global_zoom_jbegin+global_zoom_nj-1 ;
@@ -734,45 +744,42 @@
     // Precompute number of index
     int globalIndexCountZoom = 0;
-    for(j=0;j<nj;j++)
-      for(i=0;i<ni;i++)
-      {
-        i_ind=ibegin+i_index(i,j) ;
-        j_ind=jbegin+j_index(i,j) ;
-
-        if (i_ind >= global_zoom_ibegin && i_ind <= zoom_iend && j_ind >= global_zoom_jbegin && j_ind <= zoom_jend)
-        {
-          ++globalIndexCountZoom;
-        }
-      }
+    nbIndex = i_index.numElements();
+    for (i = 0; i < nbIndex; ++i)
+    {
+      i_ind=i_index(i);
+      j_ind=j_index(i);
+
+      if (i_ind >= global_zoom_ibegin && i_ind <= zoom_iend && j_ind >= global_zoom_jbegin && j_ind <= zoom_jend)
+      {
+        ++globalIndexCountZoom;
+      }
+    }
 
     // Fill in index
     CArray<size_t,1> globalIndexDomainZoom(globalIndexCountZoom);
-    CArray<size_t,1> globalIndexDomain(ni*nj);
+    CArray<size_t,1> localIndexDomainZoom(globalIndexCountZoom);
+    CArray<size_t,1> globalIndexDomain(nbIndex);
     size_t globalIndex;
     int globalIndexCount = 0;
     globalIndexCountZoom = 0;
 
-    for(j=0;j<nj;j++)
-      for(i=0;i<ni;i++)
-      {
-        i_ind=ibegin+i_index(i,j) ;
-        j_ind=jbegin+j_index(i,j) ;
-
-        globalIndex = i_ind + j_ind * ni_glo;
-        globalIndexDomain(globalIndexCount) = globalIndex;
-        ++globalIndexCount;
-        if (i_ind >= global_zoom_ibegin && i_ind <= zoom_iend && j_ind >= global_zoom_jbegin && j_ind <= zoom_jend)
-        {
-          globalIndexDomainZoom(globalIndexCountZoom) = globalIndex;
-          ++globalIndexCountZoom;
-        }
-      }
-
-     std::vector<int> nGlobDomain(2);
-     nGlobDomain[0] = ni_glo.getValue();
-     nGlobDomain[1] = nj_glo.getValue();
+    for (i = 0; i < nbIndex; ++i)
+    {
+      i_ind=i_index(i);
+      j_ind=j_index(i);
+      globalIndex = i_ind + j_ind * ni_glo;
+      globalIndexDomain(globalIndexCount) = globalIndex;
+      ++globalIndexCount;
+      if (i_ind >= global_zoom_ibegin && i_ind <= zoom_iend && j_ind >= global_zoom_jbegin && j_ind <= zoom_jend)
+      {
+        globalIndexDomainZoom(globalIndexCountZoom) = globalIndex;
+        localIndexDomainZoom(globalIndexCountZoom) = i;
+        ++globalIndexCountZoom;
+      }
+    }
+
      size_t globalSizeIndex = 1, indexBegin, indexEnd;
      int range, clientSize = client->clientSize;
-     for (int i = 0; i < nGlobDomain.size(); ++i) globalSizeIndex *= nGlobDomain[i];
+     for (int i = 0; i < nGlobDomain_.size(); ++i) globalSizeIndex *= nGlobDomain_[i];
      indexBegin = 0;
      for (int i = 0; i < clientSize; ++i)
@@ -785,6 +792,8 @@
      indexEnd = indexBegin + range - 1;
 
-    CServerDistributionDescription serverDescription(nGlobDomain);
-    serverDescription.computeServerGlobalIndexInRange(nbServer, std::make_pair<size_t,size_t>(indexBegin, indexEnd));
+    CServerDistributionDescription serverDescription(nGlobDomain_);
+    if (isUnstructed_) serverDescription.computeServerGlobalIndexInRange(nbServer, std::make_pair<size_t,size_t>(indexBegin, indexEnd), 0);
+    else serverDescription.computeServerGlobalIndexInRange(nbServer, std::make_pair<size_t,size_t>(indexBegin, indexEnd), 1);
+
     CClientServerMapping* clientServerMap = new CClientServerMappingDistributed(serverDescription.getGlobalIndexRange(),
                                                                                 client->intraComm);
@@ -805,5 +814,5 @@
         if (iteVec != std::find(itbVec, iteVec, globalIndexDomainZoom(i)))
         {
-          indSrv_[rank].push_back(globalIndexDomainZoom(i));
+          indSrv_[rank].push_back(localIndexDomainZoom(i));
         }
       }
@@ -824,4 +833,9 @@
 
     delete clientServerMap;
+  }
+
+  const std::map<int, vector<size_t> >& CDomain::getIndexServer() const
+  {
+    return indSrv_;
   }
 
@@ -871,11 +885,12 @@
       CArray<double,1>& lon = list_lon.back();
       CArray<double,1>& lat = list_lat.back();
-
+      const std::vector<size_t>& temp = it->second;
       for (n = 0; n < nbData; ++n)
       {
         idx = static_cast<int>(it->second[n]);
-        i = idx % ni_glo;
-        j = idx / ni_glo;
-        ind = (i - zoom_ibegin_client) + (j - zoom_jbegin_client) * zoom_ni_client;
+        i = i_index(idx);
+        j = j_index(idx);
+        ind = n;
+//        ind = (i - zoom_ibegin_client) + (j - zoom_jbegin_client) * zoom_ni_client;
 
         lon(n) = lonvalue(ind);
@@ -894,6 +909,6 @@
         }
 
-        indi(n) = ibegin + i_index(i - ibegin, j - jbegin);
-        indj(n) = jbegin + j_index(i - ibegin, j - jbegin);
+        indi(n) = i;
+        indj(n) = j;
 
         if (hasArea)
@@ -1192,4 +1207,6 @@
       StdString zoomDomainDefRoot("zoom_domain_definition");
       StdString zoom("zoom_domain");
+      StdString interpFromFileDomainDefRoot("interpolate_from_file_domain_definition");
+      StdString interpFromFile("interpolate_from_file_domain");
       do
       {
@@ -1199,4 +1216,10 @@
           transformationMap_.push_back(std::make_pair(TRANS_ZOOM_DOMAIN,tmp));
         }
+        else if (node.getElementName() == interpFromFile)
+        {
+          CInterpolateFromFileDomain* tmp = (CInterpolateFromFileDomainGroup::get(interpFromFileDomainDefRoot))->createChild();
+          tmp->parse(node);
+          transformationMap_.push_back(std::make_pair(TRANS_INTERPOLATE_DOMAIN_FROM_FILE,tmp));
+        }
       } while (node.goToNextElement()) ;
       node.goToParentElement();
Index: XIOS/trunk/src/node/domain.hpp
===================================================================
--- XIOS/trunk/src/node/domain.hpp	(revision 656)
+++ XIOS/trunk/src/node/domain.hpp	(revision 657)
@@ -68,4 +68,5 @@
 
          void checkAttributesOnClient();
+         void checkAttributesOnClientAfterTransformation();
 
          void sendCheckedAttributes();
@@ -100,5 +101,5 @@
          /// Test ///
          bool IsWritten(const StdString & filename) const;
-         bool hasZoom(void) const;
+//         bool hasZoom(void) const;
          bool isEmpty(void) const;
          bool isDistributed(void) const;
@@ -165,5 +166,5 @@
 
          static ENodeType GetType(void);
-
+         const std::map<int, vector<size_t> >& getIndexServer() const;
          CArray<int, 2> local_mask;
          bool isCurvilinear ;
@@ -173,4 +174,5 @@
          void checkTransformations();
          void setTransformations(const TransMapTypes&);
+         void computeNGlobDomain();
 
        private :
@@ -178,4 +180,5 @@
          std::set<StdString> relFiles;
          bool isClientChecked; // Verify whether all attributes of domain on the client side are good
+         bool isClientAfterTransformationChecked;
          std::map<int, CArray<int,1> > indiSrv, indjSrv;
          std::map<int,int> nbConnectedClients_; // Mapping of number of communicating client to a server
@@ -184,4 +187,8 @@
          bool isDistributed_;
          TransMapTypes transformationMap_;
+         std::vector<int> nGlobDomain_;
+         bool isUnstructed_;
+         CArray<bool,1> maskInter_;
+
 
          DECLARE_REF_FUNC(Domain,domain)
Index: XIOS/trunk/src/node/grid.cpp
===================================================================
--- XIOS/trunk/src/node/grid.cpp	(revision 656)
+++ XIOS/trunk/src/node/grid.cpp	(revision 657)
@@ -13,4 +13,5 @@
 #include "context_server.hpp"
 #include "array_new.hpp"
+#include "server_distribution_description.hpp"
 #include "client_server_mapping_distributed.hpp"
 
@@ -23,7 +24,7 @@
       , isChecked(false), isDomainAxisChecked(false)
       , vDomainGroup_(), vAxisGroup_(), axisList_(), isAxisListSet(false), isDomListSet(false), clientDistribution_(0), isIndexSent(false)
-      , serverDistribution_(0), serverDistributionDescription_(0), clientServerMap_(0), writtenDataSize_(0), globalDim_()
+      , serverDistribution_(0), clientServerMap_(0), writtenDataSize_(0), globalDim_()
       , connectedDataSize_(), connectedServerRank_(), isDataDistributed_(true), transformations_(0), isTransformed_(false)
-      , axisPositionInGrid_()
+      , axisPositionInGrid_(), positionDimensionDistributed_(1)
    {
      setVirtualDomainGroup();
@@ -35,7 +36,7 @@
       , isChecked(false), isDomainAxisChecked(false)
       , vDomainGroup_(), vAxisGroup_(), axisList_(), isAxisListSet(false), isDomListSet(false), clientDistribution_(0), isIndexSent(false)
-      , serverDistribution_(0), serverDistributionDescription_(0), clientServerMap_(0), writtenDataSize_(0), globalDim_()
+      , serverDistribution_(0), clientServerMap_(0), writtenDataSize_(0), globalDim_()
       , connectedDataSize_(), connectedServerRank_(), isDataDistributed_(true), transformations_(0), isTransformed_(false)
-      , axisPositionInGrid_()
+      , axisPositionInGrid_(), positionDimensionDistributed_(1)
    {
      setVirtualDomainGroup();
@@ -47,5 +48,4 @@
     if (0 != clientDistribution_) delete clientDistribution_;
     if (0 != serverDistribution_) delete serverDistribution_;
-    if (0 != serverDistributionDescription_) delete serverDistributionDescription_;
     if (0 != clientServerMap_) delete clientServerMap_;
     if (0 != transformations_) delete transformations_;
@@ -58,5 +58,4 @@
    ENodeType CGrid::GetType(void)    { return eGrid; }
 
-   //---------------------------------------------------------------
 
    StdSize CGrid::getDimension(void) const
@@ -112,7 +111,39 @@
      }
 
+     // In some cases in which domain is masked, we need to count for connected server for longitude and latitude
+     std::vector<CDomain*> domListP = this->getDomains();
+     if (!domListP.empty())
+     {
+       for (int i = 0; i < domListP.size(); ++i)
+       {
+         const std::map<int, vector<size_t> >& indexDomainServer = domListP[i]->getIndexServer();
+         std::map<int, vector<size_t> >::const_iterator itDom = indexDomainServer.begin(), iteDom = indexDomainServer.end();
+         for (; itDom != iteDom; ++itDom)
+         {
+           if (ret.end() == ret.find(itDom->first))
+           {
+              retVal = (itDom->second).size();
+              retVal *= secureFactor;
+              ret.insert(std::make_pair<int,StdSize>(itDom->first, retVal));
+           }
+         }
+       }
+     }
+
      return ret;
    }
 
+   void CGrid::checkAttributesAfterTransformation()
+   {
+     setDomainList();
+     std::vector<CDomain*> domListP = this->getDomains();
+     if (!domListP.empty())
+     {
+       for (int i = 0; i < domListP.size(); ++i)
+       {
+         domListP[i]->checkAttributesOnClientAfterTransformation();
+       }
+     }
+   }
 
    void CGrid::solveDomainAxisRef(bool areAttributesChecked)
@@ -122,5 +153,5 @@
      this->solveAxisRef(areAttributesChecked);
      this->solveDomainRef(areAttributesChecked);
-
+     computeGridGlobalDimension(getDomains(), getAxis(), axis_domain_order);
      this->isDomainAxisChecked = areAttributesChecked;
    }
@@ -153,5 +184,6 @@
      if (context->hasClient)
      {
-        checkMask();
+        this->checkAttributesAfterTransformation();
+        this->checkMask();
         this->computeIndex();
      }
@@ -229,5 +261,4 @@
       if (!domListP.empty())
       {
-        computeGridGlobalDimension(getDomains(), getAxis(), axis_domain_order);
         for (int i = 0; i < domListP.size(); ++i)
         {
@@ -258,5 +289,4 @@
         }
 
-        computeGridGlobalDimension(getDomains(), getAxis(), axis_domain_order);
         for (int i = 0; i < axisListP.size(); ++i)
         {
@@ -267,5 +297,4 @@
           ++idx;
         }
-
       }
    }
@@ -275,5 +304,4 @@
      return axisPositionInGrid_;
    }
-
 
    //---------------------------------------------------------------
@@ -317,11 +345,11 @@
 
      // Then compute distribution on server side
-     serverDistributionDescription_ = new CServerDistributionDescription(clientDistribution_->getNGlob());
-     serverDistributionDescription_->computeServerDistribution(client->serverSize, true);
-     serverDistributionDescription_->computeServerGlobalIndexInRange(client->serverSize,
-                                                                     std::make_pair<size_t,size_t>(indexBegin, indexEnd));
+     CServerDistributionDescription serverDistributionDescription(globalDim_);
+     serverDistributionDescription.computeServerGlobalIndexInRange(client->serverSize,
+                                                                   std::make_pair<size_t,size_t>(indexBegin, indexEnd),
+                                                                   positionDimensionDistributed_);
 
      // Finally, compute index mapping between client(s) and server(s)
-     clientServerMap_ = new CClientServerMappingDistributed(serverDistributionDescription_->getGlobalIndexRange(),
+     clientServerMap_ = new CClientServerMappingDistributed(serverDistributionDescription.getGlobalIndexRange(),
                                                             client->intraComm,
                                                             clientDistribution_->isDataDistributed());
@@ -330,5 +358,4 @@
      const std::map<int, std::vector<size_t> >& globalIndexOnServer = clientServerMap_->getGlobalIndexOnServer();
      const CArray<size_t,1>& globalIndexSendToServer = clientDistribution_->getGlobalDataIndexSendToServer();
-
      std::map<int, std::vector<size_t> >::const_iterator iteGlobalMap, itbGlobalMap, itGlobalMap;
      itbGlobalMap = itGlobalMap = globalIndexOnServer.begin();
@@ -640,6 +667,16 @@
       if (axisDomainOrder(i))
       {
+        if (!(domains[idxDomain]->type.isEmpty()) && (domains[idxDomain]->type==CDomain::type_attr::unstructured))
+        {
+          positionDimensionDistributed_ = idx;
+        }
+        else
+        {
+          positionDimensionDistributed_ = idx +1;
+        }
+
         globalDim_[idx]   = domains[idxDomain]->ni_glo.getValue();
         globalDim_[idx+1] = domains[idxDomain]->nj_glo.getValue();
+
         ++idxDomain;
         idx += 2;
Index: XIOS/trunk/src/node/grid.hpp
===================================================================
--- XIOS/trunk/src/node/grid.hpp	(revision 656)
+++ XIOS/trunk/src/node/grid.hpp	(revision 657)
@@ -13,5 +13,4 @@
 #include "distribution_client.hpp"
 #include "distribution_server.hpp"
-#include "server_distribution_description.hpp"
 #include "client_server_mapping.hpp"
 #include "utils.hpp"
@@ -218,4 +217,6 @@
         CDomainGroup* getVirtualDomainGroup() const;
 
+        void checkAttributesAfterTransformation();
+
 
         void setTransformationAlgorithms();
@@ -230,5 +231,4 @@
         CDistributionClient* clientDistribution_;
         CDistributionServer* serverDistribution_;
-        CServerDistributionDescription* serverDistributionDescription_;
         CClientServerMapping* clientServerMap_;
         size_t writtenDataSize_;
@@ -236,4 +236,5 @@
         std::vector<int> connectedServerRank_;
         bool isDataDistributed_;
+        int positionDimensionDistributed_;
 
         bool isTransformed_;
Index: XIOS/trunk/src/node/interpolate_from_file_domain.cpp
===================================================================
--- XIOS/trunk/src/node/interpolate_from_file_domain.cpp	(revision 657)
+++ XIOS/trunk/src/node/interpolate_from_file_domain.cpp	(revision 657)
@@ -0,0 +1,29 @@
+#include "interpolate_from_file_domain.hpp"
+#include "type.hpp"
+
+namespace xios {
+
+  /// ////////////////////// DÃ©finitions ////////////////////// ///
+
+  CInterpolateFromFileDomain::CInterpolateFromFileDomain(void)
+    : CObjectTemplate<CInterpolateFromFileDomain>(), CInterpolateFromFileDomainAttributes(), CTransformation<CDomain>()
+  { /* Ne rien faire de plus */ }
+
+  CInterpolateFromFileDomain::CInterpolateFromFileDomain(const StdString & id)
+    : CObjectTemplate<CInterpolateFromFileDomain>(id), CInterpolateFromFileDomainAttributes(), CTransformation<CDomain>()
+  { /* Ne rien faire de plus */ }
+
+  CInterpolateFromFileDomain::~CInterpolateFromFileDomain(void)
+  {}
+
+  //----------------------------------------------------------------
+
+  StdString CInterpolateFromFileDomain::GetName(void)    { return StdString("interpolate_from_file_domain"); }
+  StdString CInterpolateFromFileDomain::GetDefName(void) { return StdString("interpolate_from_file_domain"); }
+  ENodeType CInterpolateFromFileDomain::GetType(void)    { return eInterpolateFromFileDomain; }
+
+  void CInterpolateFromFileDomain::checkValid(CDomain* domainSrc)
+  {
+  }
+
+}
Index: XIOS/trunk/src/node/interpolate_from_file_domain.hpp
===================================================================
--- XIOS/trunk/src/node/interpolate_from_file_domain.hpp	(revision 657)
+++ XIOS/trunk/src/node/interpolate_from_file_domain.hpp	(revision 657)
@@ -0,0 +1,65 @@
+#ifndef __XIOS_CInterpolateFromFileDomain__
+#define __XIOS_CInterpolateFromFileDomain__
+
+/// xios headers ///
+#include "xios_spl.hpp"
+#include "attribute_enum.hpp"
+#include "attribute_enum_impl.hpp"
+#include "attribute_array.hpp"
+#include "declare_attribute.hpp"
+#include "object_template.hpp"
+#include "group_factory.hpp"
+#include "declare_group.hpp"
+#include "transformation.hpp"
+#include "domain.hpp"
+
+namespace xios {
+  /// ////////////////////// DÃ©clarations ////////////////////// ///
+  class CInterpolateFromFileDomainGroup;
+  class CInterpolateFromFileDomainAttributes;
+  class CInterpolateFromFileDomain;
+  class CDomain;
+
+  ///--------------------------------------------------------------
+
+  // Declare/Define CFileAttribute
+  BEGIN_DECLARE_ATTRIBUTE_MAP(CInterpolateFromFileDomain)
+#include "interpolate_from_file_domain_attribute.conf"
+  END_DECLARE_ATTRIBUTE_MAP(CInterpolateFromFileDomain)
+
+  ///--------------------------------------------------------------
+  /*!
+    \class CInterpolateFromFileDomain
+    This class describes interpolate_from_file_domain in xml file.
+  */
+  class CInterpolateFromFileDomain
+    : public CObjectTemplate<CInterpolateFromFileDomain>
+    , public CInterpolateFromFileDomainAttributes
+    , public CTransformation<CDomain>
+  {
+    public :
+      typedef CObjectTemplate<CInterpolateFromFileDomain> SuperClass;
+      typedef CInterpolateFromFileDomainAttributes SuperClassAttribute;
+
+    public :
+      /// Constructeurs ///
+      CInterpolateFromFileDomain(void);
+      explicit CInterpolateFromFileDomain(const StdString& id);
+
+      /// Destructeur ///
+      virtual ~CInterpolateFromFileDomain(void);
+
+      virtual void checkValid(CDomain* axisDest);
+
+      /// Accesseurs statiques ///
+      static StdString GetName(void);
+      static StdString GetDefName(void);
+      static ENodeType GetType(void);
+    private:
+
+  }; // class CInterpolateFromFileDomain
+
+  DECLARE_GROUP(CInterpolateFromFileDomain);
+} // namespace xios
+
+#endif // __XIOS_CInterpolateFromFileDomain__
Index: XIOS/trunk/src/node/node_enum.hpp
===================================================================
--- XIOS/trunk/src/node/node_enum.hpp	(revision 656)
+++ XIOS/trunk/src/node/node_enum.hpp	(revision 657)
@@ -23,5 +23,6 @@
          eZoomAxis,
          eInterpolateAxis,
-         eZoomDomain
+         eZoomDomain,
+         eInterpolateFromFileDomain
 
       } ENodeType;
Index: XIOS/trunk/src/node/node_type.hpp
===================================================================
--- XIOS/trunk/src/node/node_type.hpp	(revision 656)
+++ XIOS/trunk/src/node/node_type.hpp	(revision 657)
@@ -14,4 +14,5 @@
 #include "interpolate_axis.hpp"
 #include "zoom_domain.hpp"
+#include "interpolate_from_file_domain.hpp"
 
 #endif // __XIOS_NODE_TYPE__
Index: XIOS/trunk/src/node/transformation_enum.hpp
===================================================================
--- XIOS/trunk/src/node/transformation_enum.hpp	(revision 656)
+++ XIOS/trunk/src/node/transformation_enum.hpp	(revision 657)
@@ -10,5 +10,6 @@
         TRANS_INVERSE_AXIS,
         TRANS_INTERPOLATE_AXIS,
-        TRANS_ZOOM_DOMAIN
+        TRANS_ZOOM_DOMAIN,
+        TRANS_INTERPOLATE_DOMAIN_FROM_FILE
       } ETranformationType;
 
Index: XIOS/trunk/src/object_factory_decl.cpp
===================================================================
--- XIOS/trunk/src/object_factory_decl.cpp	(revision 656)
+++ XIOS/trunk/src/object_factory_decl.cpp	(revision 657)
@@ -28,4 +28,5 @@
   macro(CInterpolateAxis)
   macro(CZoomDomain)
+  macro(CInterpolateFromFileDomain)
 
   macro(CFieldGroup)
@@ -40,3 +41,4 @@
   macro(CInterpolateAxisGroup)
   macro(CZoomDomainGroup)
+  macro(CInterpolateFromFileDomainGroup)
 }
Index: XIOS/trunk/src/object_template_decl.cpp
===================================================================
--- XIOS/trunk/src/object_template_decl.cpp	(revision 656)
+++ XIOS/trunk/src/object_template_decl.cpp	(revision 657)
@@ -1,16 +1,5 @@
 #include "object_template_impl.hpp"
 #include "xios_spl.hpp"
-#include "field.hpp"
-#include "context.hpp"
-#include "file.hpp"
-#include "domain.hpp"
-#include "grid.hpp"
-#include "axis.hpp"
-#include "variable.hpp"
-#include "transformation.hpp"
-#include "inverse_axis.hpp"
-#include "zoom_axis.hpp"
-#include "interpolate_axis.hpp"
-#include "zoom_domain.hpp"
+#include "node_type.hpp"
 
 namespace xios
@@ -28,4 +17,5 @@
   template class CObjectTemplate<CInterpolateAxis>;
   template class CObjectTemplate<CZoomDomain>;
+  template class CObjectTemplate<CInterpolateFromFileDomain>;
 
   template class CObjectTemplate<CContextGroup>;
@@ -40,3 +30,4 @@
   template class CObjectTemplate<CInterpolateAxisGroup>;
   template class CObjectTemplate<CZoomDomainGroup>;
+  template class CObjectTemplate<CInterpolateFromFileDomainGroup>;
 }
Index: XIOS/trunk/src/output/nc4_data_output.cpp
===================================================================
--- XIOS/trunk/src/output/nc4_data_output.cpp	(revision 656)
+++ XIOS/trunk/src/output/nc4_data_output.cpp	(revision 657)
@@ -457,5 +457,5 @@
                  dim0.push_back(dimXid);
 
-                 SuperClassWriter::addDimension(dimXid, domain->zoom_nj_srv);
+                 SuperClassWriter::addDimension(dimXid, domain->zoom_ni_srv);
                  SuperClassWriter::addVariable(latid, NC_FLOAT, dim0);
                  SuperClassWriter::addVariable(lonid, NC_FLOAT, dim0);
Index: XIOS/trunk/src/server_distribution_description.cpp
===================================================================
--- XIOS/trunk/src/server_distribution_description.cpp	(revision 656)
+++ XIOS/trunk/src/server_distribution_description.cpp	(revision 657)
@@ -3,5 +3,5 @@
    \author Ha NGUYEN
    \since 04 Jan 2015
-   \date 09 Mars 2015
+   \date 24 Jul 2015
 
    \brief Description of index distribution on server(s).
@@ -9,4 +9,5 @@
 
 #include "server_distribution_description.hpp"
+#include "exception.hpp"
 
 namespace xios
@@ -27,4 +28,5 @@
 */
 void CServerDistributionDescription::computeServerDistribution(int nServer,
+                                                               int positionDimensionDistributed,
                                                                bool doComputeGlobalIndex,
                                                                ServerDistributionType serType)
@@ -32,5 +34,5 @@
   switch (serType) {
     case BAND_DISTRIBUTION:
-      computeBandDistribution(nServer);
+      computeBandDistribution(nServer, positionDimensionDistributed);
       break;
     default:
@@ -95,10 +97,11 @@
 */
 void CServerDistributionDescription::computeServerGlobalIndexInRange(int nServer,
-                                        const std::pair<size_t, size_t>& indexBeginEnd,
-                                        ServerDistributionType distributionType)
+                                                                     const std::pair<size_t, size_t>& indexBeginEnd,
+                                                                     int positionDimensionDistributed,
+                                                                     ServerDistributionType distributionType)
 {
   switch (distributionType) {
     case BAND_DISTRIBUTION:
-      computeBandDistribution(nServer);
+      computeBandDistribution(nServer, positionDimensionDistributed);
       break;
     default:
@@ -161,7 +164,13 @@
   \param [in] nServer number of server
 */
-void CServerDistributionDescription::computeBandDistribution(int nServer)
+void CServerDistributionDescription::computeBandDistribution(int nServer, int positionDimensionDistributed)
 {
   int dim = nGlobal_.size();
+  if (positionDimensionDistributed > dim)
+    ERROR("CServerDistributionDescription::computeBandDistribution(int nServer, int positionDimensionDistributed)",
+          << "Position of distributed dimension is invalid" << std::endl
+          << "Position of distributed dimension is " << positionDimensionDistributed
+          << "Dimension " << dim)
+
   indexBegin_.resize(nServer);
   dimensionSizes_.resize(nServer);
@@ -178,6 +187,6 @@
   std::vector<int> njRangeEnd(nServer,0);
 
-  if (1<dim) nGlobTemp = nGlobal_[1];
-  else nGlobTemp = nGlobal_[0];
+  int positionDistributed = (1<dim) ? positionDimensionDistributed : 0;
+  nGlobTemp = nGlobal_[positionDistributed];
 
   for (int i = 0; i < nServer; ++i)
@@ -194,5 +203,5 @@
     for (int j = 0; j < dim; ++j)
     {
-      if (1 != j)
+      if (positionDistributed != j)
       {
         if (1 == dim)
Index: XIOS/trunk/src/server_distribution_description.hpp
===================================================================
--- XIOS/trunk/src/server_distribution_description.hpp	(revision 656)
+++ XIOS/trunk/src/server_distribution_description.hpp	(revision 657)
@@ -3,5 +3,5 @@
    \author Ha NGUYEN
    \since 04 Jan 2015
-   \date 09 Feb 2015
+   \date 24 Jul 2015
 
    \brief Description of index distribution on server(s).
@@ -34,9 +34,11 @@
     virtual ~CServerDistributionDescription();
 
-    void computeServerDistribution(int nServer, bool doComputeGlobalIndex = false,
+    void computeServerDistribution(int nServer, int positionDimensionDistributed = 1,
+                                   bool doComputeGlobalIndex = false,
                                    ServerDistributionType type = BAND_DISTRIBUTION);
 
     void computeServerGlobalIndexInRange(int nServer,
                                          const std::pair<size_t, size_t>& indexBeginEnd,
+                                         int positionDimensionDistributed = 1,
                                          ServerDistributionType = BAND_DISTRIBUTION);
 
@@ -47,5 +49,5 @@
 
   protected:
-    void computeBandDistribution(int nServer);
+    void computeBandDistribution(int nServer, int positionDimensionDistributed = 1);
     void computePlanDistribution(int nServer);
 
Index: XIOS/trunk/src/test/test_new_features.f90
===================================================================
--- XIOS/trunk/src/test/test_new_features.f90	(revision 656)
+++ XIOS/trunk/src/test/test_new_features.f90	(revision 657)
@@ -15,7 +15,7 @@
   CHARACTER(len=15) :: calendar_type
   TYPE(xios_context) :: ctx_hdl
-  INTEGER,PARAMETER :: ni_glo=5
-  INTEGER,PARAMETER :: nj_glo=5
-  INTEGER,PARAMETER :: llm=5
+  INTEGER,PARAMETER :: ni_glo=10
+  INTEGER,PARAMETER :: nj_glo=10
+  INTEGER,PARAMETER :: llm=2
   INTEGER,PARAMETER :: llmInterPolated=5
   DOUBLE PRECISION  :: lval(llm)=1, tsTemp, lvalInterPolated(llmInterPolated)=1
@@ -29,6 +29,9 @@
   DOUBLE PRECISION :: field_A_glo(ni_glo,nj_glo,llm), lval_ni_glo(ni_glo), lval_nj_glo(nj_glo)
   DOUBLE PRECISION,ALLOCATABLE :: lon(:,:),lat(:,:),field_A(:,:,:), field_All_Axis(:,:,:), lonvalue(:) , &
-                                  field_Axis(:), lvaln(:), lval_ni(:), lval_nj(:), field_Two_Axis(:,:), lvalnInterp(:)
-  INTEGER :: ni,ibegin,iend,nj,jbegin,jend, nAxis, axisBegin, axisEnd, axisterpBegin, nAxisinterp, axisinterpEnd
+                                  field_Axis(:), lvaln(:), lval_ni(:), lval_nj(:), field_Two_Axis(:,:), lvalnInterp(:), &
+                                  lontransformed(:,:), lattransformed(:,:), lon_glotransformed(:,:), lat_glotransformed(:,:)
+  INTEGER :: ni,ibegin,iend,nj,jbegin,jend, nAxis, axisBegin, axisEnd
+  INTEGER :: axisterpBegin, nAxisinterp, axisinterpEnd
+  INTEGER :: niDomInterp,ibeginDomInterp,iendDomInterp,njDomInterp,jbeginDomInterp,jendDomInterp, niDomGlo, njDomGlo
   INTEGER :: i,j,l,ts,n
 
@@ -74,7 +77,22 @@
   CALL Distribute_index(axisterpBegin, axisinterpEnd, nAxisinterp, llmInterPolated, rank, size)
 
+  niDomGlo = ni_glo - 4
+  njDomGlo = nj_glo - 4
+  ALLOCATE(lon_glotransformed(niDomGlo,njDomGlo), lat_glotransformed(niDomGlo,njDomGlo))
+  DO j=1,njDomGlo
+    DO i=1,niDomGlo
+      lon_glotransformed(i,j)=(i-1)+(j-1)*niDomGlo
+      lat_glotransformed(i,j)=1000+(i-1)+(j-1)*niDomGlo
+    ENDDO
+  ENDDO
+
+  niDomInterp = niDomGlo; ibeginDomInterp = 0
+  jbeginDomInterp = 0
+  CALL Distribute_index(jbeginDomInterp, jendDomInterp, njDomInterp, njDomGlo, rank, size)
+
   ALLOCATE(field_A(0:ni+1,-1:nj+2,llm), field_Two_Axis(ni_glo,1:nj), field_Axis(nAxis), field_All_Axis(1:ni,1:nj,llm), &
           lon(ni,nj),lat(ni,nj), lonvalue(ni*nj), &
-          lvaln(nAxis), lval_ni(ni), lval_nj(nj), lvalnInterp(nAxisinterp))
+          lvaln(nAxis), lval_ni(ni), lval_nj(nj), lvalnInterp(nAxisinterp), &
+          lontransformed(niDomInterp, njDomInterp), lattransformed(niDomInterp, njDomInterp))
 
   ALLOCATE(mask(nj))
@@ -88,4 +106,6 @@
   lon(:,:)=lon_glo(ibegin+1:iend+1,jbegin+1:jend+1)
   lat(:,:)=lat_glo(ibegin+1:iend+1,jbegin+1:jend+1)
+  lontransformed(:,:) = lon_glotransformed(ibeginDomInterp+1:iendDomInterp+1,jbeginDomInterp+1:jendDomInterp+1)
+  lattransformed(:,:) = lat_glotransformed(ibeginDomInterp+1:iendDomInterp+1,jbeginDomInterp+1:jendDomInterp+1)
   field_A(1:ni,1:nj,:) = field_A_glo(ibegin+1:iend+1,jbegin+1:jend+1,:)
   field_Axis(1:nAxis)  = field_A_glo(1,1,axisBegin+1:axisEnd+1)
@@ -109,10 +129,12 @@
   CALL xios_set_axis_attr("axis_C", size=llm, value=lval)
   CALL xios_set_axis_attr("axis_D", size=llm, ibegin=axisBegin, ni=nAxis, value=lvaln)
-!  CALL xios_set_axis_attr("axis_D", size=llm, value=lval)
   CALL xios_set_axis_attr("axis_G", size=llmInterPolated, value=lvalnInterp, ibegin=axisterpBegin, ni=nAxisinterp)
   CALL xios_set_domain_attr("domain_A",ni_glo=ni_glo, nj_glo=nj_glo, ibegin=ibegin, ni=ni,jbegin=jbegin,nj=nj)
   CALL xios_set_domain_attr("domain_A",data_dim=2, data_ibegin=-1, data_ni=ni+2, data_jbegin=-2, data_nj=nj+4)
   CALL xios_set_domain_attr("domain_A",lonvalue=RESHAPE(lon,(/ni*nj/)),latvalue=RESHAPE(lat,(/ni*nj/)))
-!  CALL xios_set_domain_attr("domain_A",zoom_ibegin=40, zoom_ni=20, zoom_jbegin=40, zoom_nj=10)
+
+  CALL xios_set_domain_attr("domain_A_transformed",ni_glo=niDomGlo, nj_glo=njDomGlo, ibegin=ibeginDomInterp, ni=niDomInterp,jbegin=jbeginDomInterp,nj=njDomInterp)
+  CALL xios_set_domain_attr("domain_A_transformed",lonvalue=RESHAPE(lontransformed,(/niDomInterp*njDomInterp/)),latvalue=RESHAPE(lattransformed,(/niDomInterp*njDomInterp/)))
+
   CALL xios_set_fieldgroup_attr("field_definition",enabled=.TRUE.)
 
Index: XIOS/trunk/src/test/test_unstruct_complete.f90
===================================================================
--- XIOS/trunk/src/test/test_unstruct_complete.f90	(revision 656)
+++ XIOS/trunk/src/test/test_unstruct_complete.f90	(revision 657)
@@ -199,17 +199,15 @@
   CALL xios_set_current_context(ctx_hdl)
 
-  CALL xios_define_calendar(type="Julian", &
-                            start_date=xios_date(2012, 03, 01, 15, 00, 00), &
-                            time_origin=xios_date(2012, 02, 29, 15, 00, 00))
-
   CALL xios_set_axis_attr("axis_srf",size=llm ,value=lval) ;
-  CALL xios_set_domain_attr("domain_srf",ni_glo=ncell_glo, ni=ncell, ibegin=1, i_index=RESHAPE(i_index,(/ncell,1/) ))
+!  CALL xios_set_domain_attr("domain_srf",ni_glo=ncell_glo, ni=ncell, ibegin=1, i_index=RESHAPE(i_index,(/ncell,1/) ))
+  CALL xios_set_domain_attr("domain_srf",ni_glo=ncell_glo, ni=ncell, ibegin=1, i_index=i_index)
   CALL xios_set_domain_attr("domain_srf",data_dim=1, data_ni=data_n_index, data_n_index=data_n_index, data_i_index=data_i_index, type='unstructured')
   CALL xios_set_domain_attr("domain_srf",lonvalue=lon,latvalue=lat)
   CALL xios_set_domain_attr("domain_srf", nvertex=4, bounds_lon=bounds_lon, bounds_lat=bounds_lat )
+!  CALL xios_set_domain_attr("domain_srf", mask=RESHAPE(mask,(/ncell,1/) ))
 
 
   dtime%second=3600
-  CALL xios_set_context_attr("surface", timestep=dtime)
+  CALL xios_set_timestep(dtime)
   CALL xios_close_context_definition()
 
Index: XIOS/trunk/src/transformation/domain_algorithm_interpolate_from_file.cpp
===================================================================
--- XIOS/trunk/src/transformation/domain_algorithm_interpolate_from_file.cpp	(revision 657)
+++ XIOS/trunk/src/transformation/domain_algorithm_interpolate_from_file.cpp	(revision 657)
@@ -0,0 +1,237 @@
+/*!
+   \file domain_algorithm_interpolate_from_file.cpp
+   \author Ha NGUYEN
+   \since 09 Jul 2015
+   \date 17 Jul 2015
+
+   \brief Algorithm for interpolation on a domain.
+ */
+#include "domain_algorithm_interpolate_from_file.hpp"
+#include <boost/unordered_map.hpp>
+#include "context.hpp"
+#include "context_client.hpp"
+#include "distribution_client.hpp"
+#include "client_server_mapping_distributed.hpp"
+
+namespace xios {
+
+CDomainAlgorithmInterpolateFromFile::CDomainAlgorithmInterpolateFromFile(CDomain* domainDestination, CDomain* domainSource, CInterpolateFromFileDomain* interpDomain)
+: CDomainAlgorithmTransformation(domainDestination, domainSource), interpDomain_(interpDomain)
+{
+  interpDomain_->checkValid(domainSource);
+  computeIndexSourceMapping();
+}
+
+/*!
+  Compute the index mapping between domain on grid source and one on grid destination
+*/
+void CDomainAlgorithmInterpolateFromFile::computeIndexSourceMapping()
+{
+  CContext* context = CContext::getCurrent();
+  CContextClient* client=context->client;
+  int clientRank = client->clientRank;
+
+  std::string filename = interpDomain_->file.getValue();
+  std::map<int,std::vector<std::pair<int,double> > > interpMapValue;
+//  readInterpolationInfo(filename, interpMapValue);
+
+  randomizeInterpolationInfo(interpMapValue);
+  boost::unordered_map<size_t,int> globalIndexOfDomainDest;
+  int ni = domainDest_->ni.getValue();
+  int nj = domainDest_->nj.getValue();
+  int ni_glo = domainDest_->ni_glo.getValue();
+  size_t globalIndex;
+  int nIndexSize = domainDest_->i_index.numElements(), i_ind, j_ind;
+  for (int idx = 0; idx < nIndexSize; ++idx)
+  {
+    i_ind=domainDest_->i_index(idx) ;
+    j_ind=domainDest_->j_index(idx) ;
+
+    globalIndex = i_ind + j_ind * ni_glo;
+    globalIndexOfDomainDest[globalIndex] = clientRank;
+  }
+
+  CClientServerMappingDistributed domainIndexClientClientMapping(globalIndexOfDomainDest,
+                                                                 client->intraComm,
+                                                                 true);
+  CArray<size_t,1> globalIndexInterp(interpMapValue.size());
+  std::map<int,std::vector<std::pair<int,double> > >::const_iterator itb = interpMapValue.begin(), it,
+                                                                     ite = interpMapValue.end();
+  size_t globalIndexCount = 0;
+  for (it = itb; it != ite; ++it)
+  {
+    globalIndexInterp(globalIndexCount) = it->first;
+    ++globalIndexCount;
+  }
+
+  domainIndexClientClientMapping.computeServerIndexMapping(globalIndexInterp);
+  const std::map<int, std::vector<size_t> >& globalIndexInterpSendToClient = domainIndexClientClientMapping.getGlobalIndexOnServer();
+
+  //Inform each client number of index they will receive
+  int nbClient = client->clientSize;
+  int* sendBuff = new int[nbClient];
+  int* recvBuff = new int[nbClient];
+  for (int i = 0; i < nbClient; ++i) sendBuff[i] = 0;
+  int sendBuffSize = 0;
+  std::map<int, std::vector<size_t> >::const_iterator itbMap = globalIndexInterpSendToClient.begin(), itMap,
+                                                      iteMap = globalIndexInterpSendToClient.end();
+  for (itMap = itbMap; itMap != iteMap; ++itMap)
+  {
+    int sizeIndex = 0, mapSize = (itMap->second).size();
+    for (int idx = 0; idx < mapSize; ++idx)
+    {
+      sizeIndex += interpMapValue[(itMap->second)[idx]].size();
+    }
+    sendBuff[itMap->first] = sizeIndex;
+    sendBuffSize += sizeIndex;
+  }
+
+  MPI_Allreduce(sendBuff, recvBuff, nbClient, MPI_INT, MPI_SUM, client->intraComm);
+
+  int* sendIndexDestBuff = new int [sendBuffSize];
+  int* sendIndexSrcBuff  = new int [sendBuffSize];
+  double* sendWeightBuff = new double [sendBuffSize];
+
+  std::vector<MPI_Request> sendRequest;
+  // Now send index and weight
+  int sendOffSet = 0;
+  for (itMap = itbMap; itMap != iteMap; ++itMap)
+  {
+    int k = 0;
+    int mapSize = (itMap->second).size();
+
+    for (int idx = 0; idx < mapSize; ++idx)
+    {
+      std::vector<std::pair<int,double> >& interpMap = interpMapValue[(itMap->second)[idx]];
+      for (int i = 0; i < interpMap.size(); ++i)
+      {
+        sendIndexDestBuff[k] = (itMap->second)[idx];
+        sendIndexSrcBuff[k]  = interpMap[i].first;
+        sendWeightBuff[k]    = interpMap[i].second;
+        ++k;
+      }
+    }
+
+    sendRequest.push_back(MPI_Request());
+    MPI_Isend(sendIndexDestBuff + sendOffSet,
+             k,
+             MPI_INT,
+             itMap->first,
+             7,
+             client->intraComm,
+             &sendRequest.back());
+    sendRequest.push_back(MPI_Request());
+    MPI_Isend(sendIndexSrcBuff + sendOffSet,
+             k,
+             MPI_INT,
+             itMap->first,
+             8,
+             client->intraComm,
+             &sendRequest.back());
+    sendRequest.push_back(MPI_Request());
+    MPI_Isend(sendWeightBuff + sendOffSet,
+             k,
+             MPI_DOUBLE,
+             itMap->first,
+             9,
+             client->intraComm,
+             &sendRequest.back());
+    sendOffSet += k;
+  }
+
+  int recvBuffSize = recvBuff[clientRank];
+  int* recvIndexDestBuff = new int [recvBuffSize];
+  int* recvIndexSrcBuff  = new int [recvBuffSize];
+  double* recvWeightBuff = new double [recvBuffSize];
+  int receivedSize = 0;
+  int clientSrcRank;
+  while (receivedSize < recvBuffSize)
+  {
+    MPI_Status recvStatus;
+    MPI_Recv((recvIndexDestBuff + receivedSize),
+             recvBuffSize,
+             MPI_INT,
+             MPI_ANY_SOURCE,
+             7,
+             client->intraComm,
+             &recvStatus);
+
+    int countBuff = 0;
+    MPI_Get_count(&recvStatus, MPI_INT, &countBuff);
+    clientSrcRank = recvStatus.MPI_SOURCE;
+
+    MPI_Recv((recvIndexSrcBuff + receivedSize),
+             recvBuffSize,
+             MPI_INT,
+             clientSrcRank,
+             8,
+             client->intraComm,
+             &recvStatus);
+
+    MPI_Recv((recvWeightBuff + receivedSize),
+             recvBuffSize,
+             MPI_DOUBLE,
+             clientSrcRank,
+             9,
+             client->intraComm,
+             &recvStatus);
+
+    for (int idx = 0; idx < countBuff; ++idx)
+    {
+      transformationMapping_[*(recvIndexDestBuff + receivedSize + idx)].push_back(*(recvIndexSrcBuff + receivedSize + idx));
+      transformationWeight_[*(recvIndexDestBuff + receivedSize + idx)].push_back(*(recvWeightBuff + receivedSize + idx));
+    }
+    receivedSize += countBuff;
+  }
+
+  std::vector<MPI_Status> requestStatus(sendRequest.size());
+  MPI_Wait(&sendRequest[0], &requestStatus[0]);
+
+  delete [] sendIndexDestBuff;
+  delete [] sendIndexSrcBuff;
+  delete [] sendWeightBuff;
+  delete [] recvIndexDestBuff;
+  delete [] recvIndexSrcBuff;
+  delete [] recvWeightBuff;
+  delete [] sendBuff;
+  delete [] recvBuff;
+}
+
+void CDomainAlgorithmInterpolateFromFile::randomizeInterpolationInfo(std::map<int,std::vector<std::pair<int,double> > >& interpMapValue)
+{
+  int iDestBegin = 2;
+  int jDestBegin = 2;
+
+  int ni_glo_src = domainSrc_->ni_glo.getValue();
+  int ni_glo = domainDest_->ni_glo.getValue();
+  size_t globalIndex;
+  int nIndexSize = domainDest_->i_index.numElements(), i_ind, j_ind;
+  for (int idx = 0; idx < nIndexSize; ++idx)
+  {
+    i_ind=domainDest_->i_index(idx) ;
+    j_ind=domainDest_->j_index(idx) ;
+
+    globalIndex = i_ind + j_ind * ni_glo;
+
+    interpMapValue[globalIndex].push_back(make_pair((i_ind+iDestBegin) + (j_ind+jDestBegin-1)*ni_glo_src, 0.25));
+    interpMapValue[globalIndex].push_back(make_pair((i_ind+iDestBegin+1) + (j_ind+jDestBegin)*ni_glo_src, 0.25));
+    interpMapValue[globalIndex].push_back(make_pair((i_ind+iDestBegin) + (j_ind+jDestBegin+1)*ni_glo_src, 0.25));
+    interpMapValue[globalIndex].push_back(make_pair((i_ind+iDestBegin-1) + (j_ind+jDestBegin)*ni_glo_src, 0.25));
+
+
+  }
+}
+
+/*!
+  Read interpolation information from a file
+  \param [in] filename interpolation file
+  \param [in/out] interpMapValue Mapping between (global) index of domain on grid destination and
+         corresponding global index of domain and associated weight value on grid source
+*/
+void CDomainAlgorithmInterpolateFromFile::readInterpolationInfo(std::string& filename,
+                                                                std::map<int,std::vector<std::pair<int,double> > >& interpMapValue)
+{
+
+}
+
+}
Index: XIOS/trunk/src/transformation/domain_algorithm_interpolate_from_file.hpp
===================================================================
--- XIOS/trunk/src/transformation/domain_algorithm_interpolate_from_file.hpp	(revision 657)
+++ XIOS/trunk/src/transformation/domain_algorithm_interpolate_from_file.hpp	(revision 657)
@@ -0,0 +1,39 @@
+/*!
+   \file domain_algorithm_interpolate_from_file.hpp
+   \author Ha NGUYEN
+   \since 09 July 2015
+   \date 09 July 2015
+
+   \brief Algorithm for interpolation on a domain.
+ */
+#ifndef __XIOS_DOMAIN_ALGORITHM_INTERPOLATE_FROM_FILE_HPP__
+#define __XIOS_DOMAIN_ALGORITHM_INTERPOLATE_FROM_FILE_HPP__
+
+#include "domain_algorithm_transformation.hpp"
+#include "domain.hpp"
+#include "interpolate_from_file_domain.hpp"
+
+namespace xios {
+/*!
+  \class CDomainAlgorithmInterpolateFromFile
+  Reading interpolation from file then apply on a domain
+*/
+class CDomainAlgorithmInterpolateFromFile : public CDomainAlgorithmTransformation
+{
+public:
+  CDomainAlgorithmInterpolateFromFile(CDomain* domainDestination, CDomain* domainSource, CInterpolateFromFileDomain* interpDomain);
+
+  virtual ~CDomainAlgorithmInterpolateFromFile() {}
+
+  virtual void computeIndexSourceMapping();
+
+private:
+  void readInterpolationInfo(std::string& filename, std::map<int,std::vector<std::pair<int,double> > >& interpMapValue);
+  void randomizeInterpolationInfo(std::map<int,std::vector<std::pair<int,double> > >& interpMapValue);
+private:
+  CInterpolateFromFileDomain* interpDomain_;
+
+};
+
+}
+#endif // __XIOS_DOMAIN_ALGORITHM_INTERPOLATE_FROM_FILE_HPP__
Index: XIOS/trunk/src/transformation/domain_algorithm_transformation.cpp
===================================================================
--- XIOS/trunk/src/transformation/domain_algorithm_transformation.cpp	(revision 656)
+++ XIOS/trunk/src/transformation/domain_algorithm_transformation.cpp	(revision 657)
@@ -172,5 +172,5 @@
         for (int k = 1; k < globalDim; ++k)
         {
-          mulDim *= gridDestGlobalDim[k-1];
+          mulDim *= gridSrcGlobalDim[k-1];
           globIndex += (currentIndex[k])*mulDim;
         }
Index: XIOS/trunk/src/transformation/generic_algorithm_transformation.cpp
===================================================================
--- XIOS/trunk/src/transformation/generic_algorithm_transformation.cpp	(revision 656)
+++ XIOS/trunk/src/transformation/generic_algorithm_transformation.cpp	(revision 657)
@@ -52,5 +52,5 @@
                                                    globalIndexSrcGrid);
     size_t globalIndexSize = globalIndexDestGrid.numElements();
-    std::vector<double> currentVecWeight = itTransWeight->second;
+    const std::vector<double>& currentVecWeight = itTransWeight->second;
     for (size_t idx = 0; idx < globalIndexSize; ++idx)
     {
Index: XIOS/trunk/src/transformation/grid_transformation.cpp
===================================================================
--- XIOS/trunk/src/transformation/grid_transformation.cpp	(revision 656)
+++ XIOS/trunk/src/transformation/grid_transformation.cpp	(revision 657)
@@ -12,4 +12,5 @@
 #include "axis_algorithm_interpolate.hpp"
 #include "domain_algorithm_zoom.hpp"
+#include "domain_algorithm_interpolate_from_file.hpp"
 #include "context.hpp"
 #include "context_client.hpp"
@@ -277,7 +278,12 @@
 
   CZoomDomain* zoomDomain = 0;
+  CInterpolateFromFileDomain* interpFileDomain = 0;
   CGenericAlgorithmTransformation* algo = 0;
   switch (transType)
   {
+    case TRANS_INTERPOLATE_DOMAIN_FROM_FILE:
+      interpFileDomain = dynamic_cast<CInterpolateFromFileDomain*> (it->second);
+      algo = new CDomainAlgorithmInterpolateFromFile(domainListDestP[domainIndex], domainListSrcP[domainIndex],interpFileDomain);
+      break;
     case TRANS_ZOOM_DOMAIN:
       zoomDomain = dynamic_cast<CZoomDomain*> (it->second);
@@ -308,4 +314,5 @@
   switch (transType)
   {
+    case TRANS_INTERPOLATE_DOMAIN_FROM_FILE:
     case TRANS_ZOOM_DOMAIN:
       domainIndex = elementPosition2DomainPositionInGrid_[elementPositionInGrid];
Index: XIOS/trunk/src/type/type_util.hpp
===================================================================
--- XIOS/trunk/src/type/type_util.hpp	(revision 656)
+++ XIOS/trunk/src/type/type_util.hpp	(revision 657)
@@ -28,4 +28,5 @@
     class CZoomDomain;
     class CZoomDomainGroup;
+    class CInterpolateFromFileDomainGroup;
 
   template <typename T> inline string getStrType(void);
@@ -72,4 +73,6 @@
   macro(CZoomDomain)
   macro(CZoomDomainGroup)
+  macro(CInterpolateFromFileDomain)
+  macro(CInterpolateFromFileDomainGroup)
 #undef macro
 }
Index: XIOS/trunk/src/xml_parser_decl.cpp
===================================================================
--- XIOS/trunk/src/xml_parser_decl.cpp	(revision 656)
+++ XIOS/trunk/src/xml_parser_decl.cpp	(revision 657)
@@ -1,14 +1,5 @@
 #include "xml_parser_impl.hpp"
 #include "group_template.hpp"
-#include "context.hpp"
-#include "axis.hpp"
-#include "domain.hpp"
-#include "field.hpp"
-#include "file.hpp"
-#include "variable.hpp"
-#include "inverse_axis.hpp"
-#include "zoom_axis.hpp"
-#include "interpolate_axis.hpp"
-#include "zoom_domain.hpp"
+#include "node_type.hpp"
 
 namespace xios
@@ -32,4 +23,5 @@
     macro( InterpolateAxis )
     macro( ZoomDomain )
+    macro( InterpolateFromFileDomain )
   }
 }
