Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/context.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/context.cpp	(revision 1973)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/context.cpp	(revision 1974)
@@ -1243,62 +1243,4 @@
       for (unsigned int i = 0; i < this->enabledReadModeFiles.size(); ++i)
         (void)this->enabledReadModeFiles[i]->readAttributesOfEnabledFieldsInReadMode();
-   }
-   CATCH_DUMP_ATTR
-
-   void CContext::sendGridComponentEnabledFieldsInFiles(const std::vector<CFile*>& activeFiles)
-   TRY
-   {
-     int size = activeFiles.size();
-     for (int i = 0; i < size; ++i)
-     {       
-       activeFiles[i]->sendGridComponentOfEnabledFields();
-     }
-   }
-   CATCH_DUMP_ATTR
-
-   /*!
-      Send active (enabled) fields in file from a client to others
-      \param [in] activeFiles files contains enabled fields to send
-   */
-   void CContext::sendGridEnabledFieldsInFiles(const std::vector<CFile*>& activeFiles)
-   TRY
-   {
-     int size = activeFiles.size();
-     for (int i = 0; i < size; ++i)
-     {       
-       activeFiles[i]->sendGridOfEnabledFields();
-     }
-   }
-   CATCH_DUMP_ATTR
-
-   void CContext::checkGridEnabledFields()
-   TRY
-   {
-     int size = enabledFiles.size();
-     for (int i = 0; i < size; ++i)
-     {
-       enabledFiles[i]->checkGridOfEnabledFields();       
-     }
-
-     size = enabledCouplerOut.size();
-     for (int i = 0; i < size; ++i)
-     {
-       enabledCouplerOut[i]->checkGridOfEnabledFields();       
-     }
-   }
-   CATCH_DUMP_ATTR
-
-   /*!
-      Check grid of active (enabled) fields in file 
-      \param [in] activeFiles files contains enabled fields whose grid needs checking
-   */
-   void CContext::checkGridEnabledFieldsInFiles(const std::vector<CFile*>& activeFiles)
-   TRY
-   {
-     int size = activeFiles.size();
-     for (int i = 0; i < size; ++i)
-     {
-       activeFiles[i]->checkGridOfEnabledFields();       
-     }
    }
    CATCH_DUMP_ATTR
@@ -2157,40 +2099,5 @@
    CATCH_DUMP_ATTR
 
-   //! Client side: Send information of reference grid of active fields
-   void CContext::sendRefGrid(const std::vector<CFile*>& activeFiles)
-   TRY
-   {
-     std::set<pair<StdString,CContextClient*>> gridIds;
-
-     int sizeFile = activeFiles.size();
-     CFile* filePtr(NULL);
-
-     // Firstly, find all reference grids of all active fields
-     for (int i = 0; i < sizeFile; ++i)
-     {
-       filePtr = activeFiles[i];
-       std::vector<CField*> enabledFields = filePtr->getEnabledFields();
-       int sizeField = enabledFields.size();
-       for (int numField = 0; numField < sizeField; ++numField)
-       {
-         if (0 != enabledFields[numField]->getRelGrid())
-           gridIds.insert(make_pair(CGrid::get(enabledFields[numField]->getRelGrid())->getId(),enabledFields[numField]->getContextClient()));
-       }
-     }
-
-     // Create all reference grids on server side
-     StdString gridDefRoot("grid_definition");
-     CGridGroup* gridPtr = CGridGroup::get(gridDefRoot);
-     for (auto it = gridIds.begin(); it != gridIds.end(); ++it)
-     {
-       gridPtr->sendCreateChild(it->first,it->second);
-       CGrid::get(it->first)->sendAllAttributesToServer(it->second);
-       CGrid::get(it->first)->sendAllDomains(it->second);
-       CGrid::get(it->first)->sendAllAxis(it->second);
-       CGrid::get(it->first)->sendAllScalars(it->second);
-     }
-   }
-   CATCH_DUMP_ATTR
-
+  
    //! Client side: Send information of reference domain, axis and scalar of active fields
    void CContext::sendRefDomainsAxisScalars(const std::vector<CFile*>& activeFiles)
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/context.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/context.hpp	(revision 1973)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/context.hpp	(revision 1974)
@@ -149,9 +149,5 @@
          void triggerLateFields(void) ;
          void solveAllRefOfEnabledFieldsAndTransform(void);
-         void checkGridEnabledFields();
-         void checkGridEnabledFieldsInFiles(const std::vector<CFile*>& activeFiles);
-         void sendGridEnabledFieldsInFiles(const std::vector<CFile*>& activeFiles);  
-         void sendGridComponentEnabledFieldsInFiles(const std::vector<CFile*>& activeFiles)       ;
-
+ 
          std::map<int, StdSize> getAttributesBufferSize(std::map<int, StdSize>& maxEventSize, CContextClient* contextClient, bool bufferForWriting = false);
          std::map<int, StdSize> getDataBufferSize(std::map<int, StdSize>& maxEventSize, CContextClient* contextClient, bool bufferForWriting = false);
@@ -177,5 +173,4 @@
          void sendEnabledFieldsInFiles(const std::vector<CFile*>& activeFiles);
          void sendRefDomainsAxisScalars(const std::vector<CFile*>& activeFiles);
-         void sendRefGrid(const std::vector<CFile*>& activeFiles);
          //!< after be gathered to the root process of the context, merged registry is sent to the root process of the servers
          void sendRegistry(void) ;
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/domain.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/domain.cpp	(revision 1973)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/domain.cpp	(revision 1974)
@@ -37,10 +37,9 @@
    CDomain::CDomain(void)
       : CObjectTemplate<CDomain>(), CDomainAttributes()
-      , isChecked(false), relFiles(), isClientChecked(false), nbSenders(), indSrv_(), connectedServerRank_()
+      , isChecked(false), relFiles(),  indSrv_(), connectedServerRank_()
       , hasBounds(false), hasArea(false), isCompressible_(false), isUnstructed_(false)
-      , isClientAfterTransformationChecked(false), hasLonLat(false)
+      , hasLonLat(false)
       , isRedistributed_(false), hasPole(false)
       , lonvalue(), latvalue(), bounds_lonvalue(), bounds_latvalue()
-      , globalLocalIndexMap_(), computedWrittenIndex_(false)
       , clients(), hasLatInReadFile_(false), hasBoundsLatInReadFile_(false)
       , hasLonInReadFile_(false), hasBoundsLonInReadFile_(false)
@@ -50,10 +49,9 @@
    CDomain::CDomain(const StdString & id)
       : CObjectTemplate<CDomain>(id), CDomainAttributes()
-      , isChecked(false), relFiles(), isClientChecked(false), nbSenders(), indSrv_(), connectedServerRank_() 
+      , isChecked(false), relFiles(), indSrv_(), connectedServerRank_() 
       , hasBounds(false), hasArea(false), isCompressible_(false), isUnstructed_(false)
-      , isClientAfterTransformationChecked(false), hasLonLat(false)
+      , hasLonLat(false)
       , isRedistributed_(false), hasPole(false)
       , lonvalue(), latvalue(), bounds_lonvalue(), bounds_latvalue()
-      , globalLocalIndexMap_(), computedWrittenIndex_(false)
       , clients(), hasLatInReadFile_(false), hasBoundsLatInReadFile_(false)
       , hasLonInReadFile_(false), hasBoundsLonInReadFile_(false)
@@ -105,53 +103,5 @@
    CATCH
 
