Index: XIOS/trunk/src/node/domain.cpp
===================================================================
--- XIOS/trunk/src/node/domain.cpp	(revision 892)
+++ XIOS/trunk/src/node/domain.cpp	(revision 893)
@@ -896,5 +896,46 @@
 
    //----------------------------------------------------------------
-
+   void CDomain::computeLocalMask(void)
+   {
+     localMask.resize(ni*nj) ;
+     localMask=false ;
+     size_t zoom_ibegin=global_zoom_ibegin ;
+     size_t zoom_iend=global_zoom_ibegin+global_zoom_ni-1 ;
+     size_t zoom_jbegin=global_zoom_jbegin ;
+     size_t zoom_jend=global_zoom_jbegin+global_zoom_nj-1 ;
+
+     
+     size_t dn=data_i_index.numElements() ;
+     int i,j ;
+     size_t k,ind ;
+     
+     for(k=0;k<dn;k++)
+     {
+       if (data_dim==2)
+       {
+          i=data_i_index(k)+data_ibegin ;
+          j=data_j_index(k)+data_jbegin ;
+       }
+       else
+       {
+          i=(data_i_index(k)+data_ibegin)%ni ;
+          j=(data_i_index(k)+data_ibegin)/ni ;          
+       }
+
+       if (i>=0 && i<ni && j>=0 && j<nj)
+         if (i+ibegin>=zoom_ibegin && i+ibegin<=zoom_iend && j+jbegin>=zoom_jbegin && j+jbegin<=zoom_jend)
+         {
+           ind=i+ni*j ;
+           localMask(ind)=mask_1d(ind) ;
+         }
+     }
+   }
+       
+         
+     
+
+     
+
+   
    void CDomain::checkEligibilityForCompressedOutput(void)
    {
@@ -1188,4 +1229,5 @@
          this->checkDomainData();
          this->checkCompression();
+         this->computeLocalMask() ;
       }
       else
@@ -1227,4 +1269,5 @@
          this->checkDomainData();
          this->checkCompression();
+         this->computeLocalMask() ;
 
       }
Index: XIOS/trunk/src/node/domain.hpp
===================================================================
--- XIOS/trunk/src/node/domain.hpp	(revision 892)
+++ XIOS/trunk/src/node/domain.hpp	(revision 893)
@@ -159,5 +159,5 @@
          static ENodeType GetType(void);
          const std::map<int, vector<size_t> >& getIndexServer() const;
-         CArray<int, 2> local_mask;
+         CArray<bool, 1> localMask;
          bool isCurvilinear ;
          bool hasBounds ;
@@ -177,4 +177,5 @@
          void checkLonLat();
          void checkZoom(void);
+         void computeLocalMask(void) ;
 
          void checkTransformations();
Index: XIOS/trunk/src/transformation/domain_algorithm_interpolate.cpp
===================================================================
--- XIOS/trunk/src/transformation/domain_algorithm_interpolate.cpp	(revision 892)
+++ XIOS/trunk/src/transformation/domain_algorithm_interpolate.cpp	(revision 893)
@@ -233,18 +233,8 @@
   mapper.setVerbosity(PROGRESS) ;
 
-
-  CArray<bool,1> localMask(nSrcLocal) ;
-  localMask=false ;
-  size_t ndata=domainSrc_->data_i_index.numElements() ;
-  for (int idx=0; idx < ndata; ++idx)
-  {
-    size_t ind = domainSrc_->data_j_index(idx)*domainSrc_->ni+domainSrc_->data_i_index(idx) ;
-    localMask(ind)=domainSrc_->mask_1d(ind) ;
-  }
-     
      
   // supress masked data for the source
   int nSrcLocalUnmasked = 0 ;
-  for (int idx=0 ; idx < nSrcLocal; idx++) if (localMask(idx)) ++nSrcLocalUnmasked ;
+  for (int idx=0 ; idx < nSrcLocal; idx++) if (domainSrc_->localMask(idx)) ++nSrcLocalUnmasked ;
 
 
@@ -256,5 +246,5 @@
   for (int idx=0 ; idx < nSrcLocal; idx++)
   {
-    if (localMask(idx))
+    if (domainSrc_->localMask(idx))
     {
       for(int n=0;n<nVertexSrc;++n)
@@ -268,15 +258,7 @@
   }
 
-  localMask.resize(nDstLocal) ;
-  localMask=false ;
-  ndata=domainDest_->data_i_index.numElements() ;
-  for (int idx=0; idx < ndata; ++idx)
-  {
-    size_t ind = domainDest_->data_j_index(idx)*domainDest_->ni+domainDest_->data_i_index(idx) ;
-    localMask(ind)=domainDest_->mask_1d(ind) ;
-  }
-     
+
   int nDstLocalUnmasked = 0 ;
-  for (int idx=0 ; idx < nDstLocal; idx++) if (localMask(idx)) ++nDstLocalUnmasked ;
+  for (int idx=0 ; idx < nDstLocal; idx++) if (domainDest_->localMask(idx)) ++nDstLocalUnmasked ;
 
   CArray<double,2> boundsLonDestUnmasked(nVertexDest,nDstLocalUnmasked);
@@ -287,5 +269,5 @@
   for (int idx=0 ; idx < nDstLocal; idx++)
   {
-    if (localMask(idx))
+    if (domainDest_->localMask(idx))
     {
       for(int n=0;n<nVertexDest;++n)
