Changeset 1318 for XIOS/dev/XIOS_DEV_CMIP6/src/node/field.cpp
- Timestamp:
- 10/26/17 10:23:17 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/XIOS_DEV_CMIP6/src/node/field.cpp
r1315 r1318 40 40 , hasTimeInstant(false) 41 41 , hasTimeCentered(false) 42 , wasDataRequestedFromServer(false) 42 43 , wasDataAlreadyReceivedFromServer(false) 43 44 , isEOF(false), nstepMaxRead(false) … … 55 56 , hasTimeInstant(false) 56 57 , hasTimeCentered(false) 58 , wasDataRequestedFromServer(false) 57 59 , wasDataAlreadyReceivedFromServer(false) 58 60 , isEOF(false), nstepMaxRead(false) … … 291 293 lastDataRequestedFromServer = tsDataRequested; 292 294 293 if (!isEOF) // No need to send the request if we already know we are at EOF 295 // No need to send the request if we are sure that we are already at EOF 296 if (!isEOF || context->getCalendar()->getCurrentDate() <= dateEOF) 294 297 { 295 298 CEventClient event(getType(), EVENT_ID_READ_DATA); … … 307 310 else 308 311 serverSourceFilter->signalEndOfStream(tsDataRequested); 312 313 wasDataRequestedFromServer = true; 309 314 310 315 return !isEOF; … … 520 525 { 521 526 CContext* context = CContext::getCurrent(); 522 int record;523 527 std::map<int, CArray<double,1> > data; 528 const bool wasEOF = isEOF; 524 529 525 530 for (int i = 0; i < ranks.size(); i++) 526 531 { 527 532 int rank = ranks[i]; 533 int record; 528 534 *buffers[i] >> record; 529 535 isEOF = (record == int(-1)); … … 544 550 545 551 if (isEOF) 552 { 553 if (!wasEOF) 554 dateEOF = lastDataReceivedFromServer; 555 546 556 serverSourceFilter->signalEndOfStream(lastDataReceivedFromServer); 557 } 547 558 else 548 559 serverSourceFilter->streamDataFromServer(lastDataReceivedFromServer, data); 560 } 561 562 void CField::checkForLateDataFromServer(void) 563 { 564 CContext* context = CContext::getCurrent(); 565 const CDate& currentDate = context->getCalendar()->getCurrentDate(); 566 567 // Check if data previously requested has been received as expected 568 if (wasDataRequestedFromServer && (!isEOF || context->getCalendar()->getCurrentDate() <= dateEOF)) 569 { 570 CTimer timer("CField::checkForLateDataFromServer"); 571 572 bool isDataLate = !wasDataAlreadyReceivedFromServer || lastDataReceivedFromServer + file->output_freq < currentDate; 573 while (isDataLate && timer.getCumulatedTime() < CXios::recvFieldTimeout) 574 { 575 timer.resume(); 576 577 context->checkBuffersAndListen(); 578 579 timer.suspend(); 580 581 isDataLate = !wasDataAlreadyReceivedFromServer || lastDataReceivedFromServer + file->output_freq < currentDate; 582 } 583 584 if (isDataLate) 585 ERROR("void CField::checkForLateDataFromServer(void)", 586 << "Late data at timestep = " << currentDate); 587 } 549 588 } 550 589
Note: See TracChangeset
for help on using the changeset viewer.