Index: /XIOS/trunk/src/node/axis.cpp
===================================================================
--- /XIOS/trunk/src/node/axis.cpp	(revision 593)
+++ /XIOS/trunk/src/node/axis.cpp	(revision 594)
@@ -17,4 +17,5 @@
       : CObjectTemplate<CAxis>()
       , CAxisAttributes(), isChecked(false), relFiles(), baseRefObject(), areClientAttributesChecked_(false)
+      , isDistributed_(false)
    { /* Ne rien faire de plus */ }
 
@@ -22,4 +23,5 @@
       : CObjectTemplate<CAxis>(id)
       , CAxisAttributes(), isChecked(false), relFiles(), baseRefObject(), areClientAttributesChecked_(false)
+      , isDistributed_(false)
    { /* Ne rien faire de plus */ }
 
@@ -37,4 +39,9 @@
    {
       return (this->relFiles.find(filename) != this->relFiles.end());
+   }
+
+   bool CAxis::isDistributed(void) const
+   {
+      return isDistributed_;
    }
 
@@ -58,4 +65,6 @@
                << "Attribute <size> of the axis [ id = '" << getId() << "' , context = '" << CObjectFactory::GetCurrentContextId() << "' ] must be specified");
       StdSize size = this->size.getValue();
+
+      isDistributed_ = !this->ibegin.isEmpty() || !this->ni.isEmpty();
 
       if (!this->ibegin.isEmpty())
Index: /XIOS/trunk/src/node/axis.hpp
===================================================================
--- /XIOS/trunk/src/node/axis.hpp	(revision 593)
+++ /XIOS/trunk/src/node/axis.hpp	(revision 594)
@@ -59,4 +59,5 @@
          /// Test ///
          bool IsWritten(const StdString & filename) const;
+         bool isDistributed(void) const;
 
          /// Mutateur ///
@@ -96,4 +97,5 @@
          bool areClientAttributesChecked_;
          std::set<StdString> relFiles;
+         bool isDistributed_;
 
          DECLARE_REF_FUNC(Axis,axis)
Index: /XIOS/trunk/src/node/distribution_client.cpp
===================================================================
--- /XIOS/trunk/src/node/distribution_client.cpp	(revision 593)
+++ /XIOS/trunk/src/node/distribution_client.cpp	(revision 594)
@@ -183,4 +183,5 @@
   idx = 0;
 
+  isDataDistributed_ = false;
   // Update all the vectors above
   while (idx < numElement_)
@@ -217,4 +218,7 @@
       dataNIndex_.at(idx) = domList[domIndex]->data_n_index.getValue();
       dataDims_.at(idx) = domList[domIndex]->data_dim.getValue();
+
+      isDataDistributed_ |= domList[domIndex]->isDistributed();
+
       ++domIndex;
     }
@@ -233,4 +237,7 @@
       dataNIndex_.at(idx) = axisList[axisIndex]->data_index.numElements();
       dataDims_.at(idx) = 1;
+
+      isDataDistributed_ |= axisList[axisIndex]->isDistributed();
+
       ++axisIndex;
     }
@@ -239,10 +246,4 @@
   readDomainIndex(domList);
   readAxisIndex(axisList);
-
-  // Grid has only one axis and it is not distributed
-  bool isDataNotDistributed = true;
-  for (int i = 0; i < this->dims_; ++i)
-    isDataNotDistributed &= (nLocal_[i] == nGlob_[i]);
-  isDataDistributed_ = !isDataNotDistributed;
 }
 
Index: /XIOS/trunk/src/node/domain.cpp
===================================================================
--- /XIOS/trunk/src/node/domain.cpp	(revision 593)
+++ /XIOS/trunk/src/node/domain.cpp	(revision 594)
@@ -24,4 +24,5 @@
       : CObjectTemplate<CDomain>(), CDomainAttributes()
       , isChecked(false), relFiles(), isClientChecked(false), nbConnectedClients_(), indSrv_(), connectedServerRank_()
+      , isDistributed_(false)
    { /* Ne rien faire de plus */ }
 
@@ -29,4 +30,5 @@
       : CObjectTemplate<CDomain>(id), CDomainAttributes()
       , isChecked(false), relFiles(), isClientChecked(false), nbConnectedClients_(), indSrv_(), connectedServerRank_()
+      , isDistributed_(false)
          { /* Ne rien faire de plus */ }
 