-   /*!
-     Returns the number of indexes written by each server.
-     \return the number of indexes written by each server
-   */
-   int CDomain::getNumberWrittenIndexes(MPI_Comm writtenCom)
-   TRY
-   {
-     int writtenSize;
-     MPI_Comm_size(writtenCom, &writtenSize);
-     return numberWrittenIndexes_[writtenSize];
-   }
-   CATCH_DUMP_ATTR
-
-   /*!
-     Returns the total number of indexes written by the servers.
-     \return the total number of indexes written by the servers
-   */
-   int CDomain::getTotalNumberWrittenIndexes(MPI_Comm writtenCom)
-   TRY
-   {
-     int writtenSize;
-     MPI_Comm_size(writtenCom, &writtenSize);
-     return totalNumberWrittenIndexes_[writtenSize];
-   }
-   CATCH_DUMP_ATTR
-
-   /*!
-     Returns the offset of indexes written by each server.
-     \return the offset of indexes written by each server
-   */
-   int CDomain::getOffsetWrittenIndexes(MPI_Comm writtenCom)
-   TRY
-   {
-     int writtenSize;
-     MPI_Comm_size(writtenCom, &writtenSize);
-     return offsetWrittenIndexes_[writtenSize];
-   }
-   CATCH_DUMP_ATTR
-
-   CArray<int, 1>& CDomain::getCompressedIndexToWriteOnServer(MPI_Comm writtenCom)
-   TRY
-   {
-     int writtenSize;
-     MPI_Comm_size(writtenCom, &writtenSize);
-     return compressedIndexToWriteOnServer[writtenSize];
-   }
-   CATCH_DUMP_ATTR
-
-   //----------------------------------------------------------------
+     //----------------------------------------------------------------
 
    /*!
@@ -1847,368 +1797,6 @@
 
 
-   //----------------------------------------------------------------
-   // Divide function checkAttributes into 2 seperate ones
-   // This function only checks all attributes of current domain
-   void CDomain::checkAttributesOnClient()
-   TRY
-   {
-     if (this->isClientChecked) return;
-     CContext* context=CContext::getCurrent();
-
-      if (context->getServiceType()==CServicesManager::CLIENT)
-      {
-        this->checkDomain();
-        this->checkBounds();
-        this->checkArea();
-        this->checkLonLat();
-      }
-
-      if (context->getServiceType()==CServicesManager::CLIENT)
-      { // Ct client uniquement
-         this->checkMask();
-         this->checkDomainData();
-         this->checkCompression();
-         this->computeLocalMask() ;
-      }
-      else
-      { // Ct serveur uniquement
-      }
-
-      this->isClientChecked = true;
-   }
-   CATCH_DUMP_ATTR
    
-   // ym obselete, to be removed
-   void CDomain::checkAttributesOnClientAfterTransformation()
-   TRY
-   {
-     CContext* context=CContext::getCurrent() ;
-
-     if (this->isClientAfterTransformationChecked) return;
-     if (context->getServiceType()==CServicesManager::CLIENT || context->getServiceType()==CServicesManager::GATHERER)
-     {
-       // this->computeConnectedClients();
-       if (hasLonLat)
-         if (context->getServiceType()==CServicesManager::CLIENT)
-           this->completeLonLatClient();
-     }
-
-     this->isClientAfterTransformationChecked = true;
-   }
-   CATCH_DUMP_ATTR
-
-      // Send all checked attributes to server
-   void CDomain::sendCheckedAttributes()
-   TRY
-   {
-     if (!this->isClientChecked) checkAttributesOnClient();
-     if (!this->isClientAfterTransformationChecked) checkAttributesOnClientAfterTransformation();
-     CContext* context=CContext::getCurrent() ;
-
-     if (this->isChecked) return;
-     if (context->getServiceType()==CServicesManager::CLIENT || context->getServiceType()==CServicesManager::GATHERER)
-     {
-       sendAttributes();
-     }
-     this->isChecked = true;
-   }
-   CATCH_DUMP_ATTR
-
-/* old version
-   void CDomain::checkAttributes(void)
-   TRY
-   {
-      if (this->isChecked) return;
-      CContext* context=CContext::getCurrent() ;
-
-      this->checkDomain();
-      this->checkLonLat();
-      this->checkBounds();
-      this->checkArea();
-
-      if (context->getServiceType()==CServicesManager::CLIENT || context->getServiceType()==CServicesManager::GATHERER)
-      { // Ct client uniquement
-         this->checkMask();
-         this->checkDomainData();
-         this->checkCompression();
-         this->computeLocalMask() ;
-
-      }
-      else
-      { // Ct serveur uniquement
-      }
-
-      if (context->getServiceType()==CServicesManager::CLIENT || context->getServiceType()==CServicesManager::GATHERER)
-      {
-        this->computeConnectedClients();
-        this->completeLonLatClient();
-      }
-
-      this->isChecked = true;
-   }
-   CATCH_DUMP_ATTR
-*/
-   
-  /*!
-     Compute the connection of a client to other clients to determine which clients to send attributes to.
-     The sending clients are supposed to already know the distribution of receiving clients (In simple cases, it's band)
-     The connection among clients is calculated by using global index. 
-     A client connects to other clients which holds the same global index as it.     
-  */
-  void CDomain::computeConnectedClients(CContextClient* client)
-  TRY
-  {
-    if (computeConnectedClients_done_.count(client)!=0) return ;
-    else computeConnectedClients_done_.insert(client) ;
-    
-    CContext* context=CContext::getCurrent() ;
-   
-    int nbServer = client->serverSize;
-    int nbClient = client->clientSize;
-    int rank     = client->clientRank;
-        
-    if (listNbServer_.count(nbServer) == 0)
-    {
-      listNbServer_.insert(nbServer) ;
- 
-      if (connectedServerRank_.find(nbServer) != connectedServerRank_.end())
-      {
-        nbSenders.erase(nbServer);
-        connectedServerRank_.erase(nbServer);
-      }
-
-      if (indSrv_.find(nbServer) == indSrv_.end())
-      {
-        int i,j,i_ind,j_ind, nbIndex=i_index.numElements();
-        int globalIndexCount = i_index.numElements();
-        // Fill in index
-        CArray<size_t,1> globalIndexDomain(nbIndex);
-        size_t globalIndex;
-
-        for (i = 0; i < nbIndex; ++i)
-        {
-          i_ind=i_index(i);
-          j_ind=j_index(i);
-          globalIndex = i_ind + j_ind * ni_glo;
-          globalIndexDomain(i) = globalIndex;
-        }
-
-        if (globalLocalIndexMap_.empty()) 
-          for (i = 0; i < nbIndex; ++i)  globalLocalIndexMap_[globalIndexDomain(i)] = i;
-          
-
-        size_t globalSizeIndex = 1, indexBegin, indexEnd;
-        int range, clientSize = client->clientSize;
-        std::vector<int> nGlobDomain(2);
-        nGlobDomain[0] = this->ni_glo;
-        nGlobDomain[1] = this->nj_glo;
-        for (int i = 0; i < nGlobDomain.size(); ++i) globalSizeIndex *= nGlobDomain[i];
-        indexBegin = 0;
-        if (globalSizeIndex <= clientSize)
-        {
-          indexBegin = rank%globalSizeIndex;
-          indexEnd = indexBegin;
-        }
-        else
-        {
-          for (int i = 0; i < clientSize; ++i)
-          {
-            range = globalSizeIndex / clientSize;
-            if (i < (globalSizeIndex%clientSize)) ++range;
-            if (i == client->clientRank) break;
-            indexBegin += range;
-          }
-          indexEnd = indexBegin + range - 1;
-        }
-
-        // Even if servers have no index, they must received something from client
-        // We only use several client to send "empty" message to these servers
-        CServerDistributionDescription serverDescription(nGlobDomain, nbServer);
-        std::vector<int> serverZeroIndex;
-        if (isUnstructed_) serverZeroIndex = serverDescription.computeServerGlobalIndexInRange(std::make_pair<size_t&,size_t&>(indexBegin, indexEnd), 0);
-        else serverZeroIndex = serverDescription.computeServerGlobalIndexInRange(std::make_pair<size_t&,size_t&>(indexBegin, indexEnd), 1);
-
-        std::list<int> serverZeroIndexLeader;
-        std::list<int> serverZeroIndexNotLeader;
-        CContextClient::computeLeader(client->clientRank, client->clientSize, serverZeroIndex.size(), serverZeroIndexLeader, serverZeroIndexNotLeader);
-        for (std::list<int>::iterator it = serverZeroIndexLeader.begin(); it != serverZeroIndexLeader.end(); ++it)
-          *it = serverZeroIndex[*it];
-
-        CClientServerMapping* clientServerMap = new CClientServerMappingDistributed(serverDescription.getGlobalIndexRange(), client->intraComm);
-        clientServerMap->computeServerIndexMapping(globalIndexDomain, nbServer);
-        CClientServerMapping::GlobalIndexMap& globalIndexDomainOnServer = clientServerMap->getGlobalIndexOnServer();
-
-        CClientServerMapping::GlobalIndexMap::const_iterator it  = globalIndexDomainOnServer.begin(), ite = globalIndexDomainOnServer.end();
-        indSrv_[nbServer].swap(globalIndexDomainOnServer);
-        connectedServerRank_[nbServer].clear();
-        for (it = indSrv_[nbServer].begin(); it != ite; ++it) connectedServerRank_[nbServer].push_back(it->first);
-
-        for (std::list<int>::const_iterator it = serverZeroIndexLeader.begin(); it != serverZeroIndexLeader.end(); ++it)
-          connectedServerRank_[nbServer].push_back(*it);
-
-        // Even if a client has no index, it must connect to at least one server and
-        // send an "empty" data to this server
-        if (connectedServerRank_[nbServer].empty())
-          connectedServerRank_[nbServer].push_back(client->clientRank % client->serverSize);
-
-        // Now check if all servers have data to receive. If not, master client will send empty data.
-        // This ensures that all servers will participate in collective calls upon receiving even if they have no date to receive.
-        std::vector<int> counts (clientSize);
-        std::vector<int> displs (clientSize);
-        displs[0] = 0;
-        int localCount = connectedServerRank_[nbServer].size() ;
-        MPI_Gather(&localCount, 1, MPI_INT, &counts[0], 1, MPI_INT, 0, client->intraComm) ;
-        for (int i = 0; i < clientSize-1; ++i) displs[i+1] = displs[i] + counts[i];
-        std::vector<int> allConnectedServers(displs[clientSize-1]+counts[clientSize-1]);
-        MPI_Gatherv(&(connectedServerRank_[nbServer])[0], localCount, MPI_INT, &allConnectedServers[0], &counts[0], &displs[0], MPI_INT, 0, client->intraComm);
-
-        if ((allConnectedServers.size() != nbServer) && (rank == 0))
-        {
-          std::vector<bool> isSrvConnected (nbServer, false);
-          for (int i = 0; i < allConnectedServers.size(); ++i) isSrvConnected[allConnectedServers[i]] = true;
-          for (int i = 0; i < nbServer; ++i) if (!isSrvConnected[i]) connectedServerRank_[nbServer].push_back(i);
-        }
-        nbSenders[nbServer] = clientServerMap->computeConnectedClients(client->serverSize, client->clientSize, client->intraComm, connectedServerRank_[nbServer]);
-        delete clientServerMap;
-      }
-    }
-  }
-  CATCH_DUMP_ATTR
-
-   /*!
-     Compute index to write data. We only write data on the zoomed region, therefore, there should
-     be a map between the complete grid and the reduced grid where we write data.
-     By using global index we can easily create this kind of mapping.
-   */
-   void CDomain::computeWrittenIndex()
-   TRY
-   {  
-      if (computedWrittenIndex_) return;
-      computedWrittenIndex_ = true;
-
-      CContext* context=CContext::getCurrent();      
-
-      std::vector<int> nBegin(2), nSize(2), nBeginGlobal(2), nGlob(2);
-      nBegin[0]       = ibegin;  nBegin[1] = jbegin;
-      nSize[0]        = ni;      nSize[1]  = nj;
-      nBeginGlobal[0] = 0; nBeginGlobal[1] = 0;
-      nGlob[0]        = ni_glo;   nGlob[1] = nj_glo;
-      CDistributionServer srvDist(context->intraCommSize_, nBegin, nSize, nBeginGlobal, nGlob); 
-      const CArray<size_t,1>& writtenGlobalIndex  = srvDist.getGlobalIndex();
-
-      size_t nbWritten = 0, indGlo;      
-      std::unordered_map<size_t,size_t>::const_iterator itb = globalLocalIndexMap_.begin(),
-                                                          ite = globalLocalIndexMap_.end(), it;          
-      CArray<size_t,1>::const_iterator itSrvb = writtenGlobalIndex.begin(),
-                                       itSrve = writtenGlobalIndex.end(), itSrv;
-
-      localIndexToWriteOnServer.resize(writtenGlobalIndex.numElements());
-      nbWritten = 0;
-      for (itSrv = itSrvb; itSrv != itSrve; ++itSrv)
-      {
-        indGlo = *itSrv;
-        if (ite != globalLocalIndexMap_.find(indGlo))
-        {
-          localIndexToWriteOnServer(nbWritten) = globalLocalIndexMap_[indGlo];
-        }
-        else
-        {
-          localIndexToWriteOnServer(nbWritten) = -1;
-        }
-        ++nbWritten;
-      }
-   }
-   CATCH_DUMP_ATTR
-
-  void CDomain::computeWrittenCompressedIndex(MPI_Comm writtenComm)
-  TRY
-  {
-    int writtenCommSize;
-    MPI_Comm_size(writtenComm, &writtenCommSize);
-    if (compressedIndexToWriteOnServer.find(writtenCommSize) != compressedIndexToWriteOnServer.end())
-      return;
-
-    if (isCompressible())
-    {
-      size_t nbWritten = 0, indGlo;
-      CContext* context=CContext::getCurrent();      
-
-      std::vector<int> nBegin(2), nSize(2), nBeginGlobal(2), nGlob(2);
-      nBegin[0]       = ibegin;  nBegin[1] = jbegin;
-      nSize[0]        = ni;      nSize[1]  = nj;
-      nBeginGlobal[0] = 0; nBeginGlobal[1] = 0;
-      nGlob[0]        = ni_glo;   nGlob[1] = nj_glo;
-      CDistributionServer srvDist(context->intraCommSize_, nBegin, nSize, nBeginGlobal, nGlob); 
-      const CArray<size_t,1>& writtenGlobalIndex  = srvDist.getGlobalIndex();
-
-      std::unordered_map<size_t,size_t>::const_iterator itb = globalLocalIndexMap_.begin(),
-                                                          ite = globalLocalIndexMap_.end(), it;   
-      CArray<size_t,1>::const_iterator itSrvb = writtenGlobalIndex.begin(),
-                                       itSrve = writtenGlobalIndex.end(), itSrv;
-      std::unordered_map<size_t,size_t> localGlobalIndexMap;
-      for (itSrv = itSrvb; itSrv != itSrve; ++itSrv)
-      {
-        indGlo = *itSrv;
-        if (ite != globalLocalIndexMap_.find(indGlo))
-        {
-          localGlobalIndexMap[localIndexToWriteOnServer(nbWritten)] = indGlo;
-          ++nbWritten;
-        }                 
-      }
-
-      nbWritten = 0;
-      for (int idx = 0; idx < data_i_index.numElements(); ++idx)
-      {
-        if (localGlobalIndexMap.end() != localGlobalIndexMap.find(data_i_index(idx)))
-        {
-          ++nbWritten;
-        }
-      }
-
-      compressedIndexToWriteOnServer[writtenCommSize].resize(nbWritten);
-      nbWritten = 0;
-      for (int idx = 0; idx < data_i_index.numElements(); ++idx)
-      {
-        if (localGlobalIndexMap.end() != localGlobalIndexMap.find(data_i_index(idx)))
-        {
-          compressedIndexToWriteOnServer[writtenCommSize](nbWritten) = localGlobalIndexMap[data_i_index(idx)];
-          ++nbWritten;
-        }
-      }
-
-      numberWrittenIndexes_[writtenCommSize] = nbWritten;
-      bool distributed_glo, distributed=isDistributed() ;
-      MPI_Allreduce(&distributed,&distributed_glo, 1, MPI_INT, MPI_LOR, writtenComm) ;
-      
-      if (distributed_glo)
-      {
-             
-        MPI_Allreduce(&numberWrittenIndexes_[writtenCommSize], &totalNumberWrittenIndexes_[writtenCommSize], 1, MPI_INT, MPI_SUM, writtenComm);
-        MPI_Scan(&numberWrittenIndexes_[writtenCommSize], &offsetWrittenIndexes_[writtenCommSize], 1, MPI_INT, MPI_SUM, writtenComm);
-        offsetWrittenIndexes_[writtenCommSize] -= numberWrittenIndexes_[writtenCommSize];
-      }
-      else
-        totalNumberWrittenIndexes_[writtenCommSize] = numberWrittenIndexes_[writtenCommSize];
-      }
-  }
-  CATCH_DUMP_ATTR
-
-  void CDomain::sendDomainToFileServer(CContextClient* client)
-  {
-    if (sendDomainToFileServer_done_.count(client)!=0) return ;
-    else sendDomainToFileServer_done_.insert(client) ;
-
-    StdString domDefRoot("domain_definition");
-    CDomainGroup* domPtr = CDomainGroup::get(domDefRoot);
-    domPtr->sendCreateChild(this->getId(), client);
-    this->sendAllAttributesToServer(client)  ;
-    this->sendDistributionAttributes(client);   
-    //this->sendIndex(client);       
-    //this->sendLonLat(client);
-    //this->sendArea(client);    
-    //this->sendDataIndex(client);
-
-  }
-
+  /* to be removed later when coupling will be reimplemented, just to  not forget */
   void CDomain::sendDomainToCouplerOut(CContextClient* client, const string& fieldId, int posInGrid)
   {
@@ -2226,11 +1814,8 @@
     }
     else this->sendAllAttributesToServer(client, domainId)  ;
