Changeset 1318 for XIOS/trunk/src/node/field.cpp
- Timestamp:
- 10/26/17 10:23:17 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/node/field.cpp
r1315 r1318 38 38 , hasTimeInstant(false) 39 39 , hasTimeCentered(false) 40 , wasDataRequestedFromServer(false) 40 41 , wasDataAlreadyReceivedFromServer(false) 41 42 , isEOF(false) … … 52 53 , hasTimeInstant(false) 53 54 , hasTimeCentered(false) 55 , wasDataRequestedFromServer(false) 54 56 , wasDataAlreadyReceivedFromServer(false) 55 57 , isEOF(false) … … 261 263 lastDataRequestedFromServer = tsDataRequested; 262 264 263 if (!isEOF) // No need to send the request if we already know we are at EOF 265 // No need to send the request if we are sure that we are already at EOF 266 if (!isEOF || context->getCalendar()->getCurrentDate() <= dateEOF) 264 267 { 265 268 CEventClient event(getType(), EVENT_ID_READ_DATA); … … 277 280 else 278 281 serverSourceFilter->signalEndOfStream(tsDataRequested); 282 283 wasDataRequestedFromServer = true; 279 284 280 285 return !isEOF; … … 433 438 { 434 439 CContext* context = CContext::getCurrent(); 435 int record;436 440 std::map<int, CArray<double,1> > data; 441 const bool wasEOF = isEOF; 437 442 438 443 for (int i = 0; i < ranks.size(); i++) 439 444 { 440 445 int rank = ranks[i]; 446 int record; 441 447 *buffers[i] >> record; 442 448 isEOF = (record == int(-1)); … … 457 463 458 464 if (isEOF) 465 { 466 if (!wasEOF) 467 dateEOF = lastDataReceivedFromServer; 468 459 469 serverSourceFilter->signalEndOfStream(lastDataReceivedFromServer); 470 } 460 471 else 461 472 serverSourceFilter->streamDataFromServer(lastDataReceivedFromServer, data); 473 } 474 475 void CField::checkForLateDataFromServer(void) 476 { 477 CContext* context = CContext::getCurrent(); 478 const CDate& currentDate = context->getCalendar()->getCurrentDate(); 479 480 // Check if data previously requested has been received as expected 481 if (wasDataRequestedFromServer && (!isEOF || context->getCalendar()->getCurrentDate() <= dateEOF)) 482 { 483 CTimer timer("CField::checkForLateDataFromServer"); 484 485 bool isDataLate = !wasDataAlreadyReceivedFromServer || lastDataReceivedFromServer + file->output_freq < currentDate; 486 while (isDataLate && timer.getCumulatedTime() < CXios::recvFieldTimeout) 487 { 488 timer.resume(); 489 490 context->checkBuffersAndListen(); 491 492 timer.suspend(); 493 494 isDataLate = !wasDataAlreadyReceivedFromServer || lastDataReceivedFromServer + file->output_freq < currentDate; 495 } 496 497 if (isDataLate) 498 ERROR("void CField::checkForLateDataFromServer(void)", 499 << "Late data at timestep = " << currentDate); 500 } 462 501 } 463 502
Note: See TracChangeset
for help on using the changeset viewer.