Changeset 1872 for XIOS/dev/dev_ym/XIOS_COUPLING/src/node/field.cpp
- Timestamp:
- 04/23/20 16:04:22 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_ym/XIOS_COUPLING/src/node/field.cpp
r1871 r1872 33 33 CField::CField(void) 34 34 : CObjectTemplate<CField>(), CFieldAttributes() 35 , file()36 35 , written(false) 37 36 , nstep(0), nstepMax(0) … … 51 50 CField::CField(const StdString& id) 52 51 : CObjectTemplate<CField>(id), CFieldAttributes() 53 , file()54 52 , written(false) 55 53 , nstep(0), nstepMax(0) … … 360 358 info(20) << "currentDate : " << currentDate << endl ; 361 359 info(20) << "lastDataRequestedFromServer : " << lastDataRequestedFromServer << endl ; 362 info(20) << "file ->output_freq.getValue() : " << file->output_freq.getValue() << endl ;363 info(20) << "lastDataRequestedFromServer + file ->output_freq.getValue() : " << lastDataRequestedFromServer + file->output_freq << endl ;364 365 dataRequested |= sendReadDataRequest(lastDataRequestedFromServer + file ->output_freq, file->getContextClient());360 info(20) << "fileIn_->output_freq.getValue() : " << fileIn_->output_freq.getValue() << endl ; 361 info(20) << "lastDataRequestedFromServer + fileIn_->output_freq.getValue() : " << lastDataRequestedFromServer + fileIn_->output_freq << endl ; 362 363 dataRequested |= sendReadDataRequest(lastDataRequestedFromServer + fileIn_->output_freq, fileIn_->getContextClient()); 366 364 } 367 365 … … 580 578 581 579 if (wasDataAlreadyReceivedFromServer) 582 lastDataReceivedFromServer = lastDataReceivedFromServer + file ->output_freq;580 lastDataReceivedFromServer = lastDataReceivedFromServer + fileIn_->output_freq; 583 581 else 584 582 { … … 616 614 do 617 615 { 618 const CDate nextDataDue = wasDataAlreadyReceivedFromServer ? (lastDataReceivedFromServer + file ->output_freq) : context->getCalendar()->getInitDate();616 const CDate nextDataDue = wasDataAlreadyReceivedFromServer ? (lastDataReceivedFromServer + fileIn_->output_freq) : context->getCalendar()->getInitDate(); 619 617 isDataLate = (nextDataDue <= currentDate); 620 618 … … 659 657 660 658 //---------------------------------------------------------------- 661 659 /* 662 660 void CField::setRelFile(CFile* _file) 663 661 TRY … … 667 665 } 668 666 CATCH_DUMP_ATTR 669 667 */ 670 668 //---------------------------------------------------------------- 671 669 … … 688 686 TRY 689 687 { 690 return this->file; 688 if (hasFileIn()) return this->fileIn_; 689 else if (hasFileOut()) return this->fileOut_ ; 690 else return nullptr ; 691 691 } 692 692 CATCH … … 1098 1098 CContext* context = CContext::getCurrent(); 1099 1099 1100 if (context->getServiceType()==CServicesManager::CLIENT || !hasOutputFile) return;1101 1102 1100 if (freq_op.isEmpty()) freq_op.setValue(TimeStep); 1103 1101 1104 1102 if (freq_offset.isEmpty()) freq_offset.setValue(NoneDu); 1105 1103 1106 freq_operation_srv = file ->output_freq.getValue();1107 freq_write_srv = file ->output_freq.getValue();1104 freq_operation_srv = fileOut_->output_freq.getValue(); 1105 freq_write_srv = fileOut_->output_freq.getValue(); 1108 1106 1109 1107 lastlast_Write_srv = context->getCalendar()->getInitDate(); … … 1234 1232 } 1235 1233 1234 if (hasFileOut()) 1235 { 1236 if (fileOut_->isServerSide()) 1237 { 1238 this->solveServerOperation() ; 1239 } 1240 } 1241 1236 1242 buildWorkflowGraphDone_ = true ; 1237 1243 workflowEnabled_ = true ; … … 1288 1294 void CField::connectToServerInput(CGarbageCollector& gc) 1289 1295 { 1290 serverSourceFilter = std::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid_, false, false)); 1296 const bool detectMissingValues = (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value == true); 1297 const double defaultValue = detectMissingValues ? default_value : (!default_value.isEmpty() ? default_value : 0.0); 1298 1299 checkTimeAttributes(); 1300 serverSourceFilter = std::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid_, true, false, freq_offset, true, 1301 detectMissingValues, defaultValue)); 1302 //serverSourceFilter = std::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid_, false, false)); 1291 1303 serverSourceFilter -> connectOutput(inputFilter,0) ; 1292 1304 } … … 1382 1394 if (enableOutput && !storeFilter && !fileWriterFilter) 1383 1395 { 1384 if ( file && (file->mode.isEmpty() || file->mode == CFile::mode_attr::write))1396 if (getRelFile() && (getRelFile()->mode.isEmpty() || getRelFile()->mode == CFile::mode_attr::write)) 1385 1397 { 1386 1398 fileServerWriterFilter = std::shared_ptr<CFileServerWriterFilter>(new CFileServerWriterFilter(gc, this)); … … 1397 1409 if (enableOutput && !storeFilter && !fileWriterFilter) 1398 1410 { 1399 if ( file && (file->mode.isEmpty() || file->mode == CFile::mode_attr::write))1411 if (getRelFile() && (getRelFile()->mode.isEmpty() || getRelFile()->mode == CFile::mode_attr::write)) 1400 1412 { 1401 fileWriterFilter = std::shared_ptr<CFileWriterFilter>(new CFileWriterFilter(gc, this, file->getContextClient()));1413 fileWriterFilter = std::shared_ptr<CFileWriterFilter>(new CFileWriterFilter(gc, this, getRelFile()->getContextClient())); 1402 1414 instantDataFilter->connectOutput(fileWriterFilter, 0); 1403 1415 } … … 1433 1445 else if (!field_ref.isEmpty()) instantDataFilter = getFieldReference(gc); 1434 1446 // Check if the data is to be read from a file 1435 else if ( file && !file->mode.isEmpty() && file->mode == CFile::mode_attr::read)1447 else if (getRelFile() && !getRelFile()->mode.isEmpty() && getRelFile()->mode == CFile::mode_attr::read) 1436 1448 { 1437 1449 checkTimeAttributes(); … … 1457 1469 } 1458 1470 1459 if ( file && (file->mode.isEmpty() || file->mode == CFile::mode_attr::write))1471 if (getRelFile() && (getRelFile()->mode.isEmpty() || getRelFile()->mode == CFile::mode_attr::write)) 1460 1472 { 1461 fileWriterFilter = std::shared_ptr<CFileWriterFilter>(new CFileWriterFilter(gc, this, file->getContextClient()));1462 getTemporalDataFilter(gc, file->output_freq)->connectOutput(fileWriterFilter, 0);1473 fileWriterFilter = std::shared_ptr<CFileWriterFilter>(new CFileWriterFilter(gc, this, getRelFile()->getContextClient())); 1474 getTemporalDataFilter(gc, getRelFile()->output_freq)->connectOutput(fileWriterFilter, 0); 1463 1475 } 1464 1476 } … … 2001 2013 if (context->getServiceType()==CServicesManager::GATHERER) 2002 2014 { 2003 if ( file->mode.isEmpty() || (!file->mode.isEmpty() && file->mode == CFile::mode_attr::write))2015 if (getRelFile()->mode.isEmpty() || (!getRelFile()->mode.isEmpty() && getRelFile()->mode == CFile::mode_attr::write)) 2004 2016 grid_->setContextClient(contextClient); 2005 2017 } … … 2020 2032 { 2021 2033 CContext::getCurrent()->sendContextToFileServer(client); 2022 fileOut_->sendFileToFileServer(client);2034 getRelFile()->sendFileToFileServer(client); 2023 2035 grid_->sendGridToFileServer(client); 2036 this->sendAllAttributesToServer(client); 2037 this->sendAddAllVariables(client); 2038 } 2039 2040 void CField::sendFieldToInputFileServer(void) 2041 { 2042 CContext::getCurrent()->sendContextToFileServer(client); 2043 getRelFile()->sendFileToFileServer(client); 2044 grid_->sendGridToFileServer(client); 2045 read_access=true ; // not the best solution, but on server side, the field must be a starting point of the workflow 2046 // must be replace by a better solution when implementing filters for reading and send to client 2047 // on server side 2024 2048 this->sendAllAttributesToServer(client); 2025 2049 this->sendAddAllVariables(client); … … 2121 2145 TRY 2122 2146 { 2123 bool isFieldRead = file && !file->mode.isEmpty() && file->mode == CFile::mode_attr::read;2124 bool isFieldWrite = file && ( file->mode.isEmpty() || file->mode == CFile::mode_attr::write);2147 bool isFieldRead = getRelFile() && !getRelFile()->mode.isEmpty() && getRelFile()->mode == CFile::mode_attr::read; 2148 bool isFieldWrite = getRelFile() && ( getRelFile()->mode.isEmpty() || getRelFile()->mode == CFile::mode_attr::write); 2125 2149 if (isFieldRead && !(operation.getValue() == "instant" || operation.getValue() == "once") ) 2126 2150 ERROR("void CField::checkTimeAttributes(void)", … … 2132 2156 if (operation.getValue() == "instant") 2133 2157 { 2134 if (isFieldRead || isFieldWrite) freq_op.setValue( file->output_freq.getValue());2158 if (isFieldRead || isFieldWrite) freq_op.setValue(getRelFile()->output_freq.getValue()); 2135 2159 else freq_op=*freqOp ; 2136 2160 }
Note: See TracChangeset
for help on using the changeset viewer.