-
-    this->sendDistributionAttributes(client, domainId);   
-    this->sendIndex(client, domainId);       
-    this->sendLonLat(client, domainId);
-    this->sendArea(client, domainId);    
-    this->sendDataIndex(client, domainId);
   }
+
+
+
 
   void CDomain::makeAliasForCoupling(const string& fieldId, int posInGrid)
@@ -2534,404 +2119,5 @@
   }
   CATCH
-
-  void CDomain::sendDomainDistribution(CContextClient* client, const string& domainId)
-  TRY
-  {
-    string serverDomainId = domainId.empty() ? this->getId() : domainId ;
-    CContext* context = CContext::getCurrent();
-    int nbServer = client->serverSize;
-    std::vector<int> nGlobDomain(2);
-    nGlobDomain[0] = this->ni_glo;
-    nGlobDomain[1] = this->nj_glo;
-
-    CServerDistributionDescription serverDescription(nGlobDomain, nbServer);
-    int distributedPosition ;
-    if (isUnstructed_) distributedPosition = 0 ;
-    else distributedPosition = 1 ;
-
-    serverDescription.computeServerDistribution(false, distributedPosition);
     
-    std::vector<std::vector<int> > serverIndexBegin = serverDescription.getServerIndexBegin();
-    std::vector<std::vector<int> > serverDimensionSizes = serverDescription.getServerDimensionSizes();
- 
-    vector<unordered_map<size_t,vector<int>>> indexServerOnElement ;
-    CArray<int,1> axisDomainOrder(1) ; axisDomainOrder(0)=2 ;
-    auto zeroIndex=serverDescription.computeServerGlobalByElement(indexServerOnElement, context->getIntraCommRank(), context->getIntraCommSize(),
-                                                                  axisDomainOrder,distributedPosition) ;
-    // distribution is very bad => to redo
-    // convert indexServerOnElement => map<int,CArray<size_t,1>> - need to be changed later
-    map<int, vector<size_t>> vectGlobalIndex ;
-    for(auto& indexRanks : indexServerOnElement[0])
-    {
-      size_t index=indexRanks.first ;
-      auto& ranks=indexRanks.second ;
-      for(int rank : ranks) vectGlobalIndex[rank].push_back(index) ;
-    }
-    map<int, CArray<size_t,1>> globalIndex ;
-    for(auto& vect : vectGlobalIndex ) globalIndex.emplace(vect.first, CArray<size_t,1>(vect.second.data(), shape(vect.second.size()))) ; 
-
-    CDistributedElement remoteElement(ni_glo*nj_glo, globalIndex) ;
-    remoteElement.addFullView() ;
-
-    CRemoteConnector remoteConnector(localElement_->getView(CElementView::FULL), remoteElement.getView(CElementView::FULL),context->getIntraComm()) ;
-    remoteConnector.computeConnector() ;
-    CDistributedElement scatteredElement(remoteElement.getGlobalSize(), remoteConnector.getDistributedGlobalIndex()) ;
-    scatteredElement.addFullView() ;
-    CScattererConnector scatterConnector(localElement_->getView(CElementView::FULL), scatteredElement.getView(CElementView::FULL), 
-                                         context->getIntraComm(), client->getRemoteSize()) ;
-    scatterConnector.computeConnector() ;
-    CGridScattererConnector gridScatter({&scatterConnector}) ;
-
-    CEventClient event0(getType(), EVENT_ID_DOMAIN_DISTRIBUTION);
-    CMessage message0 ;
-    message0<<serverDomainId<<0 ; 
-    remoteElement.sendToServer(client,event0,message0) ;
-
-    CEventClient event1(getType(), EVENT_ID_DOMAIN_DISTRIBUTION);
-    CMessage message1 ;
-    message1<<serverDomainId<<1<<localElement_->getView(CElementView::FULL)->getGlobalSize() ; 
-    scatterConnector.transfer(localElement_->getView(CElementView::FULL)->getGlobalIndex(),client,event1,message1) ;
-    
-    CEventClient event2(getType(), EVENT_ID_DOMAIN_DISTRIBUTION);
-    CMessage message2 ;
-    message2<<serverDomainId<<2 ; 
-//    scatterConnector.transfer(localElement_->getView(CElementView::FULL)->getGlobalIndex(),client,event2,message2) ;
-    scatterConnector.transfer(localElement_->getView(CElementView::FULL)->getGlobalIndex(),client,event2,message2) ;
-
-/*
-    localElement_->getView(CElementView::FULL)->sendRemoteElement(remoteConnector, client, event1, message1) ;
-    CEventClient event2(getType(), EVENT_ID_DOMAIN_DISTRIBUTION);
-    CMessage message2 ;
-    message2<<serverDomainId<<2 ; 
-    remoteConnector.transferToServer(localElement_->getView(CElementView::FULL)->getGlobalIndex(),client,event2,message2) ;
-*/
-
-  }
-  CATCH
-  
-
- 
-  
-
-  /*!
-    Send all attributes from client to connected clients
-    The attributes will be rebuilt on receiving side
-  */
-  // ym obsolete to be removed
-  void CDomain::sendAttributes()
-  TRY
-  {
-    //sendDistributionAttributes();
-    //sendIndex();       
-    //sendLonLat();
-    //sendArea();    
-    //sendDataIndex();
-  }
-  CATCH
-  /*!
-    Send global index from client to connected client(s)
-  */
-  void CDomain::sendIndex(CContextClient* client, const string& domainId)
-  TRY
-  {
-    string serverDomainId = domainId.empty() ? this->getId() : domainId ;
-    
-    int ns, n, i, j, ind, nv, idx;
-    int serverSize = client->serverSize;
-    CEventClient eventIndex(getType(), EVENT_ID_INDEX);
-
-    list<CMessage> list_msgsIndex;
-    list<CArray<int,1> > list_indGlob;
-
-    std::unordered_map<int, vector<size_t> >::const_iterator itIndex, iteIndex;
-    iteIndex = indSrv_[serverSize].end();
-    for (int k = 0; k < connectedServerRank_[serverSize].size(); ++k)
-    {
-      int nbIndGlob = 0;
-      int rank = connectedServerRank_[serverSize][k];
-      itIndex = indSrv_[serverSize].find(rank);
-      if (iteIndex != itIndex)
-        nbIndGlob = itIndex->second.size();
-
-      list_indGlob.push_back(CArray<int,1>(nbIndGlob));        
-
-      CArray<int,1>& indGlob = list_indGlob.back();
-      for (n = 0; n < nbIndGlob; ++n) indGlob(n) = static_cast<int>(itIndex->second[n]);
-
-      list_msgsIndex.push_back(CMessage());
-      list_msgsIndex.back() << serverDomainId << (int)type; // enum ne fonctionne pour les message => ToFix
-      list_msgsIndex.back() << isCurvilinear;
-      list_msgsIndex.back() << list_indGlob.back(); //list_indi.back() << list_indj.back();
-       
-      eventIndex.push(rank, nbSenders[serverSize][rank], list_msgsIndex.back());
-    }
-    client->sendEvent(eventIndex);
-  }
-  CATCH_DUMP_ATTR
-
-  /*!
-    Send distribution from client to other clients
-    Because a client in a level knows correctly the grid distribution of client on the next level
-    it calculates this distribution then sends it to the corresponding clients on the next level
-  */
-  void CDomain::sendDistributionAttributes(CContextClient* client, const string& domainId)
-  TRY
-  {
-    string serverDomainId = domainId.empty() ? this->getId() : domainId ;
-
-    int nbServer = client->serverSize;
-    std::vector<int> nGlobDomain(2);
-    nGlobDomain[0] = this->ni_glo;
-    nGlobDomain[1] = this->nj_glo;
-
-    CServerDistributionDescription serverDescription(nGlobDomain, nbServer);
-    if (isUnstructed_) serverDescription.computeServerDistribution(false, 0);
-    else serverDescription.computeServerDistribution(false, 1);
-
-    std::vector<std::vector<int> > serverIndexBegin = serverDescription.getServerIndexBegin();
-    std::vector<std::vector<int> > serverDimensionSizes = serverDescription.getServerDimensionSizes();
-
-    CEventClient event(getType(),EVENT_ID_SERVER_ATTRIBUT);
-    if (client->isServerLeader())
-    {
-      std::list<CMessage> msgs;
-
-      const std::list<int>& ranks = client->getRanksServerLeader();
-      for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank)
-      {
-        // Use const int to ensure CMessage holds a copy of the value instead of just a reference
-        const int ibegin_srv = serverIndexBegin[*itRank][0];
-        const int jbegin_srv = serverIndexBegin[*itRank][1];
-        const int ni_srv = serverDimensionSizes[*itRank][0];
-        const int nj_srv = serverDimensionSizes[*itRank][1];
-
-        msgs.push_back(CMessage());
-        CMessage& msg = msgs.back();
-        msg << serverDomainId ;
-        msg << isUnstructed_;
-        msg << ni_srv << ibegin_srv << nj_srv << jbegin_srv;
-        msg << ni_glo.getValue() << nj_glo.getValue();
-        msg << isCompressible_;
-
-        event.push(*itRank,1,msg);
-      }
-      client->sendEvent(event);
-    }
-    else client->sendEvent(event);
-  }
-  CATCH_DUMP_ATTR
-
-  /*!
-    Send area from client to connected client(s)
-  */
-  void CDomain::sendArea(CContextClient* client, const string& domainId)
-  TRY
-  {
-    if (!hasArea) return;
-    string serverDomainId = domainId.empty() ? this->getId() : domainId ;
-    
-    int ns, n, i, j, ind, nv, idx;
-    int serverSize = client->serverSize;
-
-    // send area for each connected server
-    CEventClient eventArea(getType(), EVENT_ID_AREA);
-
-    list<CMessage> list_msgsArea;
-    list<CArray<double,1> > list_area;
-
-    std::unordered_map<int, vector<size_t> >::const_iterator it, iteMap;
-    iteMap = indSrv_[serverSize].end();
-    for (int k = 0; k < connectedServerRank_[serverSize].size(); ++k)
-    {
-      int nbData = 0;
-      int rank = connectedServerRank_[serverSize][k];
-      it = indSrv_[serverSize].find(rank);
-      if (iteMap != it)
-        nbData = it->second.size();
-      list_area.push_back(CArray<double,1>(nbData));
-
-      const std::vector<size_t>& temp = it->second;
-      for (n = 0; n < nbData; ++n)
-      {
-        idx = static_cast<int>(it->second[n]);
-        list_area.back()(n) = areavalue(globalLocalIndexMap_[idx]);
-      }
-
-      list_msgsArea.push_back(CMessage());
-      list_msgsArea.back() <<serverDomainId << hasArea;
-      list_msgsArea.back() << list_area.back();
-      eventArea.push(rank, nbSenders[serverSize][rank], list_msgsArea.back());
-    }
-    client->sendEvent(eventArea);
-  }
-  CATCH_DUMP_ATTR
-
-  /*!
-    Send longitude and latitude from client to servers
-    Each client send long and lat information to corresponding connected clients(s).
-    Because longitude and latitude are optional, this function only called if latitude and longitude exist
-  */
-  void CDomain::sendLonLat(CContextClient* client, const string& domainId)
-  TRY
-  {
-    if (!hasLonLat) return;
-    string serverDomainId = domainId.empty() ? this->getId() : domainId ;
-    
-    int ns, n, i, j, ind, nv, idx;
-    int serverSize = client->serverSize;
-
-    // send lon lat for each connected server
-    CEventClient eventLon(getType(), EVENT_ID_LON);
-    CEventClient eventLat(getType(), EVENT_ID_LAT);
-
-    list<CMessage> list_msgsLon, list_msgsLat;
-    list<CArray<double,1> > list_lon, list_lat;
-    list<CArray<double,2> > list_boundslon, list_boundslat;
-
-    std::unordered_map<int, vector<size_t> >::const_iterator it, iteMap;
-    iteMap = indSrv_[serverSize].end();
-    for (int k = 0; k < connectedServerRank_[serverSize].size(); ++k)
-    {
-      int nbData = 0;
-      int rank = connectedServerRank_[serverSize][k];
-      it = indSrv_[serverSize].find(rank);
-      if (iteMap != it)
-        nbData = it->second.size();
-
-      list_lon.push_back(CArray<double,1>(nbData));
-      list_lat.push_back(CArray<double,1>(nbData));
-
-      if (hasBounds)
-      {
-        list_boundslon.push_back(CArray<double,2>(nvertex, nbData));
-        list_boundslat.push_back(CArray<double,2>(nvertex, nbData));
-      }
-
-      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]);
-        int localInd = globalLocalIndexMap_[idx];
-        lon(n) = lonvalue(localInd);
-        lat(n) = latvalue(localInd);
-
-        if (hasBounds)
-        {
-          CArray<double,2>& boundslon = list_boundslon.back();
-          CArray<double,2>& boundslat = list_boundslat.back();
-
-          for (nv = 0; nv < nvertex; ++nv)
-          {
-            boundslon(nv, n) = bounds_lonvalue(nv, localInd);
-            boundslat(nv, n) = bounds_latvalue(nv, localInd);
-          }
-        }
-      }
-
-      list_msgsLon.push_back(CMessage());
-      list_msgsLat.push_back(CMessage());
-
-      list_msgsLon.back() << serverDomainId << hasLonLat;
-      if (hasLonLat) 
-        list_msgsLon.back() << list_lon.back();
-      list_msgsLon.back()  << hasBounds;
-      if (hasBounds)
-      {
-        list_msgsLon.back() << list_boundslon.back();
-      }
-
-      list_msgsLat.back() << serverDomainId << hasLonLat;
-      if (hasLonLat)
-        list_msgsLat.back() << list_lat.back();
-      list_msgsLat.back() << hasBounds;
-      if (hasBounds)
-      {          
-        list_msgsLat.back() << list_boundslat.back();
-      }
-
-      eventLon.push(rank, nbSenders[serverSize][rank], list_msgsLon.back());
-      eventLat.push(rank, nbSenders[serverSize][rank], list_msgsLat.back());
-    }
-    client->sendEvent(eventLon);
-    client->sendEvent(eventLat);
-  }
-  CATCH_DUMP_ATTR
-
-  /*!
-    Send data index to corresponding connected clients.
-    Data index can be compressed however, we always send decompressed data index
-    and they will be compressed on receiving.
-    The compressed index are represented with 1 and others are represented with -1
-  */
-  void CDomain::sendDataIndex(CContextClient* client, const string& domainId)
-  TRY
-  {
-    string serverDomainId = domainId.empty() ? this->getId() : domainId ;
-    
-    int ns, n, i, j, ind, nv, idx;
-    int serverSize = client->serverSize;
-
-    // send area for each connected server
-    CEventClient eventDataIndex(getType(), EVENT_ID_DATA_INDEX);
-
-    list<CMessage> list_msgsDataIndex;
-    list<CArray<int,1> > list_data_i_index, list_data_j_index;
-
-    int nbIndex = i_index.numElements();
-    int niByIndex = max(i_index) - min(i_index) + 1;
-    int njByIndex = max(j_index) - min(j_index) + 1; 
-    int dataIindexBound = (1 == data_dim) ? (niByIndex * njByIndex) : niByIndex;
-    int dataJindexBound = (1 == data_dim) ? (niByIndex * njByIndex) : njByIndex;
-
-    
-    CArray<int,1> dataIIndex(nbIndex), dataJIndex(nbIndex);
-    dataIIndex = -1; 
-    dataJIndex = -1;
-    ind = 0;
-
-    for (idx = 0; idx < data_i_index.numElements(); ++idx)
-    {
-      int dataIidx = data_i_index(idx) + data_ibegin;
-      int dataJidx = data_j_index(idx) + data_jbegin;
-      if ((0 <= dataIidx) && (dataIidx < dataIindexBound) &&
-          (0 <= dataJidx) && (dataJidx < dataJindexBound))
-      {
-        dataIIndex((1 == data_dim) ? dataIidx : dataJidx * ni + dataIidx) = 1; //i_index(dataIidx);//dataIidx;
-        dataJIndex((1 == data_dim) ? dataIidx : dataJidx * ni + dataIidx) = 1; //j_index(dataJidx);//          
-      }
-    }
-
-    std::unordered_map<int, vector<size_t> >::const_iterator it, iteMap;
-    iteMap = indSrv_[serverSize].end();
-    for (int k = 0; k < connectedServerRank_[serverSize].size(); ++k)
-    {
-      int nbData = 0;
-      int rank = connectedServerRank_[serverSize][k];
-      it = indSrv_[serverSize].find(rank);
-      if (iteMap != it)
-        nbData = it->second.size();
-      list_data_i_index.push_back(CArray<int,1>(nbData));
-      list_data_j_index.push_back(CArray<int,1>(nbData));
-
-      const std::vector<size_t>& temp = it->second;
-      for (n = 0; n < nbData; ++n)
-      {
-        idx = static_cast<int>(it->second[n]);
-        i = globalLocalIndexMap_[idx];
-        list_data_i_index.back()(n) = dataIIndex(i);
-        list_data_j_index.back()(n) = dataJIndex(i);
-      }
-
-      list_msgsDataIndex.push_back(CMessage());
-      list_msgsDataIndex.back() << serverDomainId ;
-      list_msgsDataIndex.back() << list_data_i_index.back() << list_data_j_index.back();
-      eventDataIndex.push(rank, nbSenders[serverSize][rank], list_msgsDataIndex.back());
-    }
-    client->sendEvent(eventDataIndex);
-  }
-  CATCH
-  
   bool CDomain::dispatchEvent(CEventServer& event)
   TRY
