Changeset 1420 for XIOS/dev


Ignore:
Timestamp:
02/08/18 14:40:41 (6 years ago)
Author:
ymipsl
Message:

bug fix when using 3dmask on NonDistributed? transformation.

YM

Location:
XIOS/dev/XIOS_DEV_CMIP6/src/transformation
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/XIOS_DEV_CMIP6/src/transformation/generic_algorithm_transformation.cpp

    r1408 r1420  
    995995  gridSrc->getLocalMask(localMaskOnSrcGrid) ; 
    996996// intermediate grid, mask is not initialized => set up mask to true 
    997   if (localMaskOnSrcGrid.isEmpty()) localMaskOnSrcGrid.resize(nlocalIndexSrc) ; 
    998   localMaskOnSrcGrid=true ; 
     997  if (localMaskOnSrcGrid.isEmpty()) 
     998  { 
     999    localMaskOnSrcGrid.resize(nlocalIndexSrc) ; 
     1000    localMaskOnSrcGrid=true ; 
     1001  } 
    9991002   
    10001003 
     
    10241027  int currentInd ; 
    10251028  int t=0 ;   
    1026  
    1027    
    1028   nonDistributedrecursiveFunct(nElement-1,elementPositionInGrid,maskSrc,maskDst, srcInd, nIndexSrc, t, dstIndWeight,   
     1029  int srcIndCompressed=0 ; 
     1030   
     1031  nonDistributedrecursiveFunct(nElement-1,true,elementPositionInGrid,maskSrc,maskDst, srcInd, srcIndCompressed, nIndexSrc, t, dstIndWeight,   
    10291032                               currentInd,localSrc,localDst,weight, localMaskOnSrcGrid, localMaskOnGridDest ); 
    10301033                
     
    10321035 
    10331036 
    1034 void CGenericAlgorithmTransformation::nonDistributedrecursiveFunct(int currentPos, int elementPositionInGrid, vector< CArray<bool,1>* >& maskSrc, vector< CArray<bool,1>* >& maskDst, int& srcInd, vector<int>& nIndexSrc, int& t, vector<vector<vector<pair<int,double> > > >& dstIndWeight, int currentInd, 
     1037void CGenericAlgorithmTransformation::nonDistributedrecursiveFunct(int currentPos, bool masked, int elementPositionInGrid, vector< CArray<bool,1>* >& maskSrc, vector< CArray<bool,1>* >& maskDst, int& srcInd, int& srcIndCompressed, vector<int>& nIndexSrc, int& t, vector<vector<vector<pair<int,double> > > >& dstIndWeight, int currentInd, 
    10351038                    vector<int>& localSrc, vector<int>& localDst, vector<double>& weight,  CArray<bool,1>& localMaskOnGridSrc, vector<bool>& localMaskOnGridDest ) 
    10361039{ 
     
    10431046      for(int i=0;i<nIndexSrc[currentPos];i++) 
    10441047      { 
    1045         if (mask(i)) 
    1046         { 
    1047           nonDistributedrecursiveFunct(currentPos-1, elementPositionInGrid, maskSrc, maskDst, srcInd, nIndexSrc, t, dstIndWeight, currentInd, localSrc, localDst, weight, localMaskOnGridSrc, localMaskOnGridDest) ; 
    1048         } 
     1048        if (!mask(i)) masked=false ; 
     1049        nonDistributedrecursiveFunct(currentPos-1, masked, elementPositionInGrid, maskSrc, maskDst, srcInd, srcIndCompressed, nIndexSrc, t, dstIndWeight, currentInd, localSrc, localDst, weight, localMaskOnGridSrc, localMaskOnGridDest) ; 
    10491050      } 
    10501051    } 
     
    10541055      for(int i=0;i<nIndexSrc[currentPos];i++) 
    10551056      { 
    1056         if (mask(i)) 
     1057        if (masked && mask(i)) 
    10571058        { 
    10581059          if (dstIndWeight[t][currentInd].size()>0) 
     
    10621063              if (localMaskOnGridSrc(srcInd)) 
    10631064              { 
    1064                 localSrc.push_back(srcInd) ; 
     1065                localSrc.push_back(srcIndCompressed) ; 
    10651066                localDst.push_back(it->first) ; 
    10661067                weight.push_back(it->second) ; 
     
    10691070              (it->first)++ ; 
    10701071            } 
     1072            if (localMaskOnGridSrc(srcInd)) srcIndCompressed ++ ; 
    10711073          } 
    1072           srcInd++ ; 
    10731074          if (t < dstIndWeight.size()-1) t++ ; 
    10741075        } 
     1076        srcInd++ ; 
    10751077      } 
    10761078    } 
     
    10861088      { 
    10871089        t=0 ; 
    1088         if (mask(i)) 
    1089         { 
    1090           nonDistributedrecursiveFunct(currentPos-1, elementPositionInGrid, maskSrc, maskDst, srcInd, nIndexSrc, t, dstIndWeight , i,  localSrc, localDst, weight, localMaskOnGridSrc, localMaskOnGridDest) ; 
    1091         } 
     1090        if (!mask(i)) masked=false ;  
     1091        nonDistributedrecursiveFunct(currentPos-1, masked, elementPositionInGrid, maskSrc, maskDst, srcInd, srcIndCompressed, nIndexSrc, t, dstIndWeight , i,  localSrc, localDst, weight, localMaskOnGridSrc, localMaskOnGridDest) ; 
    10921092      } 
    10931093    } 
     
    10961096      for(int i=0;i<nIndexSrc[currentPos];i++) 
    10971097      { 
    1098         t=0 ;         
    1099         if (dstIndWeight[t][i].size()>0) 
    1100         { 
    1101           for(vector<pair<int,double> >::iterator it = dstIndWeight[t][i].begin(); it!=dstIndWeight[t][i].end(); ++it) 
     1098        if (masked) 
     1099        { 
     1100          t=0 ;         
     1101          if (dstIndWeight[t][i].size()>0) 
    11021102          { 
    1103             if (localMaskOnGridSrc(srcInd)) 
     1103            for(vector<pair<int,double> >::iterator it = dstIndWeight[t][i].begin(); it!=dstIndWeight[t][i].end(); ++it) 
    11041104            { 
    1105               localSrc.push_back(srcInd) ; 
    1106               localDst.push_back(it->first) ; 
    1107               weight.push_back(it->second) ; 
    1108               localMaskOnGridDest[it->first]=true ; 
     1105              if (localMaskOnGridSrc(srcInd)) 
     1106              { 
     1107                localSrc.push_back(srcIndCompressed) ; 
     1108                localDst.push_back(it->first) ; 
     1109                weight.push_back(it->second) ; 
     1110                localMaskOnGridDest[it->first]=true ; 
     1111              } 
     1112              (it->first)++ ; 
    11091113            } 
    1110             (it->first)++ ; 
     1114            if (localMaskOnGridSrc(srcInd)) srcIndCompressed ++ ; 
    11111115          } 
     1116          if (t < dstIndWeight.size()-1) t++ ; 
    11121117        } 
    11131118        srcInd++ ; 
    1114         if (t < dstIndWeight.size()-1) t++ ; 
    11151119      } 
    11161120    } 
  • XIOS/dev/XIOS_DEV_CMIP6/src/transformation/generic_algorithm_transformation.hpp

    r1404 r1420  
    8989  void computeTransformationMappingNonDistributed(int elementPositionInGrid, CGrid* gridSrc, CGrid* gridDst, 
    9090                                                  vector<int>& localSrc, vector<int>& localDst, vector<double>& weight, vector<bool>& localMaskOnGridDest); 
    91   void nonDistributedrecursiveFunct(int currentPos, int elementPositionInGrid,  vector< CArray<bool,1>* >& maskSrc, vector< CArray<bool,1>* >& maskDst, int& srcInd, vector<int>& nIndexSrc, int& t, vector<vector<vector<pair<int,double> > > >& dstIndWeight, int currentInd, 
     91  void nonDistributedrecursiveFunct(int currentPos, bool masked, int elementPositionInGrid,  vector< CArray<bool,1>* >& maskSrc, vector< CArray<bool,1>* >& maskDst, int& srcInd, int& srcIndCompressed, vector<int>& nIndexSrc, int& t, vector<vector<vector<pair<int,double> > > >& dstIndWeight, int currentInd, 
    9292                                     vector<int>& localSrc, vector<int>& localDst, vector<double>& weight, CArray<bool,1>& localMaskOnGridSrc, vector<bool>& localMaskOnGridDest) ; 
    9393 
Note: See TracChangeset for help on using the changeset viewer.