- Timestamp:
- 06/24/21 11:14:28 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
CONFIG_DEVT/IPSLCM6.5_work_ENSEMBLES/modeles/XIOS/src/server.cpp
r5501 r5861 352 352 MPI_Comm_rank(CXios::globalComm,&globalRank); 353 353 354 // (1.5) check ensemble management 355 vector<string> baseOasisCodeId(oasisCodeId.size()) ; 356 vector<int> ensembleSize(oasisCodeId.size()) ; 357 vector<bool> ensembleManagement(oasisCodeId.size()) ; 358 359 for(int i=0 ; i<oasisCodeId.size() ;i++) 360 { 361 vector<string> splittedOasisCodeId = splitRegex(oasisCodeId[i],"\\s*:\\s*") ; 362 baseOasisCodeId[i]=splittedOasisCodeId[0] ; 363 if (splittedOasisCodeId.size()==1) 364 { 365 ensembleManagement[i]=false ; 366 ensembleSize[i]=1 ; 367 } 368 else if (splittedOasisCodeId.size()==2) 369 { 370 371 try 372 { 373 ensembleSize[i] = stoi(splittedOasisCodeId[1]) ; 374 } 375 catch(...) 376 { 377 ERROR("void CServer::initialize(void)",<<"OasisCodeId is badly formed "<<oasisCodeId[i]) ; 378 } 379 380 ensembleManagement[i] = true ; 381 } 382 else ERROR("void CServer::initialize(void)",<<"OasisCodeId is badly formed "<<oasisCodeId[i]) ; 383 } 384 354 385 // (2) Create interComms with models 355 for(it=oasisCodeId.begin();it!=oasisCodeId.end();it++) 356 { 357 oasis_get_intercomm(newComm,*it) ; 386 for(int i=0; i<baseOasisCodeId.size();i++) 387 { 388 if (ensembleManagement[i]==false) oasis_get_intercomm(newComm,baseOasisCodeId[i]) ; 389 else 390 { 391 vector<string> intraCommStr(ensembleSize[i]+1) ; 392 vector<int> rootRanks ; 393 for(int j=0;j<ensembleSize[i];j++) intraCommStr[j]=baseOasisCodeId[i]+":"+std::to_string(j) ; 394 intraCommStr[ensembleSize[i]] = CXios::xiosCodeId ; 395 oasis_get_multi_intracomm(localComm, intraCommStr, rootRanks) ; 396 397 int myColor= 1 ; // 0:client 1:server 398 int myrank ; 399 MPI_Comm splittedComm ; 400 MPI_Comm_rank(localComm,&myrank) ; 401 MPI_Comm_split(localComm,myColor,myrank, &splittedComm) ; 402 MPI_Intercomm_create(splittedComm,0,localComm,rootRanks[0],10,&newComm) ; 403 } 404 358 405 if ( serverLevel == 0 || serverLevel == 1) 359 406 {
Note: See TracChangeset
for help on using the changeset viewer.