Ignore:
Timestamp:
03/22/18 10:43:20 (6 years ago)
Author:
yushan
Message:

branch_openmp merged with XIOS_DEV_CMIP6@1459

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/branch_openmp/src/distribution_server.cpp

    r1205 r1460  
    1111 
    1212namespace xios { 
    13  
    14 CDistributionServer::CDistributionServer(int rank, int dims, const CArray<size_t,1>& globalIndex) 
    15   : CDistribution(rank, dims, globalIndex), nGlobal_(), nZoomSize_(), nZoomBegin_(), globalLocalIndexMap_() 
    16 { 
    17 } 
    18  
    19 CDistributionServer::CDistributionServer(int rank, const std::vector<int>& nZoomBegin, 
    20                                          const std::vector<int>& nZoomSize, const std::vector<int>& nGlobal) 
    21   : CDistribution(rank, nGlobal.size()), nGlobal_(nGlobal), nZoomSize_(nZoomSize), nZoomBegin_(nZoomBegin), globalLocalIndexMap_() 
    22 { 
    23   createGlobalIndex(); 
    24 } 
    2513 
    2614CDistributionServer::CDistributionServer(int rank, const std::vector<int>& nZoomBegin, 
     
    3725                                        const std::vector<CArray<int,1> >& globalIndexElements, 
    3826                                        const CArray<int,1>& elementOrder, 
    39                                         const std::vector<int>& nZoomBeginServer, 
    40                                         const std::vector<int>& nZoomSizeServer, 
     27                                        const std::vector<int>& nZoomBegin, 
     28                                        const std::vector<int>& nZoomSize, 
    4129                                        const std::vector<int>& nZoomBeginGlobal, 
    4230                                        const std::vector<int>& nGlobal) 
    4331  : CDistribution(rank, nGlobal.size()), nGlobal_(nGlobal), nZoomBeginGlobal_(nZoomBeginGlobal), 
    44     nZoomSize_(nZoomSizeServer), nZoomBegin_(nZoomBeginServer), globalLocalIndexMap_() 
     32    nZoomSize_(nZoomSize), nZoomBegin_(nZoomBegin), globalLocalIndexMap_() 
    4533{ 
    4634  createGlobalIndex(globalIndexElements, elementOrder); 
     
    184172/*! 
    185173  Compute local index for writing data on server 
    186   \param [in] globalIndex global index received from client 
    187   \return local index of written data 
    188 */ 
    189 CArray<size_t,1> CDistributionServer::computeLocalIndex(const CArray<size_t,1>& globalIndex) 
    190 { 
    191   int ssize = globalIndex.numElements(); 
    192   CArray<size_t,1> localIndex(ssize); 
     174  \param [in] globalIndex Global index received from client 
     175*/ 
     176void CDistributionServer::computeLocalIndex(CArray<size_t,1>& globalIndex) 
     177{ 
     178  size_t ssize = globalIndex.numElements(); 
     179  size_t localIndexSize = std::min(globalIndex_.numElements(), ssize); 
     180  CArray<size_t,1> localIndex(localIndexSize); 
    193181  GlobalLocalMap::const_iterator ite = globalLocalIndexMap_.end(), it; 
    194   for (int idx = 0; idx < ssize; ++idx) 
     182  int i = 0; 
     183  for (size_t idx = 0; idx < ssize; ++idx) 
    195184  { 
    196185    it = globalLocalIndexMap_.find(globalIndex(idx)); 
    197186    if (ite != it) 
    198       localIndex(idx) = it->second; 
    199   } 
    200  
    201   return localIndex; 
    202 } 
    203  
    204 /*! 
    205   Compute local index for writing data on server 
    206   \param [in] globalIndex Global index received from client 
    207 */ 
    208 void CDistributionServer::computeLocalIndex(CArray<size_t,1>& globalIndex) 
    209 { 
    210   int ssize = globalIndex.numElements(); 
    211   CArray<size_t,1> localIndex(ssize); 
    212   GlobalLocalMap::const_iterator ite = globalLocalIndexMap_.end(), it; 
    213   for (int idx = 0; idx < ssize; ++idx) 
    214   { 
    215     it = globalLocalIndexMap_.find(globalIndex(idx)); 
    216     if (ite != it) 
    217       localIndex(idx) = it->second; 
     187    { 
     188      localIndex(i) = it->second; 
     189      ++i; 
     190    } 
    218191  } 
    219192 
     
    234207} 
    235208 
     209/*! 
     210  Get the size of grid index in server (e.x: sizeGrid *= size of each dimensiion) 
     211*/ 
     212int CDistributionServer::getGridSize() const 
     213{ 
     214   return globalLocalIndexMap_.size(); 
     215} 
    236216 
    237217const std::vector<int>& CDistributionServer::getZoomBeginGlobal() const 
     
    249229  return nZoomSize_; 
    250230} 
     231 
     232void CDistributionServer::partialClear(void) 
     233{ 
     234  GlobalLocalMap void1 ; 
     235  globalLocalIndexMap_.swap(void1) ; 
     236} 
     237   
    251238} // namespace xios 
Note: See TracChangeset for help on using the changeset viewer.