@@ -2942,28 +2128,4 @@
       switch(event.type)
       {
-        case EVENT_ID_SERVER_ATTRIBUT:
-          recvDistributionAttributes(event);
-          return true;
-          break;
-        case EVENT_ID_INDEX:
-          recvIndex(event);
-          return true;
-          break;
-        case EVENT_ID_LON:
-          recvLon(event);
-          return true;
-          break;
-        case EVENT_ID_LAT:
-          recvLat(event);
-          return true;
-          break;
-        case EVENT_ID_AREA:
-          recvArea(event);
-          return true;
-          break;  
-        case EVENT_ID_DATA_INDEX:
-          recvDataIndex(event);
-          return true;
-          break;
         case EVENT_ID_DOMAIN_DISTRIBUTION:
           recvDomainDistribution(event);
@@ -2983,467 +2145,5 @@
   CATCH
 
-  /*!
-    Receive index event from clients(s)
-    \param[in] event event contain info about rank and associated index
-  */
-  void CDomain::recvIndex(CEventServer& event)
-  TRY
-  {
-    string domainId;
-    std::map<int, CBufferIn*> rankBuffers;
-
-    list<CEventServer::SSubEvent>::iterator it;
-    for (it = event.subEvents.begin(); it != event.subEvents.end(); ++it)
-    {      
-      CBufferIn* buffer = it->buffer;
-      *buffer >> domainId;
-      rankBuffers[it->rank] = buffer;        
-    }
-    get(domainId)->recvIndex(rankBuffers);
-  }
-  CATCH
-
-  /*!
-    Receive index information from client(s). We use the global index for mapping index between
-    sending clients and receiving clients.
-    \param[in] rankBuffers rank of sending client and the corresponding receive buffer  
-  */
-  void CDomain::recvIndex(std::map<int, CBufferIn*>& rankBuffers)
-  TRY
-  {
-    int nbReceived = rankBuffers.size(), i, ind, index, type_int, iIndex, jIndex;
-    recvClientRanks_.resize(nbReceived);        
-
-    std::map<int, CBufferIn*>::iterator it = rankBuffers.begin(), ite = rankBuffers.end();
-    ind = 0;
-    for (ind = 0; it != ite; ++it, ++ind)
-    {       
-       recvClientRanks_[ind] = it->first;
-       CBufferIn& buffer = *(it->second);
-       buffer >> type_int >> isCurvilinear >> indGlob_[it->first]; 
-       type.setValue((type_attr::t_enum)type_int); // probleme des type enum avec les buffers : ToFix
-    }
-    int nbIndGlob = 0;
-    for (i = 0; i < nbReceived; ++i)
-    {
-      nbIndGlob += indGlob_[recvClientRanks_[i]].numElements();
-    }
-    
-    globalLocalIndexMap_.rehash(std::ceil(nbIndGlob/globalLocalIndexMap_.max_load_factor()));
-    i_index.resize(nbIndGlob);
-    j_index.resize(nbIndGlob);   
-    int nbIndexGlobMax = nbIndGlob, nbIndLoc;
-
-    nbIndGlob = 0;
-    for (i = 0; i < nbReceived; ++i)
-    {
-      CArray<int,1>& tmp = indGlob_[recvClientRanks_[i]];
-      for (ind = 0; ind < tmp.numElements(); ++ind)
-      {
-         index = tmp(ind);
-         if (0 == globalLocalIndexMap_.count(index))
-         {
-           iIndex = (index%ni_glo)-ibegin;
-           iIndex = (iIndex < 0) ? 0 : iIndex;
-           jIndex = (index/ni_glo)-jbegin;
-           jIndex = (jIndex < 0) ? 0 : jIndex;
-           nbIndLoc = iIndex + ni * jIndex;
-           i_index(nbIndGlob) = index % ni_glo;
-           j_index(nbIndGlob) = index / ni_glo;
-           globalLocalIndexMap_[index] = nbIndGlob;
-           ++nbIndGlob;
-         } 
-      } 
-    } 
-
-    if (nbIndGlob==0)
-    {
-      i_index.resize(nbIndGlob);
-      j_index.resize(nbIndGlob);
-    }
-    else
-    {
-      i_index.resizeAndPreserve(nbIndGlob);
-      j_index.resizeAndPreserve(nbIndGlob);
-    }
-
-    domainMask.resize(0); // Mask is not defined anymore on servers
-  }
-  CATCH
-
-  /*!
-    Receive attributes event from clients(s)
-    \param[in] event event contain info about rank and associated attributes
-  */
-  void CDomain::recvDistributionAttributes(CEventServer& event)
-  TRY
-  {
-    CBufferIn* buffer=event.subEvents.begin()->buffer;
-    string domainId ;
-    *buffer>>domainId ;
-    get(domainId)->recvDistributionAttributes(*buffer);
-  }
-  CATCH
-
-  /*!
-    Receive attributes from client(s)
-    \param[in] rank rank of client source
-    \param[in] buffer message containing attributes info
-  */
-  void CDomain::recvDistributionAttributes(CBufferIn& buffer)
-  TRY
-  {
-    int ni_tmp, ibegin_tmp, nj_tmp, jbegin_tmp;
-    int ni_glo_tmp, nj_glo_tmp;
-    buffer >> isUnstructed_ >> ni_tmp >> ibegin_tmp >> nj_tmp >> jbegin_tmp
-           >> ni_glo_tmp >> nj_glo_tmp
-           >> isCompressible_;
-
-    ni.setValue(ni_tmp);
-    ibegin.setValue(ibegin_tmp);
-    nj.setValue(nj_tmp);
-    jbegin.setValue(jbegin_tmp);
-    ni_glo.setValue(ni_glo_tmp);
-    nj_glo.setValue(nj_glo_tmp);
-
-  }
- CATCH_DUMP_ATTR
-  /*!
-    Receive longitude event from clients(s)
-    \param[in] event event contain info about rank and associated longitude
-  */
-  void CDomain::recvLon(CEventServer& event)
-  TRY
-  {
-    string domainId;
-    std::map<int, CBufferIn*> rankBuffers;
-
-    list<CEventServer::SSubEvent>::iterator it;
-    for (it = event.subEvents.begin(); it != event.subEvents.end(); ++it)
-    {      
-      CBufferIn* buffer = it->buffer;
-      *buffer >> domainId;
-      rankBuffers[it->rank] = buffer;        
-    }
-    get(domainId)->recvLon(rankBuffers);
-  }
-  CATCH
-
-  /*!
-    Receive longitude information from client(s)
-    \param[in] rankBuffers rank of sending client and the corresponding receive buffer  
-  */
-  void CDomain::recvLon(std::map<int, CBufferIn*>& rankBuffers)
-  TRY
-  {
-    int nbReceived = rankBuffers.size(), i, ind, index, iindex, jindex, lInd;
-    if (nbReceived != recvClientRanks_.size())
-      ERROR("void CDomain::recvLon(std::map<int, CBufferIn*>& rankBuffers)",
-           << "The number of sending clients is not correct."
-           << "Expected number: " << recvClientRanks_.size() << " but received " << nbReceived);
-    
-    int nbLonInd = 0;
-    vector<CArray<double,1> > recvLonValue(nbReceived);
-    vector<CArray<double,2> > recvBoundsLonValue(nbReceived);    
-    for (i = 0; i < recvClientRanks_.size(); ++i)
-    {
-      int rank = recvClientRanks_[i];
-      CBufferIn& buffer = *(rankBuffers[rank]);
-      buffer >> hasLonLat;
-      if (hasLonLat)
-        buffer >> recvLonValue[i];
-      buffer >> hasBounds;
-      if (hasBounds)
-        buffer >> recvBoundsLonValue[i];
-    }
-
-    if (hasLonLat)
-    {
-      for (i = 0; i < nbReceived; ++i)
-      {
-        nbLonInd += recvLonValue[i].numElements();
-      }
-    
-      if (nbLonInd != globalLocalIndexMap_.size())
-        info (0) << "If domain " << this->getDomainOutputName() <<" does not have overlapped regions between processes "
-                 << "something must be wrong with longitude index "<< std::endl;
-
-      nbLonInd = globalLocalIndexMap_.size();
-      lonvalue.resize(nbLonInd);
-      if (hasBounds)
-      {
-        bounds_lonvalue.resize(nvertex,nbLonInd);
-        bounds_lonvalue = 0.;
-      }
-
-      nbLonInd = 0;
-      for (i = 0; i < nbReceived; ++i)
-      {
-        CArray<int,1>& tmpInd = indGlob_[recvClientRanks_[i]];
-        CArray<double,1>& tmp = recvLonValue[i];
-        for (ind = 0; ind < tmp.numElements(); ++ind)
-        {
-          lInd = globalLocalIndexMap_[size_t(tmpInd(ind))];
-          lonvalue(lInd) = tmp(ind); 
-           if (hasBounds)
-           {          
-            for (int nv = 0; nv < nvertex; ++nv)
-              bounds_lonvalue(nv, lInd) = recvBoundsLonValue[i](nv, ind);
-           }                  
-        }
-      }       
-    }
-
-   // setup attribute depending the type of domain
-    if (hasLonLat)
-    {
-      nbLonInd = globalLocalIndexMap_.size();
-      if (ni*nj != nbLonInd)
-        ERROR("void CDomain::recvLon(std::map<int, CBufferIn*>& rankBuffers)",
-             << "The number of index received is not coherent with the given resolution"
-             << "nbLonInd=" << nbLonInd << ", ni=" << ni <<", nj"<<ni<<" ni*nj="<<ni*nj);
-
-      if (type == type_attr::rectilinear || type == type_attr::curvilinear)
-      {
-        lonvalue_2d.resize(ni,nj);
-          for(int ij=0, j=0 ; j<nj ; j++)
-            for(int i=0 ; i<ni; i++, ij++) lonvalue_2d(i,j) = lonvalue(ij) ;
-        
-        if (hasBounds)
-        {
-          bounds_lon_2d.resize(nvertex, ni, nj) ;
-          for(int ij=0, j=0 ; j<nj ; j++)
-            for(int i=0 ; i<ni; i++, ij++) 
-              for(int nv=0; nv<nvertex; nv++) bounds_lon_2d(nv,i,j) = bounds_lonvalue(nv,ij) ;
-        }
-      }
-      else if (type == type_attr::unstructured || type == type_attr::gaussian)
-      {
-        lonvalue_1d.resize(nbLonInd);
-        lonvalue_1d = lonvalue ;
-        if (hasBounds)
-        {
-          bounds_lon_1d.resize(nvertex, nbLonInd) ;
-          bounds_lon_1d = bounds_lonvalue ;
-        }
-      }
-    }
-  }
-  CATCH_DUMP_ATTR
-
-  /*!
-    Receive latitude event from clients(s)
-    \param[in] event event contain info about rank and associated latitude
-  */
-  void CDomain::recvLat(CEventServer& event)
-  TRY
-  {
-    string domainId;
-    std::map<int, CBufferIn*> rankBuffers;
-
-    list<CEventServer::SSubEvent>::iterator it;
-    for (it = event.subEvents.begin(); it != event.subEvents.end(); ++it)
-    {      
-      CBufferIn* buffer = it->buffer;
-      *buffer >> domainId;
-      rankBuffers[it->rank] = buffer;    
-    }
-    get(domainId)->recvLat(rankBuffers);
-  }
-  CATCH
-
-  /*!
-    Receive latitude information from client(s)
-    \param[in] rankBuffers rank of sending client and the corresponding receive buffer  
-  */
-  void CDomain::recvLat(std::map<int, CBufferIn*>& rankBuffers)
-  TRY
-  {
-    int nbReceived = rankBuffers.size(), i, ind, index, iindex, jindex, lInd;
-    if (nbReceived != recvClientRanks_.size())
-      ERROR("void CDomain::recvLat(std::map<int, CBufferIn*>& rankBuffers)",
-           << "The number of sending clients is not correct."
-           << "Expected number: " << recvClientRanks_.size() << " but received " << nbReceived);
-
-    vector<CArray<double,1> > recvLatValue(nbReceived);
-    vector<CArray<double,2> > recvBoundsLatValue(nbReceived);    
-    for (i = 0; i < recvClientRanks_.size(); ++i)
-    {
-      int rank = recvClientRanks_[i];
-      CBufferIn& buffer = *(rankBuffers[rank]);
-      buffer >> hasLonLat;
-      if (hasLonLat)
-        buffer >> recvLatValue[i];
-      buffer >> hasBounds;
-      if (hasBounds)
-        buffer >> recvBoundsLatValue[i];
-    }
-
-    int nbLatInd = 0;
-    if (hasLonLat)
-    {
-      for (i = 0; i < nbReceived; ++i)
-      {
-        nbLatInd += recvLatValue[i].numElements();
-      }
-    
-      if (nbLatInd != globalLocalIndexMap_.size())
-        info (0) << "If domain " << this->getDomainOutputName() <<" does not have overlapped regions between processes "
-                << "something must be wrong with latitude index "<< std::endl;
-
-      nbLatInd = globalLocalIndexMap_.size();
-      latvalue.resize(nbLatInd);
-      if (hasBounds)
-      {
-        bounds_latvalue.resize(nvertex,nbLatInd);
-        bounds_latvalue = 0. ;
-      }
-
-      nbLatInd = 0;
-      for (i = 0; i < nbReceived; ++i)
-      {
-        CArray<int,1>& tmpInd = indGlob_[recvClientRanks_[i]];
-        CArray<double,1>& tmp = recvLatValue[i];
-        for (ind = 0; ind < tmp.numElements(); ++ind)
-        {
-          lInd = globalLocalIndexMap_[size_t(tmpInd(ind))];
-          latvalue(lInd) = tmp(ind);    
-           if (hasBounds)
-           {
-            CArray<double,2>& boundslat = recvBoundsLatValue[i];
-            for (int nv = 0; nv < nvertex; ++nv)
-              bounds_latvalue(nv, lInd) = boundslat(nv, ind);
-           }   
-          ++nbLatInd;
-        }
-      }       
-    }
-      // setup attribute depending the type of domain
-    if (hasLonLat)
-    {
-      nbLatInd = globalLocalIndexMap_.size();
-      
-      if (ni*nj != nbLatInd)
-        ERROR("void CDomain::recvLat(std::map<int, CBufferIn*>& rankBuffers)",
-             << "The number of index received is not coherent with the given resolution"
-            << "nbLonInd=" << nbLatInd << ", ni=" << ni <<", nj"<<ni<<" ni*nj="<<ni*nj);
-
-      if (type == type_attr::rectilinear || type == type_attr::curvilinear)
-      {
-        {
-          latvalue_2d.resize(ni,nj);
-          for(int ij=0, j=0 ; j<nj ; j++)
-            for(int i=0 ; i<ni; i++, ij++) latvalue_2d(i,j) = latvalue(ij) ;
-        
-          if (hasBounds)
-          {
-            bounds_lat_2d.resize(nvertex, ni, nj) ;
-            for(int ij=0, j=0 ; j<nj ; j++)
-              for(int i=0 ; i<ni; i++, ij++) 
-                for(int nv=0; nv<nvertex; nv++) bounds_lat_2d(nv,i,j) = bounds_latvalue(nv,ij) ;
-          }
-        }
-      }
-      else if (type == type_attr::unstructured || type == type_attr::gaussian)
-      {
-        if (hasLonLat)
-        {
-          latvalue_1d.resize(nbLatInd);
-          latvalue_1d = latvalue ;
-          if (hasBounds)
-          {
-            bounds_lat_1d.resize(nvertex, nbLatInd) ;
-            bounds_lat_1d = bounds_latvalue ;
-          }
-        }
-      }
-    } 
-  }
-  CATCH_DUMP_ATTR
-
-  /*!
-    Receive area event from clients(s)
-    \param[in] event event contain info about rank and associated area
-  */
-  void CDomain::recvArea(CEventServer& event)
-  TRY
-  {
-    string domainId;
-    std::map<int, CBufferIn*> rankBuffers;
-
-    list<CEventServer::SSubEvent>::iterator it;
-    for (it = event.subEvents.begin(); it != event.subEvents.end(); ++it)
-    {      
-      CBufferIn* buffer = it->buffer;
-      *buffer >> domainId;
-      rankBuffers[it->rank] = buffer;     
-    }
-    get(domainId)->recvArea(rankBuffers);
-  }
-  CATCH
-
-  /*!
-    Receive area information from client(s)
-    \param[in] rankBuffers rank of sending client and the corresponding receive buffer     
-  */
-  void CDomain::recvArea(std::map<int, CBufferIn*>& rankBuffers)
-  TRY
-  {
-    int nbReceived = rankBuffers.size(), i, ind, index, lInd;
-    if (nbReceived != recvClientRanks_.size())
-      ERROR("void CDomain::recvArea(std::map<int, CBufferIn*>& rankBuffers)",
-           << "The number of sending clients is not correct."
-           << "Expected number: " << recvClientRanks_.size() << " but received " << nbReceived);
-
-    vector<CArray<double,1> > recvAreaValue(nbReceived);      
-    for (i = 0; i < recvClientRanks_.size(); ++i)
-    {
-      int rank = recvClientRanks_[i];
-      CBufferIn& buffer = *(rankBuffers[rank]);      
-      buffer >> hasArea;
-      if (hasArea)
-        buffer >> recvAreaValue[i];
-    }
-
-    if (hasArea)
-    {
-      int nbAreaInd = 0;
-      for (i = 0; i < nbReceived; ++i)
-      {      
-        nbAreaInd += recvAreaValue[i].numElements();
-      }
-
-      if (nbAreaInd != globalLocalIndexMap_.size())
-        info (0) << "If domain " << this->getDomainOutputName() <<" does not have overlapped regions between processes "
-                 << "something must be wrong with area index "<< std::endl;
-
-      nbAreaInd = globalLocalIndexMap_.size();
-      areavalue.resize(nbAreaInd);
-      nbAreaInd = 0;      
-      for (i = 0; i < nbReceived; ++i)
-      {
-        CArray<int,1>& tmpInd = indGlob_[recvClientRanks_[i]];
-        CArray<double,1>& tmp = recvAreaValue[i];
-        for (ind = 0; ind < tmp.numElements(); ++ind)
-        {
-          lInd = globalLocalIndexMap_[size_t(tmpInd(ind))];
-          areavalue(lInd) = tmp(ind);          
-        }
-      }
-      
-      // fill the area attribute
-      area.resize(ni,nj);
-      for (int j = 0; j < nj; ++j)
-      {
-        for (int i = 0; i < ni; ++i)
-        {
-          int k = j * ni + i;
-          area(i,j) = areavalue(k) ;
-        }
-      }
-    }
-  }
-  CATCH_DUMP_ATTR
-
+  
   /*!
     Compare two domain objects. 
@@ -3479,104 +2179,5 @@
   CATCH_DUMP_ATTR
 
-  /*!
-    Receive data index event from clients(s)
-    \param[in] event event contain info about rank and associated index
-  */
-  void CDomain::recvDataIndex(CEventServer& event)
-  TRY
-  {
-    string domainId;
-    std::map<int, CBufferIn*> rankBuffers;
-
-    list<CEventServer::SSubEvent>::iterator it;
-    for (it = event.subEvents.begin(); it != event.subEvents.end(); ++it)
-    {      
-      CBufferIn* buffer = it->buffer;
-      *buffer >> domainId;
-      rankBuffers[it->rank] = buffer;        
-    }
-    get(domainId)->recvDataIndex(rankBuffers);
-  }
-  CATCH
-
-  /*!
-    Receive data index information from client(s)
-    A client receives data index from different clients to rebuild its own data index.
-    Because we use global index + mask info to calculate the sending data to client(s), 
-    this data index must be updated with mask info (maybe it will change in the future)
-    Because the data index is local, to rebuild data index of received client, we should use global index along with. 
-
-    \param[in] rankBuffers rank of sending client and the corresponding receive buffer     
-  */
-  void CDomain::recvDataIndex(std::map<int, CBufferIn*>& rankBuffers)
-  TRY
-  {
-    int nbReceived = rankBuffers.size(), i, ind, index, indexI, indexJ, type_int, lInd;    
-    if (nbReceived != recvClientRanks_.size())
-      ERROR("void CDomain::recvDataIndex(std::map<int, CBufferIn*>& rankBuffers)",
-           << "The number of sending clients is not correct."
-           << "Expected number: " << recvClientRanks_.size() << " but received " << nbReceived);
-
-    vector<CArray<int,1> > recvDataIIndex(nbReceived),recvDataJIndex(nbReceived);     
-    for (i = 0; i < recvClientRanks_.size(); ++i)
-    {
-      int rank = recvClientRanks_[i];
-      CBufferIn& buffer = *(rankBuffers[rank]);
-      buffer >> recvDataIIndex[i];
-      buffer >> recvDataJIndex[i];
-    }
-   
-    int nbIndex = i_index.numElements();
-    CArray<int,1> dataIIndex(nbIndex), dataJIndex(nbIndex);
-    dataIIndex = -1; dataJIndex = -1;
-     
-    nbIndex = 0;
-    for (i = 0; i < nbReceived; ++i)
-    {      
-      CArray<int,1>& tmpInd = indGlob_[recvClientRanks_[i]];
-      CArray<int,1>& tmpI = recvDataIIndex[i];    
-      CArray<int,1>& tmpJ = recvDataJIndex[i];     
-      if ((tmpI.numElements() != tmpInd.numElements()) || (tmpJ.numElements() != tmpInd.numElements()))
-          ERROR("void CDomain::recvDataIndex(std::map<int, CBufferIn*>& rankBuffers)",
-             << "The number of global received index is not coherent with the number of received data index."
-             << "Expected number of global index: " << tmpI.numElements() << " but received " << tmpInd.numElements());
-
-      for (ind = 0; ind < tmpI.numElements(); ++ind)
-      {
-         lInd = globalLocalIndexMap_[size_t(tmpInd(ind))];
-         dataIIndex(lInd) = (-1 == dataIIndex(lInd)) ? tmpI(ind) : dataIIndex(lInd); // Only fill in dataIndex if there is no data
-         dataJIndex(lInd) = (-1 == dataJIndex(lInd)) ? tmpJ(ind) : dataJIndex(lInd);  
-      } 
-    }
-
-    int nbCompressedData = 0;  
-    for (ind = 0; ind < dataIIndex.numElements(); ++ind)
-    {
-       indexI = dataIIndex(ind); indexJ = dataJIndex(ind);
-       if ((0 <= indexI) && (0 <= indexJ))
-         ++nbCompressedData;
-    }        
-  
-    data_i_index.resize(nbCompressedData);
-    data_j_index.resize(nbCompressedData);
-
-    nbCompressedData = 0;  
-    for (ind = 0; ind < dataIIndex.numElements(); ++ind)
-    {
-       indexI = dataIIndex(ind); indexJ = dataJIndex(ind);
-       if ((0 <= indexI) && (0 <= indexJ))
-       {
-          data_i_index(nbCompressedData) = (1 == data_dim) ? ind : ind % ni;
-          data_j_index(nbCompressedData) = (1 == data_dim) ? 0   : ind / ni;
-         ++nbCompressedData;
-       }
-    }
-
-    // Reset data_ibegin, data_jbegin
-    data_ibegin.setValue(0);
-    data_jbegin.setValue(0);
-  }
-  CATCH_DUMP_ATTR
-
+ 
   CTransformation<CDomain>* CDomain::addTransformation(ETranformationType transType, const StdString& id)
   TRY
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/domain.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/domain.hpp	(revision 1973)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/domain.hpp	(revision 1974)
@@ -54,7 +54,4 @@
          enum EEventId
          {
-           EVENT_ID_INDEX, EVENT_ID_LON, EVENT_ID_LAT, 
-           EVENT_ID_AREA,
-           EVENT_ID_DATA_INDEX, EVENT_ID_SERVER_ATTRIBUT,
            EVENT_ID_DOMAIN_DISTRIBUTION, EVENT_ID_SEND_DISTRIBUTED_ATTRIBUTE
          } ;
@@ -84,9 +81,4 @@
          void checkAttributes(void);
          bool checkAttributes_done_ = false ;
-
-         void checkAttributesOnClient();
-         void checkAttributesOnClientAfterTransformation();
-
-         void sendCheckedAttributes();
 
          bool hasTransformation();
@@ -102,9 +94,4 @@
          bool isWrittenCompressed(const StdString& filename) const;
          
-         int getNumberWrittenIndexes(MPI_Comm writtenCom);
-         int getTotalNumberWrittenIndexes(MPI_Comm writtenCom);
-         int getOffsetWrittenIndexes(MPI_Comm writtenCom);
-         CArray<int,1>& getCompressedIndexToWriteOnServer(MPI_Comm writtenCom);
-
          std::map<int, StdSize> getAttributesBufferSize(CContextClient* client, bool bufferForWriting = false);
 
@@ -125,5 +112,4 @@
 
       public :
-         std::vector<int> getNbGlob();
          bool isEqual(CDomain* domain);
 
@@ -155,7 +141,4 @@
          void addRelFileCompressed(const StdString& filename);            
          
-         void computeWrittenIndex();
-         void computeWrittenCompressedIndex(MPI_Comm);
-
          void AllgatherRectilinearLonLat(CArray<double,1>& lon, CArray<double,1>& lat,
                                          CArray<double,1>& lon_g, CArray<double,1>& lat_g);
@@ -182,5 +165,4 @@
          CArray<double, 1> areavalue;
 
-         CArray<int,1> localIndexToWriteOnServer;
 
          CArray<bool, 1> domainMask; // mask_1d, mask_2d -> domainMask
@@ -198,8 +180,6 @@
          void computeLocalMask(void) ;
       
-         void computeConnectedClients(CContextClient* client);  
-         private: std::set<CContextClient*> computeConnectedClients_done_; public:
          /** The number of server of a context client. Avoid to re-compute indice computed in a previous computeConnectedClient */
-         private: std::set<int> listNbServer_ ; public:
+         private: std::set<int> listNbServer_ ;
          
       private:
@@ -233,29 +213,8 @@
        private:
 
-         void sendDomainDistribution(CContextClient* client, const string& domainId="") ; //for testing
-         void sendAttributes(); // ym obsolete -> to be removed
-         void sendIndex(CContextClient* client, const string& domainId="");
-         void sendDistributionAttributes(CContextClient* client, const string& domainId="");
-         void sendArea(CContextClient* client, const string& domainId="");
-         void sendLonLat(CContextClient* client, const string& domainId="");         
-         void sendDataIndex(CContextClient* client, const string& domainId="");
          void convertLonLatValue();
          void fillInRectilinearLonLat();
          void fillInCurvilinearLonLat();
          void fillInUnstructuredLonLat();
-         
-         static void recvDistributionAttributes(CEventServer& event);
-         static void recvIndex(CEventServer& event);
-         static void recvLon(CEventServer& event);
-         static void recvLat(CEventServer& event);
-         static void recvArea(CEventServer& event);
-         static void recvDataIndex(CEventServer& event);
-         void recvDistributionAttributes(CBufferIn& buffer);                  
-         void recvIndex(std::map<int, CBufferIn*>& rankBuffers);         
-         void recvLon(std::map<int, CBufferIn*>& rankBuffers);
-         void recvLat(std::map<int, CBufferIn*>& rankBuffers);
-         void recvArea(std::map<int, CBufferIn*>& rankBuffers);         
-         void recvDataIndex(std::map<int, CBufferIn*>& rankBuffers);
-
          void completeLonLatClient(void);  
          
@@ -267,21 +226,6 @@
          std::set<CContextClient*> clientsSet;
 
-         bool isChecked, computedWrittenIndex_;
+         bool isChecked ;
          std::set<StdString> relFiles, relFilesCompressed;
-         bool isClientChecked; // Verify whether all attributes of domain on the client side are good
-         bool isClientAfterTransformationChecked;
-
-/** global index of the domain on server side, sent by the clients. This is global index for lon, lat, mask elements (ie non masked elements)
-    indGlobs_[rank] -> array of global index received from the client of rank "rank"
-    indGlobs[rank](ind) -> global indices of the "ind" element sent.
-    Defined only on server side
-*/
-         std::map<int, CArray<int,1> > indGlob_;
-
-/** only on client sided : defined the number of clients which participate to a message sent to a server for longitude, lat, area, etc. attributes 
-    nbSender[nbServers] --> first map is related to the server distribution (ie associated with the contextClient)
-    nbSenders[nbServers][server_rank]-> return the number of participants of a message sent to the server of rank "server_rank"
-*/
-         std::map<int, map<int,int> > nbSenders; 
 
 /** only on client side : Global index of each client sent to server: map<serverSize, map<serverRank, indexes>> 
@@ -291,18 +235,5 @@
 */
          std::map<int, std::unordered_map<int, vector<size_t> > > indSrv_;
-         
- /** make the mapping between the global index (the key) and the local index
-     globalLocalIndexMap_[global_index] --> get the local index
- */        
-         std::unordered_map<size_t,size_t> globalLocalIndexMap_;
-
-
-/** only on server side : get the rank of each clients which participate to a received message
-*   recvClientRanks_[num_receiver] : client rank of the receiver "num_receiver" 
-*/
-         std::vector<int> recvClientRanks_;
-
-         std::map<int,int> numberWrittenIndexes_, totalNumberWrittenIndexes_, offsetWrittenIndexes_;
-         std::map<int, CArray<int, 1> > compressedIndexToWriteOnServer;     
+
          std::map<int, std::vector<int> > connectedServerRank_;
 
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/grid.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/grid.cpp	(revision 1973)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/grid.cpp	(revision 1974)
@@ -728,26 +728,5 @@
    }
 
