Ignore:
Timestamp:
11/19/18 15:52:54 (5 years ago)
Author:
yushan
Message:

branch_openmp merged with trunk r1597

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_trunk_omp/src/filter/spatial_transform_filter.cpp

    r1542 r1601  
     1#include "mpi.hpp" 
    12#include "spatial_transform_filter.hpp" 
    23#include "grid_transformation.hpp" 
     
    45#include "context_client.hpp" 
    56#include "timer.hpp" 
     7using namespace ep_lib; 
    68 
    79namespace xios 
     
    140142  } 
    141143 
    142   std::map<CGridTransformation*, std::shared_ptr<CSpatialTransformFilterEngine> > CSpatialTransformFilterEngine::engines; 
     144  std::map<CGridTransformation*, std::shared_ptr<CSpatialTransformFilterEngine> > *CSpatialTransformFilterEngine::engines_ptr = 0; 
    143145 
    144146  CSpatialTransformFilterEngine* CSpatialTransformFilterEngine::get(CGridTransformation* gridTransformation) 
     
    147149      ERROR("CSpatialTransformFilterEngine& CSpatialTransformFilterEngine::get(CGridTransformation* gridTransformation)", 
    148150            "Impossible to get the requested engine, the grid transformation is invalid."); 
    149  
    150     std::map<CGridTransformation*, std::shared_ptr<CSpatialTransformFilterEngine> >::iterator it = engines.find(gridTransformation); 
    151     if (it == engines.end()) 
     151     
     152    if(engines_ptr == NULL) engines_ptr = new std::map<CGridTransformation*, std::shared_ptr<CSpatialTransformFilterEngine> >; 
     153 
     154 
     155    std::map<CGridTransformation*, std::shared_ptr<CSpatialTransformFilterEngine> >::iterator it = engines_ptr->find(gridTransformation); 
     156    if (it == engines_ptr->end()) 
    152157    { 
    153158      std::shared_ptr<CSpatialTransformFilterEngine> engine(new CSpatialTransformFilterEngine(gridTransformation)); 
    154       it = engines.insert(std::make_pair(gridTransformation, engine)).first; 
     159      it = engines_ptr->insert(std::make_pair(gridTransformation, engine)).first; 
    155160    } 
    156161 
     
    230235 
    231236      idxSendBuff = 0; 
    232       std::vector<MPI_Request> sendRecvRequest; 
     237      std::vector<MPI_Request> sendRecvRequest(localIndexToSend.size() + itListRecv->size()); 
     238      int position = 0; 
    233239      for (itSend = itbSend; itSend != iteSend; ++itSend, ++idxSendBuff) 
    234240      { 
     
    240246          sendBuff[idxSendBuff][idx] = dataCurrentSrc(localIndex_p(idx)); 
    241247        } 
    242         sendRecvRequest.push_back(MPI_Request()); 
    243         MPI_Isend(sendBuff[idxSendBuff], countSize, MPI_DOUBLE, destRank, 12, client->intraComm, &sendRecvRequest.back()); 
     248        MPI_Isend(sendBuff[idxSendBuff], countSize, MPI_DOUBLE, destRank, 12, client->intraComm, &sendRecvRequest[position++]); 
    244249      } 
    245250 
     
    258263        int srcRank = itRecv->first; 
    259264        int countSize = itRecv->second.size(); 
    260         sendRecvRequest.push_back(MPI_Request()); 
    261         MPI_Irecv(recvBuff + currentBuff, countSize, MPI_DOUBLE, srcRank, 12, client->intraComm, &sendRecvRequest.back()); 
     265        MPI_Irecv(recvBuff + currentBuff, countSize, MPI_DOUBLE, srcRank, 12, client->intraComm, &sendRecvRequest[position++]); 
    262266        currentBuff += countSize; 
    263267      } 
Note: See TracChangeset for help on using the changeset viewer.