Ignore:
Timestamp:
01/08/18 16:46:46 (6 years ago)
Author:
oabramkina
Message:

Taking into account a possibility of having a hole on the client side (NEMO-like grid).

Location:
XIOS/dev/XIOS_DEV_CMIP6/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/XIOS_DEV_CMIP6/src/io/nc4_data_output.cpp

    r1333 r1390  
    128128           for (int idx = 0; idx < nbWritten; ++idx) 
    129129           { 
    130               writtenLat(idx) = domain->latvalue(indexToWrite(idx)); 
    131               writtenLon(idx) = domain->lonvalue(indexToWrite(idx)); 
     130                  if (idx < domain->latvalue.numElements()) 
     131                  { 
     132                writtenLat(idx) = domain->latvalue(indexToWrite(idx)); 
     133                writtenLon(idx) = domain->lonvalue(indexToWrite(idx)); 
     134                  } 
     135                  else 
     136                  { 
     137                writtenLat(idx) = 0.; 
     138                writtenLon(idx) = 0.; 
     139                  } 
    132140           } 
    133141          
     
    143151               for (int nv = 0; nv < nvertex; ++nv) 
    144152               { 
    145                  writtenBndsLat(nv, idx) = boundslat(nv, int(indexToWrite(idx))); 
    146                  writtenBndsLon(nv, idx) = boundslon(nv, int(indexToWrite(idx))); 
     153                 if (idx < boundslat.columns()) 
     154                 { 
     155                   writtenBndsLat(nv, idx) = boundslat(nv, int(indexToWrite(idx))); 
     156                   writtenBndsLon(nv, idx) = boundslon(nv, int(indexToWrite(idx))); 
     157                 } 
     158                 else 
     159                 { 
     160                   writtenBndsLat(nv, idx) = 0.; 
     161                   writtenBndsLon(nv, idx) = 0.; 
     162                 } 
    147163               } 
    148164           } 
     
    154170           for (int idx = 0; idx < nbWritten; ++idx) 
    155171           { 
    156               writtenArea(idx) = domain->areavalue(indexToWrite(idx));                       
     172                  if (idx < domain->areavalue.numElements()) 
     173                writtenArea(idx) = domain->areavalue(indexToWrite(idx)); 
     174                  else 
     175                writtenArea(idx) = 0.; 
    157176           } 
    158177         } 
     
    940959           for (int idx = 0; idx < nbWritten; ++idx) 
    941960           { 
    942               writtenLat(idx) = domain->latvalue(indexToWrite(idx)); 
    943               writtenLon(idx) = domain->lonvalue(indexToWrite(idx)); 
    944            } 
     961             if (idx < domain->latvalue.numElements()) 
     962             { 
     963               writtenLat(idx) = domain->latvalue(indexToWrite(idx)); 
     964               writtenLon(idx) = domain->lonvalue(indexToWrite(idx)); 
     965             } 
     966             else 
     967             { 
     968               writtenLat(idx) = 0.; 
     969               writtenLon(idx) = 0.; 
     970             } 
     971           } 
     972         } 
    945973          
    946  
    947            if (domain->hasBounds) 
    948            {          
    949              int nvertex = domain->nvertex, idx; 
    950              writtenBndsLat.resize(nvertex, nbWritten); 
    951              writtenBndsLon.resize(nvertex, nbWritten); 
    952              CArray<double,2>& boundslat = domain->bounds_latvalue; 
    953              CArray<double,2>& boundslon = domain->bounds_lonvalue;    
    954              for (idx = 0; idx < nbWritten; ++idx) 
    955                for (int nv = 0; nv < nvertex; ++nv) 
     974         if (domain->hasBounds) 
     975         { 
     976           int nvertex = domain->nvertex, idx; 
     977           writtenBndsLat.resize(nvertex, nbWritten); 
     978           writtenBndsLon.resize(nvertex, nbWritten); 
     979           CArray<double,2>& boundslat = domain->bounds_latvalue; 
     980           CArray<double,2>& boundslon = domain->bounds_lonvalue; 
     981           for (idx = 0; idx < nbWritten; ++idx) 
     982           { 
     983             for (int nv = 0; nv < nvertex; ++nv) 
     984             { 
     985               if (idx < boundslat.columns()) 
    956986               { 
    957987                 writtenBndsLat(nv, idx) = boundslat(nv, int(indexToWrite(idx))); 
    958988                 writtenBndsLon(nv, idx) = boundslon(nv, int(indexToWrite(idx))); 
    959989               } 
     990               else 
     991               { 
     992                 writtenBndsLat(nv, idx) = 0.; 
     993                 writtenBndsLon(nv, idx) = 0.; 
     994                } 
     995             } 
    960996           } 
    961997         } 
     
    9661002           for (int idx = 0; idx < nbWritten; ++idx) 
    9671003           { 
    968               writtenArea(idx) = domain->areavalue(indexToWrite(idx));                       
     1004                  if (idx < domain->areavalue.numElements()) 
     1005                writtenArea(idx) = domain->areavalue(indexToWrite(idx)); 
     1006                  else 
     1007                writtenArea(idx) = 0.; 
    9691008           } 
    9701009         } 
  • XIOS/dev/XIOS_DEV_CMIP6/src/node/domain.cpp

    r1364 r1390  
    19021902                                       itSrve = writtenGlobalIndex.end(), itSrv; 
    19031903 
     1904//      for (itSrv = itSrvb; itSrv != itSrve; ++itSrv) 
     1905//      { 
     1906//        indGlo = *itSrv; 
     1907//        if (ite != globalLocalIndexMap_.find(indGlo)) 
     1908//        { 
     1909//          ++nbWritten; 
     1910//        } 
     1911//      } 
     1912 
     1913//      localIndexToWriteOnServer.resize(nbWritten); 
     1914      localIndexToWriteOnServer.resize(writtenGlobalIndex.numElements()); 
     1915 
     1916      nbWritten = 0; 
    19041917      for (itSrv = itSrvb; itSrv != itSrve; ++itSrv) 
    19051918      { 
    19061919        indGlo = *itSrv; 
    19071920        if (ite != globalLocalIndexMap_.find(indGlo)) 
    1908         {           
    1909           ++nbWritten; 
    1910         }                  
    1911       } 
    1912  
    1913       localIndexToWriteOnServer.resize(nbWritten); 
    1914  
    1915       nbWritten = 0; 
    1916       for (itSrv = itSrvb; itSrv != itSrve; ++itSrv) 
    1917       { 
    1918         indGlo = *itSrv; 
    1919         if (ite != globalLocalIndexMap_.find(indGlo)) 
    19201921        { 
    19211922          localIndexToWriteOnServer(nbWritten) = globalLocalIndexMap_[indGlo]; 
    19221923          ++nbWritten; 
    1923         }                  
     1924        } 
     1925        else 
     1926        { 
     1927          localIndexToWriteOnServer(nbWritten) = 0; 
     1928          ++nbWritten; 
     1929        } 
    19241930      } 
    19251931       
  • XIOS/dev/XIOS_DEV_CMIP6/src/node/grid.hpp

    r1353 r1390  
    475475        if (2 == axisDomainOrder(i)) 
    476476        { 
    477           maskValue = maskValue && (*domainMasks[idxDomain])(idxLoop[indexMap[i]] + idxLoop[indexMap[i]+1] * eachDimSize[indexMap[i]]); 
     477          int idxTmp = idxLoop[indexMap[i]] + idxLoop[indexMap[i]+1] * eachDimSize[indexMap[i]]; 
     478          if (idxTmp < (*domainMasks[idxDomain]).numElements()) 
     479            maskValue = maskValue && (*domainMasks[idxDomain])(idxTmp); 
     480          else 
     481            maskValue = false; 
    478482          ++idxDomain; 
    479483        } 
Note: See TracChangeset for help on using the changeset viewer.