-   void CGrid::checkAttributesAfterTransformation()
-   TRY
-   {
-      setAxisList();
-      std::vector<CAxis*> axisListP = this->getAxis();
-      for (int i = 0; i < axisListP.size(); ++i)
-        axisListP[i]->checkAttributesOnClientAfterTransformation(getGlobalDimension(), getAxisPositionInGrid()[i]);
-   
-      setDomainList();
-      std::vector<CDomain*> domListP = this->getDomains();
-      if (!domListP.empty())
-      {
-        for (int i = 0; i < domListP.size(); ++i)
-        {
-          domListP[i]->checkAttributesOnClientAfterTransformation();
-        }
-      }
-   }
-   CATCH_DUMP_ATTR
-
-   //---------------------------------------------------------------
-
+  
    /*!
     * Test whether the data defined on the grid can be outputted in a compressed way.
@@ -840,16 +819,7 @@
    {
      CContext* context = CContext::getCurrent();
-     if (context->getServiceType()==CServicesManager::CLIENT || context->getServiceType()==CServicesManager::GATHERER)     
-     {
-       if (this->isChecked && doSendingIndex && !isIndexSent) 
-       { 
-         if (isScalarGrid())  /*sendIndexScalarGrid()*/;
-         else  /*sendIndex()*/;
-         this->isIndexSent = true; 
-       }
-     }
-
+     
      if (this->isChecked) return;
