Changeset 1853
- Timestamp:
- 01/20/20 17:55:12 (4 years ago)
- Location:
- XIOS/dev/dev_ym/XIOS_COUPLING/src
- Files:
-
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_ym/XIOS_COUPLING/src/context_client.cpp
r1765 r1853 22 22 */ 23 23 CContextClient::CContextClient(CContext* parent, MPI_Comm intraComm_, MPI_Comm interComm_, CContext* cxtSer) 24 : mapBufferSize_(), parentServer(cxtSer), maxBufferedEvents(4) 24 : mapBufferSize_(), parentServer(cxtSer), maxBufferedEvents(4), associatedServer_(nullptr) 25 25 { 26 26 -
XIOS/dev/dev_ym/XIOS_COUPLING/src/context_client.hpp
r1784 r1853 14 14 { 15 15 class CContext; 16 16 class CContextServer ; 17 17 /*! 18 18 \class CContextClient … … 67 67 int getRemoteSize(void) {return serverSize;} 68 68 int getServerSize(void) {return serverSize;} 69 69 70 /*! set the associated server (dual chanel client/server) */ 71 void setAssociatedServer(CContextServer* associatedServer) { associatedServer=associatedServer_;} 72 /*! get the associated server (dual chanel client/server) */ 73 CContextServer* getAssociatedServer(void) { return associatedServer_;} 74 70 75 public: 71 76 CContext* context; //!< Context for client … … 113 118 std::vector<std::vector<MPI_Win> >windows ; //! one sided mpi windows to expose client buffers to servers == windows[nbServers][2] 114 119 bool isAttached_ ; 120 CContextServer* associatedServer_ ; //!< The server associated to the pair client/server 115 121 116 122 }; -
XIOS/dev/dev_ym/XIOS_COUPLING/src/context_server.cpp
r1765 r1853 30 30 using namespace std ; 31 31 32 CContextServer::CContextServer(CContext* parent,MPI_Comm intraComm_,MPI_Comm interComm_) : eventScheduler_(nullptr), isProcessingEvent_(false) 32 CContextServer::CContextServer(CContext* parent,MPI_Comm intraComm_,MPI_Comm interComm_) 33 : eventScheduler_(nullptr), isProcessingEvent_(false), associatedClient_(nullptr) 33 34 { 34 35 context=parent; … … 288 289 newBuffer>>size>>timeLine; 289 290 it=events.find(timeLine); 290 if (it==events.end()) it=events.insert(pair<int,CEventServer*>(timeLine,new CEventServer )).first;291 if (it==events.end()) it=events.insert(pair<int,CEventServer*>(timeLine,new CEventServer(this))).first; 291 292 it->second->push(rank,buffers[rank],startBuffer,size); 292 293 -
XIOS/dev/dev_ym/XIOS_COUPLING/src/context_server.hpp
r1764 r1853 10 10 { 11 11 class CContext ; 12 class CContextClient; 12 13 13 14 class CContextServer … … 60 61 size_t hashId ; 61 62 63 void setAssociatedClient(CContextClient* associatedClient) {associatedClient_=associatedClient ;} 64 CContextClient* getAssociatedClient(void) { return associatedClient_ ;} 65 62 66 ~CContextServer() ; 63 67 … … 67 71 CEventScheduler* eventScheduler_ ; 68 72 bool isProcessingEvent_ ; 73 CContextClient* associatedClient_ ; 69 74 } ; 70 75 -
XIOS/dev/dev_ym/XIOS_COUPLING/src/event_server.hpp
r591 r1853 8 8 namespace xios 9 9 { 10 class CContextServer ; 10 11 11 12 class CEventServer … … 17 18 int nbSender ; 18 19 20 CEventServer(CContextServer* contextServer) : contextServer_(contextServer) {} 19 21 20 22 void push(int rank,CServerBuffer* serverBuffer ,char* startBuffer,int size) ; 21 23 CContextServer* getContextServer(void) { return contextServer_ ;} 24 22 25 struct SSubEvent 23 26 { … … 32 35 bool isFull(void) ; 33 36 ~CEventServer() ; 37 private : 38 39 CContextServer* contextServer_ ; 34 40 } ; 35 41 -
XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/file_writer_filter.cpp
r1637 r1853 3 3 #include "field.hpp" 4 4 #include "utils.hpp" 5 #include "context_client.hpp" 5 6 6 7 namespace xios 7 8 { 8 CFileWriterFilter::CFileWriterFilter(CGarbageCollector& gc, CField* field )9 CFileWriterFilter::CFileWriterFilter(CGarbageCollector& gc, CField* field, CContextClient* client) 9 10 : CInputPin(gc, 1) 10 , field(field) 11 , field(field), client_(client) 11 12 { 12 13 if (!field) … … 34 35 } 35 36 36 field->sendUpdateData(dataArray );37 field->sendUpdateData(dataArray, client_); 37 38 } 38 39 -
XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/file_writer_filter.hpp
r1358 r1853 7 7 { 8 8 class CField; 9 class CContextClient ; 9 10 10 11 /*! … … 21 22 * \param field the associated field 22 23 */ 23 CFileWriterFilter(CGarbageCollector& gc, CField* field );24 CFileWriterFilter(CGarbageCollector& gc, CField* field, CContextClient* client); 24 25 25 26 /*! … … 47 48 private: 48 49 CField* field; //<! The associated field 50 CContextClient* client_ ; //! the associated context client 49 51 std::map<Time, CDataPacketPtr> packets; //<! The stored packets 50 52 }; // class CFileWriterFilter -
XIOS/dev/dev_ym/XIOS_COUPLING/src/io/nc4_data_input.cpp
r1639 r1853 47 47 { 48 48 CContext* context = CContext::getCurrent(); 49 CContextServer* server = context->server;50 49 51 50 CGrid* grid = field->grid; -
XIOS/dev/dev_ym/XIOS_COUPLING/src/io/nc4_data_output.cpp
r1847 r1853 71 71 72 72 CContext* context = CContext::getCurrent() ; 73 CContextServer* server=context->server ;74 73 75 74 if (domain->IsWritten(this->filename)) return; … … 146 145 string lonid,latid,bounds_lonid,bounds_latid ; 147 146 string areaId = "area" + appendDomid; 148 /*149 StdString lonid_loc = (server->intraCommSize > 1)150 ? StdString("lon").append(appendDomid).append("_local")151 : lonid;152 StdString latid_loc = (server->intraCommSize > 1)153 ? StdString("lat").append(appendDomid).append("_local")154 : latid;155 */156 147 157 148 CArray<int, 1>& indexToWrite = domain->localIndexToWriteOnServer; … … 246 237 SuperClassWriter::addDimension(dimVertId, domain->nvertex); 247 238 248 if ( server->intraCommSize> 1)239 if (context->intraCommSize_ > 1) 249 240 { 250 241 this->writeLocalAttributes(domain->ibegin, … … 261 252 domain->nj, 262 253 domain->ni_glo,domain->nj_glo, 263 server->intraCommRank,server->intraCommSize);254 context->intraCommRank_,context->intraCommSize_); 264 255 } 265 256 … … 300 291 301 292 302 // supress mask if ( server->intraCommSize> 1)293 // supress mask if (context->intraCommSize_ > 1) 303 294 // supress mask { 304 295 // supress mask SuperClassWriter::addVariable(maskid, NC_INT, dim0); … … 548 539 { 549 540 CContext* context = CContext::getCurrent() ; 550 CContextServer* server=context->server ;551 541 552 542 if (domain->IsWritten(this->filename)) return; … … 571 561 StdString domainName = domain->name; 572 562 domain->assignMesh(domainName, domain->nvertex); 573 domain->mesh->createMeshEpsilon( server->intraComm, domain->lonvalue, domain->latvalue, domain->bounds_lonvalue, domain->bounds_latvalue);563 domain->mesh->createMeshEpsilon(context->intraComm_, domain->lonvalue, domain->latvalue, domain->bounds_lonvalue, domain->bounds_latvalue); 574 564 575 565 StdString node_x = domainName + "_node_x"; … … 908 898 { 909 899 CContext* context = CContext::getCurrent() ; 910 CContextServer* server=context->server ;911 900 912 901 if (domain->IsWritten(this->filename)) return; … … 1814 1803 { 1815 1804 CContext* context = CContext::getCurrent() ; 1816 CContextServer* server=context->server ;1817 1805 1818 1806 std::vector<StdString> dims, coodinates; … … 2358 2346 { 2359 2347 CContext* context = CContext::getCurrent(); 2360 CContextServer* server = context->server;2361 2348 CGrid* grid = field->grid; 2362 2349 … … 2462 2449 } 2463 2450 2464 bool isRoot = ( server->intraCommRank== 0);2451 bool isRoot = (context->intraCommRank_ == 0); 2465 2452 2466 2453 if (!field->scale_factor.isEmpty() || !field->add_offset.isEmpty()) -
XIOS/dev/dev_ym/XIOS_COUPLING/src/node/axis.cpp
r1787 r1853 319 319 { 320 320 // Avoid this check at writing because it fails in case of a hole 321 if (context-> hasClient)321 if (context->getServiceType()==CServicesManager::CLIENT || context->getServiceType()==CServicesManager::GATHERER) 322 322 { 323 323 StdSize true_size = value.numElements(); … … 333 333 this->checkBounds(); 334 334 335 if (context-> hasClient)335 if (context->getServiceType()==CServicesManager::CLIENT || context->getServiceType()==CServicesManager::GATHERER) 336 336 { 337 337 this->checkMask(); … … 512 512 513 513 CContext* context=CContext::getCurrent(); 514 if (context-> hasClient && !context->hasServer) this->checkAttributes();514 if (context->getServiceType()==CServicesManager::CLIENT) this->checkAttributes(); 515 515 516 516 this->areClientAttributesChecked_ = true; … … 529 529 530 530 if (this->isClientAfterTransformationChecked) return; 531 if (context-> hasClient)531 if (context->getServiceType()==CServicesManager::CLIENT || context->getServiceType()==CServicesManager::GATHERER) 532 532 { 533 533 if (orderPositionInGrid == CServerDistributionDescription::defaultDistributedDimension(globalDim.size(), distType)) … … 556 556 557 557 if (this->isChecked) return; 558 if (context-> hasClient) sendAttributes(globalDim, orderPositionInGrid, distType);558 if (context->getServiceType()==CServicesManager::CLIENT || context->getServiceType()==CServicesManager::GATHERER) sendAttributes(globalDim, orderPositionInGrid, distType); 559 559 560 560 this->isChecked = true; … … 734 734 735 735 CContext* context=CContext::getCurrent(); 736 CContextServer* server = context->server;737 736 738 737 // We describe the distribution of client (server) on which data are written … … 742 741 nBeginGlobal[0] = 0; 743 742 nGlob[0] = n_glo; 744 CDistributionServer srvDist( server->intraCommSize, nBegin, nSize, nBeginGlobal, nGlob);743 CDistributionServer srvDist(context->intraCommSize_, nBegin, nSize, nBeginGlobal, nGlob); 745 744 const CArray<size_t,1>& writtenGlobalIndex = srvDist.getGlobalIndex(); 746 745 … … 784 783 size_t nbWritten = 0, indGlo; 785 784 CContext* context=CContext::getCurrent(); 786 CContextServer* server = context->server; 787 785 788 786 // We describe the distribution of client (server) on which data are written 789 787 std::vector<int> nBegin(1), nSize(1), nBeginGlobal(1), nGlob(1); … … 792 790 nBeginGlobal[0] = 0; 793 791 nGlob[0] = n_glo; 794 CDistributionServer srvDist( server->intraCommSize, nBegin, nSize, nBeginGlobal, nGlob);792 CDistributionServer srvDist(context->intraCommSize_, nBegin, nSize, nBeginGlobal, nGlob); 795 793 const CArray<size_t,1>& writtenGlobalIndex = srvDist.getGlobalIndex(); 796 794 std::unordered_map<size_t,size_t>::const_iterator itb = globalLocalIndexMap_.begin(), -
XIOS/dev/dev_ym/XIOS_COUPLING/src/node/context.cpp
r1848 r1853 432 432 server = new CContextServer(this,intraComm_, interCommServer); // check if we need to dupl. intraComm_ ? 433 433 client = new CContextClient(this,intraCommClient,interCommClient); 434 client->setAssociatedServer(server) ; 435 server->setAssociatedClient(client) ; 434 436 435 437 } … … 492 494 client = new CContextClient(this, intraCommClient, interCommClient); 493 495 server = new CContextServer(this, intraCommServer, interCommServer); 494 496 client->setAssociatedServer(server) ; 497 server->setAssociatedClient(client) ; 495 498 } 496 499 … … 526 529 MPI_Comm_dup(intraComm_, &intraCommServer) ; 527 530 528 529 clientPrimServer.push_back(new CContextClient(this, intraCommClient, interCommClient)); 530 serverPrimServer.push_back(new CContextServer(this, intraCommServer, interCommServer)); 531 CContextClient* client = new CContextClient(this, intraCommClient, interCommClient) ; 532 CContextServer* server = new CContextServer(this, intraCommServer, interCommServer) ; 533 client->setAssociatedServer(server) ; 534 server->setAssociatedClient(client) ; 535 clientPrimServer.push_back(client); 536 serverPrimServer.push_back(server); 537 531 538 532 539 } … … 592 599 CContextClient* client = new CContextClient(this, intraCommClient, interCommClient); 593 600 CContextServer* server = new CContextServer(this, intraCommServer, interCommServer); 601 client->setAssociatedServer(server) ; 602 server->setAssociatedClient(client) ; 594 603 } 595 604 else … … 599 608 CContextServer* server = new CContextServer(this, intraCommServer, interCommServer); 600 609 CContextClient* client = new CContextClient(this, intraCommClient, interCommClient); 610 client->setAssociatedServer(server) ; 611 server->setAssociatedClient(client) ; 601 612 } 602 613 MPI_Comm_free(&interComm) ; … … 633 644 if (server->intraCommRank==0) CXios::globalRegistry->mergeRegistry(*registryOut) ; 634 645 635 if ( hasClient && !hasServer)646 if (serviceType_==CServicesManager::CLIENT) 636 647 { 637 648 doPreTimestepOperationsForEnabledReadModeFiles(); // For now we only use server level 1 to read data … … 650 661 info(100)<<"DEBUG: context "<<getId()<<" release client ok"<<endl ; 651 662 } 652 else if ( hasClient && hasServer)663 else if (serviceType_==CServicesManager::GATHERER) 653 664 { 654 665 for (int i = 0; i < clientPrimServer.size(); ++i) … … 672 683 673 684 } 674 else if ( !hasClient && hasServer)685 else if (serviceType_==CServicesManager::IO_SERVER || serviceType_==CServicesManager::OUT_SERVER) 675 686 { 676 687 closeAllFile(); … … 724 735 checkGridEnabledFields(); 725 736 726 setClientServerBuffer(client, ( hasClient && !hasServer));737 setClientServerBuffer(client, (serviceType_==CServicesManager::CLIENT) ) ; 727 738 for (int i = 0; i < clientPrimServer.size(); ++i) 728 739 setClientServerBuffer(clientPrimServer[i], true); 729 740 730 741 731 if ( hasClient)742 if (serviceType_==CServicesManager::CLIENT || serviceType_==CServicesManager::GATHERER) 732 743 { 733 if ( hasServer)744 if (serviceType_==CServicesManager::GATHERER) 734 745 { 735 746 for (auto it=clientPrimServer.begin(); it!=clientPrimServer.end();++it) … … 739 750 } 740 751 } 741 else 752 else 742 753 { 743 754 this->sendAllAttributesToServer(client); // Send all attributes of current context to server … … 750 761 sendEnabledFiles(this->enabledWriteModeFiles); 751 762 // We only use server-level 1 (for now) to read data 752 if (!hasServer) 753 sendEnabledFiles(this->enabledReadModeFiles); 763 if (serviceType_==CServicesManager::CLIENT) sendEnabledFiles(this->enabledReadModeFiles); 754 764 755 765 // Then, send all enabled fields 756 766 sendEnabledFieldsInFiles(this->enabledWriteModeFiles); 757 if (!hasServer)758 767 768 if (serviceType_==CServicesManager::CLIENT) sendEnabledFieldsInFiles(this->enabledReadModeFiles); 759 769 760 770 // Then, check whether we have domain_ref, axis_ref or scalar_ref attached to the enabled fields 761 771 // If any, so send them to server 762 sendRefDomainsAxisScalars(this->enabledWriteModeFiles); 763 if (!hasServer)764 772 sendRefDomainsAxisScalars(this->enabledWriteModeFiles); 773 774 if (serviceType_==CServicesManager::CLIENT) sendRefDomainsAxisScalars(this->enabledReadModeFiles); 765 775 766 776 // Check whether enabled fields have grid_ref, if any, send this info to server … … 780 790 // Finally, we send information of grid itself to server 781 791 sendGridEnabledFieldsInFiles(this->enabledWriteModeFiles); 782 if (!hasServer) 783 sendGridEnabledFieldsInFiles(this->enabledReadModeFiles); 792 793 if (serviceType_==CServicesManager::CLIENT) sendGridEnabledFieldsInFiles(this->enabledReadModeFiles); 794 784 795 } 785 796 allProcessed = true; … … 790 801 TRY 791 802 { 792 // Use correct context client to send message 793 // int nbSrvPools = (hasServer) ? clientPrimServer.size() : 1; 794 int nbSrvPools = (this->hasServer) ? (this->hasClient ? this->clientPrimServer.size() : 0) : 1; 795 for (int i = 0; i < nbSrvPools; ++i) 796 { 797 CContextClient* contextClientTmp = (0 != clientPrimServer.size()) ? clientPrimServer[i] : client; 803 804 int nbSrvPools ; 805 if (serviceType_==CServicesManager::CLIENT) nbSrvPools = 1 ; 806 else if (serviceType_==CServicesManager::GATHERER) nbSrvPools = this->clientPrimServer.size() ; 807 else nbSrvPools = 0 ; 808 CContextClient* contextClientTmp ; 809 810 for (int i = 0; i < nbSrvPools; ++i) 811 { 812 if (serviceType_==CServicesManager::CLIENT) contextClientTmp = client ; 813 else if (serviceType_==CServicesManager::GATHERER ) contextClientTmp = clientPrimServer[i] ; 814 798 815 CEventClient event(getType(),EVENT_ID_POST_PROCESS_GLOBAL_ATTRIBUTES); 799 816 … … 844 861 postProcessingGlobalAttributes(); 845 862 846 if ( hasClient) sendPostProcessingGlobalAttributes();863 if (serviceType_==CServicesManager::CLIENT || serviceType_==CServicesManager::GATHERER) sendPostProcessingGlobalAttributes(); 847 864 848 865 // There are some processings that should be done after all of above. For example: check mask or index 849 866 this->buildFilterGraphOfEnabledFields(); 850 867 851 if ( hasClient && !hasServer)868 if (serviceType_==CServicesManager::CLIENT) 852 869 { 853 870 buildFilterGraphOfFieldsWithReadAccess(); … … 857 874 checkGridEnabledFields(); 858 875 859 if ( hasClient) this->sendProcessingGridOfEnabledFields();860 if ( hasClient) this->sendCloseDefinition();876 if (serviceType_==CServicesManager::CLIENT || serviceType_==CServicesManager::GATHERER) this->sendProcessingGridOfEnabledFields(); 877 if (serviceType_==CServicesManager::CLIENT || serviceType_==CServicesManager::GATHERER) this->sendCloseDefinition(); 861 878 862 879 // Nettoyage de l'arborescence 863 if (hasClient) CleanTree(); // Only on client side?? 864 865 if (hasClient) 866 { 867 sendCreateFileHeader(); 868 if (!hasServer) startPrefetchingOfEnabledReadModeFiles(); 869 } 880 if (serviceType_==CServicesManager::CLIENT || serviceType_==CServicesManager::GATHERER) CleanTree(); // Only on client side?? 881 882 if (serviceType_==CServicesManager::CLIENT || serviceType_==CServicesManager::GATHERER) sendCreateFileHeader(); 883 if (serviceType_==CServicesManager::CLIENT) startPrefetchingOfEnabledReadModeFiles(); 884 870 885 CTimer::get("Context : close definition").suspend() ; 871 886 } … … 1109 1124 const vector<CGrid*> allGrids= CGrid::getAll(); 1110 1125 1111 if (hasClient && !hasServer) 1112 //if (hasClient) 1126 if (serviceType_==CServicesManager::CLIENT) 1113 1127 { 1114 1128 for (unsigned int i = 0; i < allFiles.size(); i++) … … 1229 1243 double eps=std::numeric_limits<double>::epsilon()*10 ; 1230 1244 1231 // If primary server 1232 if (hasServer && hasClient) 1245 if (serviceType_==CServicesManager::GATHERER) 1233 1246 { 1234 1247 std::ofstream ofs(("distribute_file_"+getId()+".dat").c_str(), std::ofstream::out); … … 1310 1323 TRY 1311 1324 { 1312 // If primary server 1313 if (hasServer && hasClient) 1325 if (serviceType_==CServicesManager::GATHERER) 1314 1326 { 1315 1327 int nbPools = clientPrimServer.size(); … … 1502 1514 TRY 1503 1515 { 1504 // Use correct context client to send message 1505 int nbSrvPools = (this->hasServer) ? (this->hasClient ? this->clientPrimServer.size() : 0) : 1; 1506 for (int i = 0; i < nbSrvPools; ++i) 1507 { 1508 CContextClient* contextClientTmp = (hasServer) ? clientPrimServer[i] : client; 1516 int nbSrvPools ; 1517 if (serviceType_==CServicesManager::CLIENT) nbSrvPools = 1 ; 1518 else if (serviceType_==CServicesManager::GATHERER) nbSrvPools = this->clientPrimServer.size() ; 1519 else nbSrvPools = 0 ; 1520 CContextClient* contextClientTmp ; 1521 1522 for (int i = 0; i < nbSrvPools; ++i) 1523 { 1524 if (serviceType_==CServicesManager::CLIENT) contextClientTmp = client ; 1525 else if (serviceType_==CServicesManager::GATHERER ) contextClientTmp = clientPrimServer[i] ; 1509 1526 CEventClient event(getType(),EVENT_ID_CLOSE_DEFINITION); 1510 1527 if (contextClientTmp->isServerLeader()) … … 1534 1551 TRY 1535 1552 { 1536 // Use correct context client to send message 1537 int nbSrvPools = (this->hasServer) ? (this->hasClient ? this->clientPrimServer.size() : 0) : 1; 1538 for (int i = 0; i < nbSrvPools; ++i) 1539 { 1540 CContextClient* contextClientTmp = (hasServer) ? clientPrimServer[i] : client; 1553 int nbSrvPools ; 1554 if (serviceType_==CServicesManager::CLIENT) nbSrvPools = 1 ; 1555 else if (serviceType_==CServicesManager::GATHERER) nbSrvPools = this->clientPrimServer.size() ; 1556 else nbSrvPools = 0 ; 1557 CContextClient* contextClientTmp ; 1558 1559 for (int i = 0; i < nbSrvPools; ++i) 1560 { 1561 if (serviceType_==CServicesManager::CLIENT) contextClientTmp = client ; 1562 else if (serviceType_==CServicesManager::GATHERER ) contextClientTmp = clientPrimServer[i] ; 1541 1563 CEventClient event(getType(),EVENT_ID_UPDATE_CALENDAR); 1542 1564 … … 1544 1566 { 1545 1567 CMessage msg; 1546 if (hasServer) 1547 msg<<step; 1548 else 1549 msg<<step; 1568 msg<<step; 1550 1569 const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 1551 1570 for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) … … 1574 1593 buffer>>step; 1575 1594 updateCalendar(step); 1576 if ( hasClient && hasServer)1595 if (serviceType_==CServicesManager::GATHERER) 1577 1596 { 1578 1597 sendUpdateCalendar(step); … … 1585 1604 TRY 1586 1605 { 1587 // Use correct context client to send message 1588 // int nbSrvPools = (hasServer) ? clientPrimServer.size() : 1; 1589 int nbSrvPools = (this->hasServer) ? (this->hasClient ? this->clientPrimServer.size() : 0) : 1; 1606 int nbSrvPools ; 1607 if (serviceType_==CServicesManager::CLIENT) nbSrvPools = 1 ; 1608 else if (serviceType_==CServicesManager::GATHERER) nbSrvPools = this->clientPrimServer.size() ; 1609 else nbSrvPools = 0 ; 1610 CContextClient* contextClientTmp ; 1611 1590 1612 for (int i = 0; i < nbSrvPools; ++i) 1591 1613 { 1592 CContextClient* contextClientTmp = (hasServer) ? clientPrimServer[i] : client; 1614 if (serviceType_==CServicesManager::CLIENT) contextClientTmp = client ; 1615 else if (serviceType_==CServicesManager::GATHERER ) contextClientTmp = clientPrimServer[i] ; 1593 1616 CEventClient event(getType(),EVENT_ID_CREATE_FILE_HEADER); 1594 1617 … … 1619 1642 TRY 1620 1643 { 1621 if ( !hasClient && hasServer)1644 if (serviceType_==CServicesManager::IO_SERVER || serviceType_==CServicesManager::OUT_SERVER) 1622 1645 createFileHeader(); 1623 1646 } … … 1628 1651 TRY 1629 1652 { 1630 // Use correct context client to send message 1631 int nbSrvPools = (this->hasServer) ? (this->hasClient ? this->clientPrimServer.size() : 0) : 1; 1653 int nbSrvPools ; 1654 if (serviceType_==CServicesManager::CLIENT) nbSrvPools = 1 ; 1655 else if (serviceType_==CServicesManager::GATHERER) nbSrvPools = this->clientPrimServer.size() ; 1656 else nbSrvPools = 0 ; 1657 CContextClient* contextClientTmp ; 1658 1632 1659 for (int i = 0; i < nbSrvPools; ++i) 1633 1660 { 1634 CContextClient* contextClientTmp = (0 != clientPrimServer.size()) ? clientPrimServer[i] : client; 1661 if (serviceType_==CServicesManager::CLIENT) contextClientTmp = client ; 1662 else if (serviceType_==CServicesManager::GATHERER ) contextClientTmp = clientPrimServer[i] ; 1663 1635 1664 CEventClient event(getType(),EVENT_ID_PROCESS_GRID_ENABLED_FIELDS); 1636 1665 … … 1661 1690 TRY 1662 1691 { 1663 // Use correct context client to send message 1664 // int nbSrvPools = (hasServer) ? clientPrimServer.size() : 1; 1665 int nbSrvPools = (this->hasServer) ? (this->hasClient ? this->clientPrimServer.size() : 0) : 1; 1692 int nbSrvPools ; 1693 if (serviceType_==CServicesManager::CLIENT) nbSrvPools = 1 ; 1694 else if (serviceType_==CServicesManager::GATHERER) nbSrvPools = this->clientPrimServer.size() ; 1695 else nbSrvPools = 0 ; 1696 CContextClient* contextClientTmp ; 1697 1666 1698 for (int i = 0; i < nbSrvPools; ++i) 1667 1699 { 1668 CContextClient* contextClientTmp = (hasServer) ? clientPrimServer[i] : client; 1700 if (serviceType_==CServicesManager::CLIENT) contextClientTmp = client ; 1701 else if (serviceType_==CServicesManager::GATHERER ) contextClientTmp = clientPrimServer[i] ; 1669 1702 CEventClient event(getType(),EVENT_ID_POST_PROCESS); 1670 1703 if (contextClientTmp->isServerLeader()) … … 1732 1765 1733 1766 // The timeseries should only be prepared in client 1734 if (hasClient && !hasServer) prepareTimeseries(); 1767 1768 if (serviceType_==CServicesManager::CLIENT) prepareTimeseries(); 1735 1769 1736 1770 //Initialisation du vecteur 'enabledFiles' contenant la liste des fichiers à sortir. … … 1754 1788 // findAllEnabledFieldsInFiles(this->enabledReadModeFiles); 1755 1789 1756 if ( hasClient && !hasServer)1790 if (serviceType_==CServicesManager::CLIENT) 1757 1791 { 1758 1792 initReadFiles(); … … 1768 1802 1769 1803 // Find all fields with read access from the public API 1770 if ( hasClient && !hasServer) findFieldsWithReadAccess();1804 if (serviceType_==CServicesManager::CLIENT) findFieldsWithReadAccess(); 1771 1805 // and solve the all reference for them 1772 if ( hasClient && !hasServer) solveAllRefOfFieldsWithReadAccess();1806 if (serviceType_==CServicesManager::CLIENT) solveAllRefOfFieldsWithReadAccess(); 1773 1807 1774 1808 isPostProcessed = true; … … 1920 1954 TRY 1921 1955 { 1922 if (! hasClient) return;1956 if (!(serviceType_==CServicesManager::CLIENT || serviceType_==CServicesManager::GATHERER)) return; 1923 1957 1924 1958 const vector<CAxis*> allAxis = CAxis::getAll(); … … 1940 1974 TRY 1941 1975 { 1942 if (! hasClient) return;1976 if (!(serviceType_==CServicesManager::CLIENT || serviceType_==CServicesManager::GATHERER)) return; 1943 1977 1944 1978 const std::vector<CFile*> allFiles = CFile::getAll(); … … 2146 2180 if (prevStep < step) 2147 2181 { 2148 if ( hasClient && !hasServer) // For now we only use server level 1 to read data2182 if (serviceType_==CServicesManager::CLIENT) // For now we only use server level 1 to read data 2149 2183 { 2150 2184 doPreTimestepOperationsForEnabledReadModeFiles(); … … 2158 2192 #endif 2159 2193 2160 if ( hasClient && !hasServer) // For now we only use server level 1 to read data2194 if (serviceType_==CServicesManager::CLIENT) // For now we only use server level 1 to read data 2161 2195 { 2162 2196 doPostTimestepOperationsForEnabledReadModeFiles(); … … 2268 2302 registryOut->hierarchicalGatherRegistry() ; 2269 2303 2270 // Use correct context client to send message 2271 int nbSrvPools = (this->hasServer) ? (this->hasClient ? this->clientPrimServer.size() : 0) : 1; 2304 int nbSrvPools ; 2305 if (serviceType_==CServicesManager::CLIENT) nbSrvPools = 1 ; 2306 else if (serviceType_==CServicesManager::GATHERER) nbSrvPools = this->clientPrimServer.size() ; 2307 else nbSrvPools = 0 ; 2308 CContextClient* contextClientTmp ; 2309 2272 2310 for (int i = 0; i < nbSrvPools; ++i) 2273 2311 { 2274 CContextClient* contextClientTmp = (hasServer) ? clientPrimServer[i] : client; 2312 if (serviceType_==CServicesManager::CLIENT) contextClientTmp = client ; 2313 else if (serviceType_==CServicesManager::GATHERER ) contextClientTmp = clientPrimServer[i] ; 2314 2275 2315 CEventClient event(CContext::GetType(), CContext::EVENT_ID_SEND_REGISTRY); 2276 2277 2278 2279 2280 2281 2316 if (contextClientTmp->isServerLeader()) 2317 { 2318 CMessage msg ; 2319 if (contextClientTmp->clientRank==0) msg<<*registryOut ; 2320 const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 2321 for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 2282 2322 event.push(*itRank,1,msg); 2283 2284 2285 2323 contextClientTmp->sendEvent(event); 2324 } 2325 else contextClientTmp->sendEvent(event); 2286 2326 } 2287 2327 } -
XIOS/dev/dev_ym/XIOS_COUPLING/src/node/domain.cpp
r1787 r1853 1727 1727 1728 1728 if (this->isClientAfterTransformationChecked) return; 1729 if (context-> hasClient)1729 if (context->getServiceType()==CServicesManager::CLIENT || context->getServiceType()==CServicesManager::GATHERER) 1730 1730 { 1731 1731 this->computeConnectedClients(); 1732 1732 if (hasLonLat) 1733 if ( !context->hasServer)1733 if (context->getServiceType()==CServicesManager::CLIENT) 1734 1734 this->completeLonLatClient(); 1735 1735 } … … 1748 1748 CContext* context=CContext::getCurrent(); 1749 1749 1750 if (context-> hasClient && !context->hasServer)1750 if (context->getServiceType()==CServicesManager::CLIENT) 1751 1751 { 1752 1752 this->checkDomain(); … … 1756 1756 } 1757 1757 1758 if (context-> hasClient && !context->hasServer)1758 if (context->getServiceType()==CServicesManager::CLIENT) 1759 1759 { // Ct client uniquement 1760 1760 this->checkMask(); … … 1780 1780 1781 1781 if (this->isChecked) return; 1782 if (context-> hasClient)1782 if (context->getServiceType()==CServicesManager::CLIENT || context->getServiceType()==CServicesManager::GATHERER) 1783 1783 { 1784 1784 sendAttributes(); … … 1799 1799 this->checkArea(); 1800 1800 1801 if (context-> hasClient)1801 if (context->getServiceType()==CServicesManager::CLIENT || context->getServiceType()==CServicesManager::GATHERER) 1802 1802 { // Ct client uniquement 1803 1803 this->checkMask(); … … 1811 1811 } 1812 1812 1813 if (context-> hasClient)1813 if (context->getServiceType()==CServicesManager::CLIENT || context->getServiceType()==CServicesManager::GATHERER) 1814 1814 { 1815 1815 this->computeConnectedClients(); … … 1972 1972 1973 1973 CContext* context=CContext::getCurrent(); 1974 CContextServer* server = context->server;1975 1974 1976 1975 std::vector<int> nBegin(2), nSize(2), nBeginGlobal(2), nGlob(2); … … 1979 1978 nBeginGlobal[0] = 0; nBeginGlobal[1] = 0; 1980 1979 nGlob[0] = ni_glo; nGlob[1] = nj_glo; 1981 CDistributionServer srvDist( server->intraCommSize, nBegin, nSize, nBeginGlobal, nGlob);1980 CDistributionServer srvDist(context->intraCommSize_, nBegin, nSize, nBeginGlobal, nGlob); 1982 1981 const CArray<size_t,1>& writtenGlobalIndex = srvDist.getGlobalIndex(); 1983 1982 … … 2018 2017 size_t nbWritten = 0, indGlo; 2019 2018 CContext* context=CContext::getCurrent(); 2020 CContextServer* server = context->server;2021 2019 2022 2020 std::vector<int> nBegin(2), nSize(2), nBeginGlobal(2), nGlob(2); … … 2025 2023 nBeginGlobal[0] = 0; nBeginGlobal[1] = 0; 2026 2024 nGlob[0] = ni_glo; nGlob[1] = nj_glo; 2027 CDistributionServer srvDist( server->intraCommSize, nBegin, nSize, nBeginGlobal, nGlob);2025 CDistributionServer srvDist(context->intraCommSize_, nBegin, nSize, nBeginGlobal, nGlob); 2028 2026 const CArray<size_t,1>& writtenGlobalIndex = srvDist.getGlobalIndex(); 2029 2027 -
XIOS/dev/dev_ym/XIOS_COUPLING/src/node/field.cpp
r1847 r1853 143 143 CATCH 144 144 145 void CField::sendUpdateData(const CArray<double,1>& data )145 void CField::sendUpdateData(const CArray<double,1>& data, CContextClient* client) 146 146 TRY 147 147 { 148 148 CTimer::get("Field : send data").resume(); 149 150 CContext* context = CContext::getCurrent();151 CContextClient* client = (!context->hasServer) ? context->client : this->file->getContextClient();152 149 int receiverSize = client->serverSize; 153 150 … … 319 316 \param [in] tsDataRequested timestamp when the call is made 320 317 */ 321 bool CField::sendReadDataRequest(const CDate& tsDataRequested )318 bool CField::sendReadDataRequest(const CDate& tsDataRequested, CContextClient* client) 322 319 TRY 323 320 { 324 321 CContext* context = CContext::getCurrent(); 325 // CContextClient* client = context->client;326 327 // This code is for future: If we want to read file with level-2 servers328 CContextClient* client = (!context->hasServer) ? context->client : this->file->getContextClient();329 322 330 323 lastDataRequestedFromServer = tsDataRequested; … … 372 365 info(20) << "lastDataRequestedFromServer + file->output_freq.getValue() : " << lastDataRequestedFromServer + file->output_freq << endl ; 373 366 374 dataRequested |= sendReadDataRequest(lastDataRequestedFromServer + file->output_freq );367 dataRequested |= sendReadDataRequest(lastDataRequestedFromServer + file->output_freq, file->getContextClient()); 375 368 } 376 369 … … 385 378 StdString fieldId; 386 379 *buffer >> fieldId; 387 get(fieldId)->recvReadDataRequest( );380 get(fieldId)->recvReadDataRequest(event.getContextServer()); 388 381 } 389 382 CATCH … … 395 388 In the future, this should (only) be done by the last level servers. 396 389 */ 397 void CField::recvReadDataRequest( void)390 void CField::recvReadDataRequest(CContextServer* server) 398 391 TRY 399 392 { 400 CContext* context = CContext::getCurrent(); 401 CContextClient* client = context->client; 402 393 CContextClient* client = server->getAssociatedClient() ; 403 394 CEventClient event(getType(), EVENT_ID_READ_DATA_READY); 404 395 std::list<CMessage> msgs; … … 532 523 if (!nstepMaxRead) 533 524 { 534 MPI_Allreduce(MPI_IN_PLACE, &nstepMax, 1, MPI_INT, MPI_MAX, context-> server->intraComm);525 MPI_Allreduce(MPI_IN_PLACE, &nstepMax, 1, MPI_INT, MPI_MAX, context->intraComm_); 535 526 nstepMaxRead = true; 536 527 } … … 809 800 { 810 801 CContext* context = CContext::getCurrent(); 811 if (context-> hasClient && !context->hasServer)802 if (context->getServiceType()==CServicesManager::CLIENT) 812 803 { 813 804 if (grid && !grid->isTransformed() && hasDirectFieldReference() && grid != getDirectFieldReference()->grid) … … 826 817 { 827 818 CContext* context = CContext::getCurrent(); 828 if (context-> hasClient && !context->hasServer)819 if (context->getServiceType()==CServicesManager::CLIENT) 829 820 { 830 821 std::map<CGrid*,std::pair<bool,StdString> >& gridSrcMap = grid->getTransGridSource(); … … 913 904 { 914 905 CContext* context = CContext::getCurrent(); 915 bool hasClient = context->hasClient;916 bool hasServer = context->hasServer;917 906 918 907 if (!isReferenceSolvedAndTransformed) … … 920 909 isReferenceSolvedAndTransformed = true; 921 910 922 if ( hasClient && !hasServer)911 if (context->getServiceType()==CServicesManager::CLIENT) 923 912 { 924 913 solveRefInheritance(true); … … 926 915 } 927 916 928 if ( hasServer)917 if (context->getServiceType()==CServicesManager::GATHERER || context->getServiceType()==CServicesManager::OUT_SERVER) 929 918 solveServerOperation(); 930 919 931 920 solveGridReference(); 932 921 933 if (hasClient && !hasServer)922 if (context->getServiceType()==CServicesManager::CLIENT) 934 923 { 935 924 solveGenerateGrid(); … … 939 928 solveGridDomainAxisRef(false); 940 929 941 if ( hasClient && !hasServer)930 if (context->getServiceType()==CServicesManager::CLIENT) 942 931 { 943 932 solveTransformedGrid(); … … 984 973 isReferenceSolved = true; 985 974 986 if (context-> hasClient && !context->hasServer)975 if (context->getServiceType()==CServicesManager::CLIENT) 987 976 { 988 977 solveRefInheritance(true); … … 990 979 } 991 980 992 if (context-> hasServer)981 if (context->getServiceType()==CServicesManager::GATHERER || context->getServiceType()==CServicesManager::OUT_SERVER) 993 982 solveServerOperation(); 994 983 … … 996 985 grid->solveDomainAxisRefInheritance(true); // make it again to solve grid reading from file 997 986 998 if (context->hasClient && !context->hasServer)987 if (context->getServiceType()==CServicesManager::CLIENT) 999 988 { 1000 989 solveGenerateGrid(); … … 1015 1004 areAllReferenceSolved = true; 1016 1005 1017 if (context-> hasClient && !context->hasServer)1006 if (context->getServiceType()==CServicesManager::CLIENT) 1018 1007 { 1019 1008 solveRefInheritance(true); 1020 1009 if (hasDirectFieldReference()) getDirectFieldReference()->solveAllReferenceEnabledField(false); 1021 1010 } 1022 else if (context-> hasServer)1011 else if (context->getServiceType()==CServicesManager::GATHERER || context->getServiceType()==CServicesManager::OUT_SERVER) 1023 1012 solveServerOperation(); 1024 1013 … … 1028 1017 solveGridDomainAxisRef(doSending2Server); 1029 1018 1030 if (context-> hasClient && !context->hasServer)1019 if (context->getServiceType()==CServicesManager::CLIENT) 1031 1020 { 1032 1021 solveTransformedGrid(); … … 1065 1054 CContext* context = CContext::getCurrent(); 1066 1055 1067 if ( !context->hasServer|| !hasOutputFile) return;1056 if (context->getServiceType()==CServicesManager::CLIENT || !hasOutputFile) return; 1068 1057 1069 1058 if (freq_op.isEmpty()) … … 1126 1115 1127 1116 CContext* context = CContext::getCurrent(); 1128 bool hasWriterServer = context-> hasServer && !context->hasClient;1129 bool hasIntermediateServer = context-> hasServer && context->hasClient;1117 bool hasWriterServer = context->getServiceType()==CServicesManager::OUT_SERVER ; 1118 bool hasIntermediateServer = context->getServiceType()==CServicesManager::GATHERER ; 1130 1119 1131 1120 if (hasWriterServer) … … 1155 1144 if (file && (file->mode.isEmpty() || file->mode == CFile::mode_attr::write)) 1156 1145 { 1157 fileWriterFilter = std::shared_ptr<CFileWriterFilter>(new CFileWriterFilter(gc, this ));1146 fileWriterFilter = std::shared_ptr<CFileWriterFilter>(new CFileWriterFilter(gc, this, file->getContextClient())); 1158 1147 instantDataFilter->connectOutput(fileWriterFilter, 0); 1159 1148 } … … 1217 1206 if (file && (file->mode.isEmpty() || file->mode == CFile::mode_attr::write)) 1218 1207 { 1219 fileWriterFilter = std::shared_ptr<CFileWriterFilter>(new CFileWriterFilter(gc, this ));1208 fileWriterFilter = std::shared_ptr<CFileWriterFilter>(new CFileWriterFilter(gc, this, file->getContextClient())); 1220 1209 getTemporalDataFilter(gc, file->output_freq)->connectOutput(fileWriterFilter, 0); 1221 1210 } … … 1736 1725 CContext* context = CContext::getCurrent(); 1737 1726 client = contextClient; 1738 if (context->hasClient) 1739 { 1740 // A grid is sent by a client (both for read or write) or by primary server (write only) 1741 if (context->hasServer) 1742 { 1743 if (file->mode.isEmpty() || (!file->mode.isEmpty() && file->mode == CFile::mode_attr::write)) 1744 grid->setContextClient(contextClient); 1745 } 1746 else 1747 grid->setContextClient(contextClient); 1748 } 1727 1728 // A grid is sent by a client (both for read or write) or by primary server (write only) 1729 if (context->getServiceType()==CServicesManager::GATHERER) 1730 { 1731 if (file->mode.isEmpty() || (!file->mode.isEmpty() && file->mode == CFile::mode_attr::write)) 1732 grid->setContextClient(contextClient); 1733 } 1734 else if (context->getServiceType()==CServicesManager::CLIENT) 1735 grid->setContextClient(contextClient); 1749 1736 } 1750 1737 CATCH_DUMP_ATTR -
XIOS/dev/dev_ym/XIOS_COUPLING/src/node/field.hpp
r1784 r1853 46 46 END_DECLARE_ATTRIBUTE_MAP(CField) 47 47 48 class CContextClient ; 48 49 ///-------------------------------------------------------------- 49 50 class CField … … 167 168 void recvUpdateData(std::map<int,CBufferIn*>& rankBuffers); 168 169 void writeField(void); 169 bool sendReadDataRequest(const CDate& tsDataRequested );170 bool sendReadDataRequest(const CDate& tsDataRequested, CContextClient* client); 170 171 bool sendReadDataRequestIfNeeded(void); 171 172 static void recvReadDataRequest(CEventServer& event); 172 void recvReadDataRequest( void);173 void recvReadDataRequest(CContextServer* server); 173 174 EReadField readField(void); 174 175 static void recvReadDataReady(CEventServer& event); -
XIOS/dev/dev_ym/XIOS_COUPLING/src/node/file.cpp
r1784 r1853 226 226 CContext* context = CContext::getCurrent(); 227 227 const CDate& currentDate = context->calendar->getCurrentDate(); 228 CContextServer* server = context->server;229 228 230 229 lastSync = currentDate; … … 294 293 { 295 294 CContext* context = CContext::getCurrent(); 296 CContextServer* server = context->server;297 295 298 296 // create sub communicator for file … … 307 305 308 306 int color = allZoneEmpty ? 0 : 1; 309 MPI_Comm_split( server->intraComm, color, server->intraCommRank, &fileComm);307 MPI_Comm_split(context->intraComm_, color, context->intraCommRank_, &fileComm); 310 308 if (allZoneEmpty) MPI_Comm_free(&fileComm); 311 309 } … … 443 441 { 444 442 CContext* context = CContext::getCurrent(); 445 CContextServer* server = context->server; 446 443 447 444 if (!allZoneEmpty) 448 445 { … … 560 557 MPI_Comm_rank(fileComm, &commRank); 561 558 562 if ( server->intraCommSize> 1)559 if (context->intraCommSize_ > 1) 563 560 { 564 561 oss << "_" ; … … 636 633 { 637 634 CContext* context = CContext::getCurrent(); 638 CContextServer* server = context->server;639 635 MPI_Comm readComm = this->fileComm; 640 636 … … 683 679 MPI_Comm_rank(readComm, &commRank); 684 680 685 if ( server->intraCommSize> 1)681 if (context->intraCommSize_ > 1) 686 682 { 687 683 oss << "_"; … … 699 695 bool isCollective = par_access.isEmpty() || par_access == par_access_attr::collective; 700 696 bool readMetaDataPar = true; 701 if ( !context->hasServer) readMetaDataPar = (read_metadata_par.isEmpty()) ? false : read_metadata_par;697 if (context->getServiceType()==CServicesManager::CLIENT) readMetaDataPar = (read_metadata_par.isEmpty()) ? false : read_metadata_par; 702 698 703 699 if (isOpen) data_out->closeFile(); … … 1005 1001 int size = this->enabledFields.size(); 1006 1002 for (int i = 0; i < size; ++i) 1007 this->enabledFields[i]->sendReadDataRequest(CContext::getCurrent()->getCalendar()->getCurrentDate() );1003 this->enabledFields[i]->sendReadDataRequest(CContext::getCurrent()->getCalendar()->getCurrentDate(), getContextClient()); 1008 1004 } 1009 1005 CATCH_DUMP_ATTR -
XIOS/dev/dev_ym/XIOS_COUPLING/src/node/grid.cpp
r1847 r1853 331 331 { 332 332 CContext* context = CContext::getCurrent(); 333 if (context->hasClient && this->isChecked && doSendingIndex && !isIndexSent) 334 { 335 if (isScalarGrid()) sendIndexScalarGrid(); 336 else sendIndex(); 337 this->isIndexSent = true; 333 if (context->getServiceType()==CServicesManager::CLIENT || context->getServiceType()==CServicesManager::GATHERER) 334 { 335 if (this->isChecked && doSendingIndex && !isIndexSent) 336 { 337 if (isScalarGrid()) sendIndexScalarGrid(); 338 else sendIndex(); 339 this->isIndexSent = true; 340 } 338 341 } 339 342 … … 726 729 } 727 730 728 if ( doGridHaveDataDistributed(client) && (nbIndex != localIndex.numElements()))731 if (nbIndex != localIndex.numElements()) 729 732 ERROR("void CGrid::computeClientIndex()", 730 733 << "Number of local index on client is different from number of received global index" … … 892 895 { 893 896 computeClientIndexScalarGrid(); 894 if (context-> hasClient)897 if (context->getServiceType()==CServicesManager::CLIENT || context->getServiceType()==CServicesManager::GATHERER) 895 898 { 896 899 computeConnectedClientsScalarGrid(); … … 900 903 { 901 904 computeClientIndex(); 902 if (context-> hasClient)905 if (context->getServiceType()==CServicesManager::CLIENT || context->getServiceType()==CServicesManager::GATHERER) 903 906 { 904 907 computeConnectedClients(); … … 1474 1477 } 1475 1478 1476 if (context-> hasClient && !context->hasServer)1479 if (context->getServiceType()==CServicesManager::CLIENT) 1477 1480 storeIndex_fromSrv_.insert(std::make_pair(rank, CArray<int,1>(outLocalIndexToServer))); 1478 1481 … … 1497 1500 } 1498 1501 1499 if (context-> hasClient && !context->hasServer)1502 if (context->getServiceType()==CServicesManager::CLIENT) 1500 1503 storeIndex_fromSrv_.insert(std::make_pair(rank, CArray<int,1>(outLocalIndexToServer))); 1501 1504 } … … 1544 1547 { 1545 1548 storeIndex_toSrv_[client].insert(std::make_pair(*itRank, CArray<int,1>(outLocalIndexToServer))); 1546 if (context-> hasClient && !context->hasServer)1549 if (context->getServiceType()==CServicesManager::CLIENT) 1547 1550 storeIndex_fromSrv_.insert(std::make_pair(*itRank, CArray<int,1>(outLocalIndexToServer))); 1548 1551 … … 1644 1647 buffers.push_back(buffer); 1645 1648 } 1646 get(gridId)->recvIndex(ranks, buffers );1649 get(gridId)->recvIndex(ranks, buffers, event.getContextServer()); 1647 1650 } 1648 1651 CATCH 1649 1652 1650 void CGrid::recvIndex(vector<int> ranks, vector<CBufferIn*> buffers )1653 void CGrid::recvIndex(vector<int> ranks, vector<CBufferIn*> buffers, CContextServer* server) 1651 1654 TRY 1652 1655 { … … 1655 1658 1656 1659 nbReadSenders_.clear(); 1657 CContextServer* server = context->server ; 1658 CContextClient* client = context->client; 1660 CContextClient* client = server->getAssociatedClient(); 1659 1661 1660 1662 int idx = 0, numElement = axis_domain_order.numElements(); … … 1811 1813 if (isScalarGrid()) return; 1812 1814 1813 nbReadSenders_[client] = CClientServerMappingDistributed::computeConnectedClients(context->client->serverSize, context->client->clientSize, context->client->intraComm, ranks); 1815 nbReadSenders_[client] = CClientServerMappingDistributed::computeConnectedClients(client->serverSize, client->clientSize, 1816 client->intraComm, ranks); 1814 1817 1815 1818 } … … 2222 2225 { 2223 2226 CDomain* pDom = CDomain::get(*it); 2224 if (context-> hasClient && !context->hasServer)2227 if (context->getServiceType()==CServicesManager::CLIENT) 2225 2228 { 2226 2229 pDom->solveRefInheritance(apply); … … 2234 2237 { 2235 2238 CAxis* pAxis = CAxis::get(*it); 2236 if (context-> hasClient && !context->hasServer)2239 if (context->getServiceType()==CServicesManager::CLIENT) 2237 2240 { 2238 2241 pAxis->solveRefInheritance(apply); … … 2246 2249 { 2247 2250 CScalar* pScalar = CScalar::get(*it); 2248 if (context-> hasClient && !context->hasServer)2251 if (context->getServiceType()==CServicesManager::CLIENT) 2249 2252 { 2250 2253 pScalar->solveRefInheritance(apply); -
XIOS/dev/dev_ym/XIOS_COUPLING/src/node/grid.hpp
r1847 r1853 160 160 static bool dispatchEvent(CEventServer& event); 161 161 static void recvIndex(CEventServer& event); 162 void recvIndex(vector<int> ranks, vector<CBufferIn*> buffers );162 void recvIndex(vector<int> ranks, vector<CBufferIn*> buffers, CContextServer* server); 163 163 void sendIndex(void); 164 164 void sendIndexScalarGrid();
Note: See TracChangeset
for help on using the changeset viewer.