Ignore:
Timestamp:
06/15/22 15:20:29 (2 years ago)
Author:
jderouillat
Message:

Introduced a new service (named defaultServicesId which contains all gatherers and all IO servers) to manage oasis_enddef through the different levels of servers. OASIS integration is moved in a dedicated virtual class CThirdPartyDriver whose an instance is owned by CServer.

File:
1 edited

Legend:

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

    r2334 r2335  
    4848    CEventScheduler* CServer::eventScheduler = 0; 
    4949    CServersRessource* CServer::serversRessource_=nullptr ; 
     50    CThirdPartyDriver* CServer::driver_ =nullptr ; 
    5051 
    5152        
     
    9798      else // using OASIS 
    9899      { 
    99         if (!is_MPI_Initialized) oasis_init(CXios::xiosCodeId); 
    100  
    101         oasis_get_localcomm(serverComm); 
     100        if (!is_MPI_Initialized) driver_ = new CThirdPartyDriver(); 
     101 
     102        driver_->getComponentCommunicator( serverComm ); 
    102103      } 
    103104      MPI_Comm_dup(serverComm, &intraComm_); 
     
    200201          servicesManager->createServices(CXios::defaultPoolId,  CXios::defaultGathererId, CServicesManager::GATHERER, nprocsGatherer, 1) ; 
    201202          servicesManager->createServices(CXios::defaultPoolId,  CXios::defaultServerId, CServicesManager::OUT_SERVER, nprocsServer, nbPoolsServer2) ; 
     203 
     204 
    202205        } 
     206        servicesManager->createServices(CXios::defaultPoolId,  CXios::defaultServicesId, CServicesManager::ALL_SERVICES, nbRessources, 1) ; 
    203207      } 
    204208      CTimer::get("XIOS initialize").suspend() ; 
     
    381385         boost::hash<string> hashString; 
    382386         size_t hashId = hashString("oasis_enddef"); 
    383          if (CXios::getPoolRessource()->getService(CXios::defaultServerId,0)->getEventScheduler()->queryEvent(0,hashId)) 
     387         if (CXios::getPoolRessource()->getService(CXios::defaultServicesId,0)->getEventScheduler()->queryEvent(0,hashId)) 
    384388         { 
    385            CXios::getPoolRessource()->getService(CXios::defaultServerId,0)->getEventScheduler()->popEvent() ; 
    386            oasis_enddef() ; 
     389           CXios::getPoolRessource()->getService(CXios::defaultServicesId,0)->getEventScheduler()->popEvent() ; 
     390           driver_->endSynchronizedDefinition() ; 
    387391           eventSent=false ; 
    388392         } 
     
    397401           boost::hash<string> hashString; 
    398402           size_t hashId = hashString("oasis_enddef"); 
    399            CXios::getPoolRessource()->getService(CXios::defaultServerId,0)->getEventScheduler()->registerEvent(0,hashId); 
     403           CXios::getPoolRessource()->getService(CXios::defaultServicesId,0)->getEventScheduler()->registerEvent(0,hashId); 
    400404           eventSent=true ; 
    401405       } 
     
    427431      if (!is_MPI_Initialized) 
    428432      { 
    429         if (CXios::usingOasis) oasis_finalize(); 
     433        if (CXios::usingOasis) delete driver_; 
    430434        else MPI_Finalize() ; 
    431435      } 
Note: See TracChangeset for help on using the changeset viewer.