@@ -63,4 +65,11 @@
    {
       return (this->relFiles.find(filename) != this->relFiles.end());
+   }
+
+   //----------------------------------------------------------------
+
+   bool CDomain::isDistributed(void) const
+   {
+      return isDistributed_;
    }
 
@@ -123,21 +132,26 @@
                << " check the \'ni_glo\' et \'nj_glo\' values !")
       }
-      checkLocalIDomain() ;
-      checkLocalJDomain() ;
-
-     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 ;
-     }
-
-     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 ;
-     }
-
+
+      isDistributed_ = !ibegin.isEmpty() || !iend.isEmpty() || !ni.isEmpty() || !jbegin.isEmpty() || !jend.isEmpty() || !nj.isEmpty();
+
+      checkLocalIDomain();
+      checkLocalJDomain();
+
+      ibegin_client = ibegin; iend_client = iend; ni_client = ni;
+      jbegin_client = jbegin; jend_client = jend; nj_client = nj;
+
+      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;
+      }
+
+      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;
+      }
    }
 
@@ -147,36 +161,39 @@
    {
       if (!ni.isEmpty() && !ibegin.isEmpty() && iend.isEmpty())
-         iend.setValue(ibegin.getValue() + ni.getValue() - 1) ;
-
-      else if (!ni.isEmpty() && !iend.isEmpty()   && ibegin.isEmpty())
-         ibegin.setValue( - ni.getValue() + iend.getValue() + 1) ;
-
+        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::checkAttributes(void)",
-                 << "The domain si wrong defined,"
-                 << " iend is different of (ibegin + ni - 1) !") ;
+        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())
+      {
+        ibegin = 0;
+        iend = ni_glo - 1;
+        ni = ni_glo;
       }
       else
       {
-         ERROR("CDomain::checkAttributes(void)",
-               << "The domain is wrong defined,"
-               << " 2 value from \'iend\', \'ibegin\', \'ni\'  must be defined !") ;
-      }
-
+        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::checkAttributes(void)",
-               << "[ Id = " << this->getId() << " ] "
-               << "Local domain is wrong defined,"
-               << " Check the value : ni, ni_glo, ibegin, iend") ;
-        }
+          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'");
+      }
    }
 
@@ -186,34 +203,39 @@
    {
       if (!nj.isEmpty() && !jbegin.isEmpty() && jend.isEmpty())
-         jend.setValue(jbegin.getValue() + nj.getValue() - 1) ;
-
+        jend.setValue(jbegin.getValue() + nj.getValue() - 1);
       else if (!nj.isEmpty() && !jend.isEmpty() && jbegin.isEmpty())
-         jbegin.setValue( - nj.getValue() + jend.getValue() + 1) ;
-
+        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::checkAttributes(void)",
-                 << "The domain is wrong defined,"
-                 << " iend is different of (jbegin + nj - 1) !") ;
+        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
       {
-         ERROR("CDomain::checkAttributes(void)",
-               << "The domain is wrong defined,"
-               << " 2 values from  jend, jbegin, nj  must be defined !") ;
+        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::checkAttributes(void)",
-               << "Domain is wrong defined,"
-               << " Check the values : nj, nj_glo, jbegin, jend") ;
-
-     ibegin_client=ibegin ; iend_client=iend ; ni_client=ni ;
-     jbegin_client=jbegin ; jend_client=jend ; nj_client=nj ;
+          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'");
+      }
    }
 
@@ -497,5 +519,5 @@
             if (zoom_ibegin < 0  || zoom_jbegin < 0 || zoom_iend > (ni_glo-1) || zoom_jend > (nj_glo-1))
                ERROR("CDomain::checkZoom(void)",
-                     << "Zoom is wrong defined,"
+                     << "Zoom is wrongly defined,"
                      << " Check the values : zoom_ni, zoom_nj, zoom_ibegin, zoom_jbegin") ;
          }
Index: /XIOS/trunk/src/node/domain.hpp
===================================================================
--- /XIOS/trunk/src/node/domain.hpp	(revision 593)
+++ /XIOS/trunk/src/node/domain.hpp	(revision 594)
@@ -89,4 +89,5 @@
          bool hasZoom(void) const;
          bool isEmpty(void) const;
+         bool isDistributed(void) const;
 
 
@@ -157,4 +158,5 @@
          std::map<int, vector<size_t> > indSrv_; // Global index of each client sent to server
          std::vector<int> connectedServerRank_;
+         bool isDistributed_;
 
          DECLARE_REF_FUNC(Domain,domain)