-     this->checkAttributesAfterTransformation();
+     this->checkElementsAttributes();
 
      if (!(this->hasTransform() && !this->isTransformed()))
@@ -897,11 +867,5 @@
       std::vector<CDomain*> domListP = this->getDomains();
       if (!domListP.empty())
-      {
-        for (int i = 0; i < domListP.size(); ++i)
-        {
-          if (sendAtt) domListP[i]->sendCheckedAttributes();
-          else domListP[i]->checkAttributesOnClient();
-        }
-      }
+        for (int i = 0; i < domListP.size(); ++i) domListP[i]->checkAttributes();
    }
    CATCH_DUMP_ATTR
@@ -915,13 +879,5 @@
       std::vector<CAxis*> axisListP = this->getAxis();
       if (!axisListP.empty())
-      {
-        for (int i = 0; i < axisListP.size(); ++i)
-        {
-          if (sendAtt)
-            axisListP[i]->sendCheckedAttributes(getGlobalDimension(),getAxisPositionInGrid()[i]);
-          else
-            axisListP[i]->checkAttributesOnClient();
-        }
-      }
+        for (int i = 0; i < axisListP.size(); ++i)  axisListP[i]->checkAttributes();
    }
    CATCH_DUMP_ATTR
@@ -935,12 +891,5 @@
       std::vector<CScalar*> scalarListP = this->getScalars();
       if (!scalarListP.empty())
