Index: XIOS/trunk/src/client_client_dht_decl.cpp
===================================================================
--- XIOS/trunk/src/client_client_dht_decl.cpp	(revision 831)
+++ XIOS/trunk/src/client_client_dht_decl.cpp	(revision 832)
@@ -3,5 +3,5 @@
    \author Ha NGUYEN
    \since 05 Oct 2015
-   \date 05 Oct 2015
+   \date 23 Mars 2016
 
    \brief Distributed hashed table implementation.
Index: XIOS/trunk/src/client_client_dht_template_impl.hpp
===================================================================
--- XIOS/trunk/src/client_client_dht_template_impl.hpp	(revision 831)
+++ XIOS/trunk/src/client_client_dht_template_impl.hpp	(revision 832)
@@ -3,5 +3,5 @@
    \author Ha NGUYEN
    \since 05 Oct 2015
-   \date 05 Oct 2015
+   \date 23 Mars 2016
 
    \brief Distributed hashed table implementation.
Index: XIOS/trunk/src/client_server_mapping.cpp
===================================================================
--- XIOS/trunk/src/client_server_mapping.cpp	(revision 831)
+++ XIOS/trunk/src/client_server_mapping.cpp	(revision 832)
@@ -19,52 +19,4 @@
 {
 }
-
-///*!
-//  Compute mapping global index of server which client sends to.
-//  \param [in] globalIndexOnClient global index on client
-//  \param [in] globalIndexServer global index of servers
-//*/
-//void CClientServerMapping::computeServerIndexMapping(const CArray<size_t,1>& globalIndexOnClient,
-//                                                     const std::vector<CArray<size_t,1>* >& globalIndexServer)
-//{
-//  defaultComputeServerIndexMapping(globalIndexOnClient, globalIndexServer);
-//}
-
-///*!
-//   Compute index of data which are sent to server and index global on server side
-//   \param [in] globalIndexOnClient global index of data on client
-//   \param [in] globalIndexServer global index of server(s)
-//   \param [in] localIndexOnClient local index of data on client which are sent to server
-//*/
-//void CClientServerMapping::defaultComputeServerIndexMapping(const CArray<size_t,1>& globalIndexOnClient,
-//                                                            const std::vector<CArray<size_t,1>* >& globalIndexServer,
-//                                                            const CArray<int,1>* localIndexOnClient)
-//{
-//  int nServer = globalIndexServer.size();
-//  std::vector<CArray<size_t,1>::const_iterator> itBegin(nServer), itEnd(nServer), it(nServer);
-//  for (int i = 0; i < nServer; ++i)
-//  {
-//    itBegin[i] = it[i] = globalIndexServer[i]->begin();
-//    itEnd[i]   = globalIndexServer[i]->end();
-//  }
-//
-//  size_t ssize = globalIndexOnClient.numElements();
-//  for (int i = 0; i < ssize; ++i)
-//  {
-//    for (int j = 0; j < nServer; ++j)
-//    {
-//      // Just temporarily, it's bad.
-//      if (std::binary_search(itBegin[j], itEnd[j], globalIndexOnClient(i)))
-//      {
-//        // Just try to calculate local index server on client side
-//        (indexGlobalOnServer_[j]).push_back((globalIndexOnClient)(i));
-//        if (0 != localIndexOnClient) (localIndexSend2Server_[j]).push_back((*localIndexOnClient)(i));
-//        else
-//          (localIndexSend2Server_[j]).push_back(i);
-//        continue;
-//      }
-//    }
-//  }
-//}
 
 /*!
@@ -134,13 +86,4 @@
 }
 
-///*!
-//  Return local index of data that is send to server
-//  \return mapping of server rank and local index of sending data on the client
-//*/
-//const CClientServerMapping::LocalIndexMap& CClientServerMapping::getLocalIndexSendToServer() const
-//{
-//  return localIndexSend2Server_;
-//}
-
 /*!
   Return global index of data on each connected server.
Index: XIOS/trunk/src/filter/spatial_transform_filter.cpp
===================================================================
--- XIOS/trunk/src/filter/spatial_transform_filter.cpp	(revision 831)
+++ XIOS/trunk/src/filter/spatial_transform_filter.cpp	(revision 832)
@@ -87,5 +87,5 @@
         std::vector<CArray<double,1>* > dataAuxInputs(data.size()-1);
         for (size_t idx = 0; idx < dataAuxInputs.size(); ++idx) dataAuxInputs[idx] = &(data[idx+1]->data);
-        gridTransformation->computeAll(dataAuxInputs);
+        gridTransformation->computeAll(dataAuxInputs, packet->timestamp);
       }
       packet->data.resize(gridTransformation->getGridDestination()->storeIndex_client.numElements());
Index: XIOS/trunk/src/transformation/grid_transformation.cpp
===================================================================
--- XIOS/trunk/src/transformation/grid_transformation.cpp	(revision 831)
+++ XIOS/trunk/src/transformation/grid_transformation.cpp	(revision 832)
@@ -25,5 +25,5 @@
 : gridSource_(source), gridDestination_(destination), originalGridSource_(source),
   algoTypes_(), nbAlgos_(0), currentGridIndexToOriginalGridIndex_(), tempGrids_(),
-  auxInputs_(), dynamicalTransformation_(false)
+  auxInputs_(), dynamicalTransformation_(false), timeStamp_()
 
 {
@@ -356,9 +356,15 @@
   -) Make current grid destination become grid source in the next transformation
 */
-void CGridTransformation::computeAll(const std::vector<CArray<double,1>* >& dataAuxInputs)
+void CGridTransformation::computeAll(const std::vector<CArray<double,1>* >& dataAuxInputs, Time timeStamp)
 {
   if (nbAlgos_ < 1) return;
   if (!auxInputs_.empty() && !dynamicalTransformation_) { dynamicalTransformation_ = true; return; }
-  if (dynamicalTransformation_) DestinationIndexMap().swap(currentGridIndexToOriginalGridIndex_);  // Reset map
+  if (dynamicalTransformation_)
+  {
+    if (timeStamp_.insert(timeStamp).second)
+      DestinationIndexMap().swap(currentGridIndexToOriginalGridIndex_);  // Reset map
+    else
+      return;
+  }
 
   CContext* context = CContext::getCurrent();
Index: XIOS/trunk/src/transformation/grid_transformation.hpp
===================================================================
--- XIOS/trunk/src/transformation/grid_transformation.hpp	(revision 831)
+++ XIOS/trunk/src/transformation/grid_transformation.hpp	(revision 832)
@@ -15,4 +15,5 @@
 #include "generic_algorithm_transformation.hpp"
 #include "transformation_enum.hpp"
+#include "duration.hpp"
 
 namespace xios {
@@ -42,5 +43,5 @@
   ~CGridTransformation();
 
-  void computeAll(const std::vector<CArray<double,1>* >& dataAuxInput=std::vector<CArray<double,1>* >());
+  void computeAll(const std::vector<CArray<double,1>* >& dataAuxInput=std::vector<CArray<double,1>* >(), Time timeStamp = 0);
 
   const std::map<int, CArray<int,1> >& getLocalIndexToSendFromGridSource() const;
@@ -109,4 +110,6 @@
   std::vector<StdString> auxInputs_;
   bool dynamicalTransformation_;
+
+  std::set<Time> timeStamp_; //! Time stamps for auxillary inputs
 };
 
