Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/algorithm_transformation_no_data_modification.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/algorithm_transformation_no_data_modification.cpp	(revision 1997)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/algorithm_transformation_no_data_modification.cpp	(revision 1997)
@@ -0,0 +1,10 @@
+#include "algorithm_transformation_no_data_modification.hpp"
+
+namespace xios
+{
+  void CAlgorithmTransformationNoDataModification::apply(int dimBefore, int dimAfter, const CArray<double,1>& dataIn, CArray<double,1>& dataOut)
+  {
+    dataOut.reference(dataIn) ;
+  }
+  
+}
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/algorithm_transformation_no_data_modification.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/algorithm_transformation_no_data_modification.hpp	(revision 1997)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/algorithm_transformation_no_data_modification.hpp	(revision 1997)
@@ -0,0 +1,20 @@
+#ifndef __XIOS_ALGORITHM_TRANSFORMATION_NO_DATA_MODIFICATION_HPP__
+#define __XIOS_ALGORITHM_TRANSFORMATION_NO_DATA_MODIFICATION_HPP__
+
+#include "generic_algorithm_transformation.hpp"
+#include "array_new.hpp"
+
+namespace xios
+{
+
+  class CAlgorithmTransformationNoDataModification : public CGenericAlgorithmTransformation
+  {
+    public:
+
+      CAlgorithmTransformationNoDataModification(bool isSource) : CGenericAlgorithmTransformation(isSource) {}
+      virtual ~CAlgorithmTransformationNoDataModification() {};
+      virtual void apply(int dimBefore, int dimAfter, const CArray<double,1>& dataIn, CArray<double,1>& dataOut);
+  };
+
+}
+#endif //__XIOS_ALGORITHM_TRANSFORMATION_NO_DATA_MODIFICATION_HPP__
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/algorithm_transformation_transfer.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/algorithm_transformation_transfer.cpp	(revision 1997)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/algorithm_transformation_transfer.cpp	(revision 1997)
@@ -0,0 +1,34 @@
+#include "algorithm_transformation_transfer.hpp"
+#include "array_new.hpp"
+#include "local_view.hpp"
+#include "transform_connector.hpp"
+#include "context.hpp"
+
+namespace xios
+{
+ 
+ void CAlgorithmTransformationTransfer::computeAlgorithm(CLocalView* srcView, CLocalView* dstView)
+ {
+   set<size_t> srcIndex ;
+   for(auto& it : transformationMapping_) srcIndex.insert(it.second) ;
+
+    CArray<size_t,1> srcArrayIndex(srcIndex.size()) ;
+    int i=0 ;
+    for(size_t index : srcIndex) { srcArrayIndex(i) = index ; i++ ;}
+    CLocalElement recvElement(CContext::getCurrent()->getIntraCommRank(), srcView->getGlobalSize(), srcArrayIndex) ;
+    recvElement.addFullView() ;
+
+    transformConnector_ = new CTransformConnector(srcView, recvElement.getView(CElementView::FULL), CContext::getCurrent()->getIntraComm())  ;
+    transformConnector_->computeConnector() ;
+    transferTransformConnector_ = new  CTransferTransformConnector( recvElement.getView(CElementView::FULL), dstView, transformationMapping_) ; 
+  }
+ 
+
+  void CAlgorithmTransformationTransfer::apply(int dimBefore, int dimAfter, const CArray<double,1>& dataIn, CArray<double,1>& dataOut)
+  {
+    CArray<double,1> dataOutTmp ;
+    transformConnector_->transfer(dimBefore, dimAfter, dataIn, dataOutTmp) ;  
+    transferTransformConnector_ -> transfer(dimBefore, dimAfter, dataOutTmp, dataOut) ; 
+  }
+  
+}
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/algorithm_transformation_transfer.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/algorithm_transformation_transfer.hpp	(revision 1997)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/algorithm_transformation_transfer.hpp	(revision 1997)
@@ -0,0 +1,30 @@
+#ifndef __XIOS_ALGORITHM_TRANSFORMATION_TRANSFER_HPP__
+#define __XIOS_ALGORITHM_TRANSFORMATION_TRANSFER_HPP__
+
+#include "generic_algorithm_transformation.hpp"
+#include "transfer_transform_connector.hpp"
+#include "array_new.hpp"
+
+namespace xios
+{
+
+  class CAlgorithmTransformationTransfer : public CGenericAlgorithmTransformation
+  {
+    public:
+
+      CAlgorithmTransformationTransfer(bool isSource) : CGenericAlgorithmTransformation(isSource) {}
+      virtual ~CAlgorithmTransformationTransfer() {};
+      virtual void apply(int dimBefore, int dimAfter, const CArray<double,1>& dataIn, CArray<double,1>& dataOut);
+   
+    protected:
+      virtual void computeAlgorithm(CLocalView* srcView, CLocalView* dstView) ;
+
+      //! Map between global index of destination element and source element
+      unordered_map<int,int> transformationMapping_;
+    
+      CTransformConnector* transformConnector_ ;
+      CTransferTransformConnector* transferTransformConnector_ ;
+  };
+
+}
+#endif //__XIOS_ALGORITHM_TRANSFORMATION_TRANSFER_HPP__
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/algorithm_transformation_weight.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/algorithm_transformation_weight.cpp	(revision 1997)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/algorithm_transformation_weight.cpp	(revision 1997)
@@ -0,0 +1,34 @@
+#include "algorithm_transformation_weight.hpp"
+#include "context.hpp"
+
+namespace xios
+{
+
+
+  void CAlgorithmTransformationWeight::computeAlgorithm(CLocalView* srcView, CLocalView* dstView)
+ {
+   auto& srcMap = transformationMapping_ ;
+   set<size_t> srcIndex ;
+   for(auto& it : srcMap)
+     for(size_t index : it.second) srcIndex.insert(index) ;
+
+    CArray<size_t,1> srcArrayIndex(srcIndex.size()) ;
+    int i=0 ;
+    for(size_t index : srcIndex) { srcArrayIndex(i) = index ; i++ ;}
+    CLocalElement recvElement(CContext::getCurrent()->getIntraCommRank(), srcView->getGlobalSize(), srcArrayIndex) ;
+    recvElement.addFullView() ;
+
+    transformConnector_ = new CTransformConnector(srcView, recvElement.getView(CElementView::FULL), CContext::getCurrent()->getIntraComm())  ;
+    transformConnector_->computeConnector() ;
+    weightTransformConnector_ = new  CWeightTransformConnector( recvElement.getView(CElementView::FULL), dstView, transformationMapping_, transformationWeight_) ; 
+  }
+ 
+
+  void CAlgorithmTransformationWeight::apply(int dimBefore, int dimAfter, const CArray<double,1>& dataIn, CArray<double,1>& dataOut)
+  {
+    CArray<double,1> dataOutTmp ;
+    transformConnector_->transfer(dimBefore, dimAfter, dataIn, dataOutTmp) ;
+    weightTransformConnector_ -> transfer(dimBefore, dimAfter, dataOutTmp, dataOut) ;
+  }
+
+}
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/algorithm_transformation_weight.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/algorithm_transformation_weight.hpp	(revision 1997)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/algorithm_transformation_weight.hpp	(revision 1997)
@@ -0,0 +1,34 @@
+#ifndef __XIOS_ALGORITHM_TRANSFORMATION_WEIGHT_HPP__
+#define __XIOS_ALGORITHM_TRANSFORMATION_WEIGHT_HPP__
+
+#include "generic_algorithm_transformation.hpp"
+#include "array_new.hpp"
+#include "local_view.hpp"
+#include "transform_connector.hpp"
+#include "weight_transform_connector.hpp"
+
+namespace xios
+{
+
+  class CAlgorithmTransformationWeight : public CGenericAlgorithmTransformation
+  {
+    public:
+
+      CAlgorithmTransformationWeight(bool isSource) : CGenericAlgorithmTransformation(isSource) {}
+      virtual ~CAlgorithmTransformationWeight() {};
+      virtual void apply(int dimBefore, int dimAfter, const CArray<double,1>& dataIn, CArray<double,1>& dataOut);
+      
+    protected:
+      virtual void computeAlgorithm(CLocalView* srcView, CLocalView* dstView) ;
+
+      //! Map between global index of destination element and source element
+      TransformationIndexMap transformationMapping_;
+      //! Weight corresponding of source to destination
+      TransformationWeightMap transformationWeight_;
+      CTransformConnector* transformConnector_ ;
+      CWeightTransformConnector* weightTransformConnector_ ;
+      
+  };
+
+}
+#endif //__XIOS_ALGORITHM_TRANSFORMATION_WEIGHT_HPP__