-      {
-        for (int i = 0; i < scalarListP.size(); ++i)
-        {
-          /*Nothing to do for now */
-//          if (sendAtt) scalarListP[i]->sendCheckedAttributes();
-//          else scalarListP[i]->checkAttributesOnClient();
-        }
-      }
+        for (int i = 0; i < scalarListP.size(); ++i) scalarListP[i]->checkAttributes() ;
    }
    CATCH_DUMP_ATTR
@@ -1944,51 +1893,4 @@
   CATCH_DUMP_ATTR
 
-
-
-  /*!
-    Send all attributes of domains from client to server
-  */
-  void CGrid::sendAllDomains(CContextClient* contextClient)
-  TRY
-  {
-    std::vector<CDomain*> domList = this->getVirtualDomainGroup()->getAllChildren();
-    for (auto domain : domList)
-    {
-      sendAddDomain(domain->getId(),contextClient);
-      domain->sendDomainToFileServer(contextClient);
-    }
-  }
-  CATCH_DUMP_ATTR
-
-  /*!
-    Send all attributes of axis from client to server
-  */
-  void CGrid::sendAllAxis(CContextClient* contextClient)
-  TRY
-  {
-    std::vector<CAxis*> aList = this->getVirtualAxisGroup()->getAllChildren();
-    for (int i=0; i<aList.size() ; ++i)
-    {
-      sendAddAxis(aList[i]->getId(),contextClient);
-      aList[i]->sendAxisToFileServer(contextClient, getGlobalDimension(), getAxisPositionInGrid()[i]);
-    }
-  }
-  CATCH_DUMP_ATTR
-
-  /*!
-    Send all attributes of scalars from client to server
-  */
-  void CGrid::sendAllScalars(CContextClient* contextClient)
-  TRY
-  {
-    std::vector<CScalar*> sList = this->getVirtualScalarGroup()->getAllChildren();
-    for (auto scalar : sList)
-    {
-      sendAddScalar(scalar->getId(),contextClient);
-      scalar->sendScalarToFileServer(contextClient);
-    }
-  }
-  CATCH_DUMP_ATTR
-
   void CGrid::setContextClient(CContextClient* contextClient)
   TRY
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/grid.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/grid.hpp	(revision 1973)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/grid.hpp	(revision 1974)
@@ -179,8 +179,5 @@
          void sendAddAxis(const std::string& id,CContextClient* contextClient);
          void sendAddScalar(const std::string& id,CContextClient* contextClient);
-         void sendAllDomains(CContextClient* contextClient);
-         void sendAllAxis(CContextClient* contextClient);
-         void sendAllScalars(CContextClient* contextClient);
-
+        
          static void recvAddDomain(CEventServer& event);
          void recvAddDomain(CBufferIn& buffer);
@@ -268,5 +265,4 @@
         CScalarGroup* getVirtualScalarGroup() const;
 
-        void checkAttributesAfterTransformation();
         void setTransformationAlgorithms();
         int computeGridGlobalDimension(std::vector<int>& globalDim,
