Ignore:
Timestamp:
09/22/20 16:28:47 (4 years ago)
Author:
ymipsl
Message:

XIOS Coupling branch : Solve spurious situation :

  • when client have no data on their local grid or local grid is 0 sized
  • when sever have no data on their local grid or local grid is 0 sized
  • holes in grid (missing global point) that cover a full client or a full server

YM

Location:
XIOS/dev/dev_ym/XIOS_COUPLING/src/node
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/node/axis.cpp

    r1934 r1938  
    18401840      gathererConnector_->transfer(event, 2, value, 0.);  
    18411841      bounds.resize(2,n) ; 
    1842       bounds=CArray<double,2>(bounds.dataFirst(),shape(2,n),neverDeleteData) ;  
     1842      if (bounds.numElements() > 0 ) bounds=CArray<double,2>(bounds.dataFirst(),shape(2,n),neverDeleteData) ;  
    18431843    } 
    18441844    else if (type=="label") 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/node/domain.cpp

    r1934 r1938  
    22752275        for(int rank : ranks) vectGlobalIndex[rank].push_back(index) ; 
    22762276      } 
    2277       for(auto& vect : vectGlobalIndex ) globalIndex.emplace(vect.first, CArray<size_t,1>(vect.second.data(), shape(vect.second.size()),duplicateData)) ;  
     2277      for(auto& vect : vectGlobalIndex ) globalIndex.emplace(vect.first, CArray<size_t,1>(vect.second.data(), shape(vect.second.size()),duplicateData)) ; 
     2278    // some servers receves no index (zeroIndex array) => root process take them into account. 
     2279      if (context->getIntraCommRank()==0)  
     2280        for(auto& rank : zeroIndex) globalIndex[rank] = CArray<size_t,1>() ;  
    22782281    } 
    22792282    else if (type==EDistributionType::NONE) // domain is not distributed ie all servers get the same local domain 
     
    25002503      gathererConnector_->transfer(event, value, 0.);  
    25012504      lonvalue_2d.resize(ni,nj) ; 
    2502       lonvalue_2d=CArray<double,2>(value.dataFirst(),shape(ni,nj),neverDeleteData) ;  
     2505      if (lonvalue_2d.numElements()>0) lonvalue_2d=CArray<double,2>(value.dataFirst(),shape(ni,nj),neverDeleteData) ;  
    25032506    } 
    25042507    else if (type=="lat") 
     
    25072510      gathererConnector_->transfer(event, value, 0.);  
    25082511      latvalue_2d.resize(ni,nj) ; 
    2509       latvalue_2d=CArray<double,2>(value.dataFirst(),shape(ni,nj),neverDeleteData) ;  
     2512      if (latvalue_2d.numElements()>0) latvalue_2d=CArray<double,2>(value.dataFirst(),shape(ni,nj),neverDeleteData) ;  
    25102513    } 
    25112514    else if (type=="boundslon") 
     
    25142517      gathererConnector_->transfer(event, nvertex, value, 0.);  
    25152518      bounds_lon_2d.resize(nvertex,ni,nj) ; 
    2516       bounds_lon_2d=CArray<double,3>(value.dataFirst(),shape(nvertex,ni,nj),neverDeleteData) ;  
     2519      if (bounds_lon_2d.numElements()>0) bounds_lon_2d=CArray<double,3>(value.dataFirst(),shape(nvertex,ni,nj),neverDeleteData) ;  
    25172520    } 
    25182521    else if (type=="boundslat") 
     
    25212524      gathererConnector_->transfer(event, nvertex, value, 0.);  
    25222525      bounds_lat_2d.resize(nvertex,ni,nj) ; 
    2523       bounds_lat_2d=CArray<double,3>(value.dataFirst(),shape(nvertex,ni,nj),neverDeleteData) ;  
     2526      if (bounds_lat_2d.numElements()>0) bounds_lat_2d=CArray<double,3>(value.dataFirst(),shape(nvertex,ni,nj),neverDeleteData) ;  
    25242527    } 
    25252528    else if (type=="area")  
     
    25282531      gathererConnector_->transfer(event, value, 0.);  
    25292532      area.resize(ni,nj) ; 
    2530       area=CArray<double,2>(value.dataFirst(),shape(ni,nj),neverDeleteData) ;  
     2533      if (area.numElements()>0) area=CArray<double,2>(value.dataFirst(),shape(ni,nj),neverDeleteData) ;  
    25312534    } 
    25322535  } 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/node/grid.cpp

    r1934 r1938  
    26682668      } 
    26692669    } 
    2670     CGridRemoteConnector gridRemoteConnector(localViews, remoteViews, context->getIntraComm()) ; 
     2670    CGridRemoteConnector gridRemoteConnector(localViews, remoteViews, context->getIntraComm(), client->getRemoteSize()) ; 
    26712671    gridRemoteConnector.computeConnector() ; 
    26722672     
     
    27542754      } 
    27552755    } 
    2756     CGridRemoteConnector gridRemoteConnector(localViews, remoteViews, context->getIntraComm()) ; 
     2756    CGridRemoteConnector gridRemoteConnector(localViews, remoteViews, context->getIntraComm(), client->getRemoteSize()) ; 
    27572757    gridRemoteConnector.computeConnector() ; 
    27582758     
Note: See TracChangeset for help on using the changeset viewer.