Index: XIOS/dev/XIOS_DEV_CMIP6/src/transformation/axis_algorithm_transformation.cpp
===================================================================
--- XIOS/dev/XIOS_DEV_CMIP6/src/transformation/axis_algorithm_transformation.cpp	(revision 1402)
+++ XIOS/dev/XIOS_DEV_CMIP6/src/transformation/axis_algorithm_transformation.cpp	(revision 1403)
@@ -74,7 +74,24 @@
   size_t globalIndex;
   int nIndexSize = 0;
-  if (2 == elementType) nIndexSize = domainSrc_->i_index.numElements();
-  else if (1 == elementType) nIndexSize = axisSrc_->index.numElements();
-  else nIndexSize=1  ; //  scalar
+  CArray<bool,1>* ptLocalMask ;
+  CArray<bool,1> scalarMask(1) ;
+  scalarMask=true ;
+  
+  if (2 == elementType) 
+  {
+    nIndexSize = domainSrc_->i_index.numElements();
+    ptLocalMask=&(domainSrc_->localMask) ;
+  }
+  else if (1 == elementType)
+  {
+     nIndexSize = axisSrc_->index.numElements();
+     ptLocalMask=&(axisSrc_->mask) ;
+  }
+  else
+  {
+     nIndexSize=1  ; //  scalar
+     ptLocalMask=&scalarMask ;
+  }
+  CArray<bool,1>& localMask=*ptLocalMask ;
   
   CClientClientDHTInt::Index2VectorInfoTypeMap globalIndex2ProcRank;
@@ -82,19 +99,22 @@
   for (int idx = 0; idx < nIndexSize; ++idx)
   {
-    if (2 == elementType) // domain
+    if (localMask(idx))
     {
-      globalIndex = domainSrc_->i_index(idx) + domainSrc_->j_index(idx) * domainSrc_->ni_glo;
+      if (2 == elementType) // domain
+      {
+       globalIndex = domainSrc_->i_index(idx) + domainSrc_->j_index(idx) * domainSrc_->ni_glo;
+      }
+      else if (1 == elementType) // axis
+      {
+        globalIndex = axisSrc_->index(idx);
+      }
+      else // scalar
+      {
+        globalIndex = 0;
+      }
+     
+      globalIndex2ProcRank[globalIndex].resize(1);
+      globalIndex2ProcRank[globalIndex][0] = clientRank;
     }
-    else if (1 == elementType) // axis
-    {
-      globalIndex = axisSrc_->index(idx);
-    }
-    else // scalar
-    {
-      globalIndex = 0;
-    }
-
-    globalIndex2ProcRank[globalIndex].resize(1);
-    globalIndex2ProcRank[globalIndex][0] = clientRank;
   }
 
Index: XIOS/dev/XIOS_DEV_CMIP6/src/transformation/domain_algorithm_transformation.cpp
===================================================================
--- XIOS/dev/XIOS_DEV_CMIP6/src/transformation/domain_algorithm_transformation.cpp	(revision 1402)
+++ XIOS/dev/XIOS_DEV_CMIP6/src/transformation/domain_algorithm_transformation.cpp	(revision 1403)
@@ -48,11 +48,15 @@
   CClientClientDHTInt::Index2VectorInfoTypeMap globalIndex2ProcRank;
   globalIndex2ProcRank.rehash(std::ceil(nIndexSize/globalIndex2ProcRank.max_load_factor()));
+  CArray<bool,1>& localMask=domainSrc_->localMask ;
   for (int idx = 0; idx < nIndexSize; ++idx)
   {
-    i_ind=domainSrc_->i_index(idx) ;
-    j_ind=domainSrc_->j_index(idx) ;
+    if (localMask(idx))
+    {
+      i_ind=domainSrc_->i_index(idx) ;
+      j_ind=domainSrc_->j_index(idx) ;
 
-    globalIndex = i_ind + j_ind * niGlob;
-    globalIndex2ProcRank[globalIndex].push_back(clientRank);
+      globalIndex = i_ind + j_ind * niGlob;
+      globalIndex2ProcRank[globalIndex].push_back(clientRank);
+    }
   }
 
Index: XIOS/dev/XIOS_DEV_CMIP6/src/transformation/scalar_algorithm_transformation.cpp
===================================================================
--- XIOS/dev/XIOS_DEV_CMIP6/src/transformation/scalar_algorithm_transformation.cpp	(revision 1402)
+++ XIOS/dev/XIOS_DEV_CMIP6/src/transformation/scalar_algorithm_transformation.cpp	(revision 1403)
@@ -70,12 +70,15 @@
     CArray<int,1>& jIndex = domainSrc_->j_index;
     int niGlo = domainSrc_->ni_glo;
-
+    CArray<bool,1>& localMask = domainSrc_ -> localMask ;
     CClientClientDHTInt::Index2VectorInfoTypeMap globalIndex2ProcRank;
     globalIndex2ProcRank.rehash(std::ceil(nIndexSize/globalIndex2ProcRank.max_load_factor()));
     for (int idx = 0; idx < nIndexSize; ++idx)
     {
-      globalIndex = jIndex(idx) * niGlo + iIndex(idx);
-      globalIndex2ProcRank[globalIndex].resize(1);
-      globalIndex2ProcRank[globalIndex][0] = clientRank;
+      if (localMask(idx))
+      {
+        globalIndex = jIndex(idx) * niGlo + iIndex(idx);
+        globalIndex2ProcRank[globalIndex].resize(1);
+        globalIndex2ProcRank[globalIndex][0] = clientRank;
+      }
     }
 
@@ -90,9 +93,14 @@
     CClientClientDHTInt::Index2VectorInfoTypeMap globalIndex2ProcRank;
     globalIndex2ProcRank.rehash(std::ceil(nIndexSize/globalIndex2ProcRank.max_load_factor()));
+    CArray<bool,1>& localMask = axisSrc_ -> mask ;
+   
     for (int idx = 0; idx < nIndexSize; ++idx)
     {
-      globalIndex = axisSrc_->index(idx);
-      globalIndex2ProcRank[globalIndex].resize(1);
-      globalIndex2ProcRank[globalIndex][0] = clientRank;
+      if (localMask(idx))
+      {
+        globalIndex = axisSrc_->index(idx);
+        globalIndex2ProcRank[globalIndex].resize(1);
+        globalIndex2ProcRank[globalIndex][0] = clientRank;
+      }
     }
 
