Changeset 1358 for XIOS/dev/XIOS_DEV_CMIP6/src/node
- Timestamp:
- 12/06/17 08:34:41 (7 years ago)
- Location:
- XIOS/dev/XIOS_DEV_CMIP6/src/node
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/XIOS_DEV_CMIP6/src/node/context.cpp
r1357 r1358 665 665 { 666 666 buildFilterGraphOfFieldsWithReadAccess(); 667 postProcessFilterGraph(); 667 668 } 668 669 … … 782 783 } 783 784 785 void CContext::postProcessFilterGraph() 786 { 787 int size = enabledFiles.size(); 788 for (int i = 0; i < size; ++i) 789 { 790 enabledFiles[i]->postProcessFilterGraph(); 791 } 792 } 793 784 794 void CContext::startPrefetchingOfEnabledReadModeFiles() 785 795 { … … 788 798 { 789 799 enabledReadModeFiles[i]->prefetchEnabledReadModeFields(); 800 } 801 } 802 803 void CContext::doPreTimestepOperationsForEnabledReadModeFiles() 804 { 805 int size = enabledReadModeFiles.size(); 806 for (int i = 0; i < size; ++i) 807 { 808 enabledReadModeFiles[i]->doPreTimestepOperationsForEnabledReadModeFields(); 790 809 } 791 810 } … … 1837 1856 if (prevStep < step) 1838 1857 { 1858 if (hasClient && !hasServer) // For now we only use server level 1 to read data 1859 { 1860 doPreTimestepOperationsForEnabledReadModeFiles(); 1861 } 1862 1839 1863 info(50) << "updateCalendar : before : " << calendar->getCurrentDate() << endl; 1840 1864 calendar->update(step); -
XIOS/dev/XIOS_DEV_CMIP6/src/node/context.hpp
r1349 r1358 120 120 void solveOnlyRefOfEnabledFields(bool sendToServer); 121 121 void buildFilterGraphOfEnabledFields(); 122 void postProcessFilterGraph(); 122 123 void startPrefetchingOfEnabledReadModeFiles(); 124 void doPreTimestepOperationsForEnabledReadModeFiles(); 123 125 void doPostTimestepOperationsForEnabledReadModeFiles(); 124 126 void findFieldsWithReadAccess(void); -
XIOS/dev/XIOS_DEV_CMIP6/src/node/field.cpp
r1344 r1358 42 42 , wasDataRequestedFromServer(false) 43 43 , wasDataAlreadyReceivedFromServer(false) 44 , mustAutoTrigger(false) 44 45 , isEOF(false), nstepMaxRead(false) 45 46 { setVirtualVariableGroup(CVariableGroup::create(getId() + "_virtual_variable_group")); } … … 58 59 , wasDataRequestedFromServer(false) 59 60 , wasDataAlreadyReceivedFromServer(false) 61 , mustAutoTrigger(false) 60 62 , isEOF(false), nstepMaxRead(false) 61 63 { setVirtualVariableGroup(CVariableGroup::create(getId() + "_virtual_variable_group")); } … … 569 571 570 572 // Check if data previously requested has been received as expected 571 if (wasDataRequestedFromServer && (!isEOF || currentDate <= dateEOF))573 if (wasDataRequestedFromServer && !isEOF) 572 574 { 573 575 CTimer timer("CField::checkForLateDataFromServer"); … … 577 579 { 578 580 const CDate nextDataDue = wasDataAlreadyReceivedFromServer ? (lastDataReceivedFromServer + file->output_freq) : context->getCalendar()->getInitDate(); 579 isDataLate = nextDataDue < currentDate;581 isDataLate = (nextDataDue <= currentDate); 580 582 581 583 if (isDataLate) … … 594 596 << "Late data at timestep = " << currentDate); 595 597 } 598 } 599 600 void CField::checkIfMustAutoTrigger(void) 601 { 602 mustAutoTrigger = serverSourceFilter ? serverSourceFilter->mustAutoTrigger() : false; 603 } 604 605 void CField::autoTriggerIfNeeded(void) 606 { 607 if (mustAutoTrigger) 608 serverSourceFilter->trigger(CContext::getCurrent()->getCalendar()->getCurrentDate()); 596 609 } 597 610 -
XIOS/dev/XIOS_DEV_CMIP6/src/node/field.hpp
r1330 r1358 174 174 void recvReadDataReady(vector<int> ranks, vector<CBufferIn*> buffers); 175 175 void checkForLateDataFromServer(void); 176 void checkIfMustAutoTrigger(void); 177 void autoTriggerIfNeeded(void); 176 178 void outputField(CArray<double,3>& fieldOut); 177 179 void outputField(CArray<double,2>& fieldOut); … … 221 223 CDate lastDataRequestedFromServer, lastDataReceivedFromServer, dateEOF; 222 224 bool wasDataRequestedFromServer, wasDataAlreadyReceivedFromServer; 225 bool mustAutoTrigger; 223 226 224 227 map<int,boost::shared_ptr<func::CFunctor> > foperation_srv; -
XIOS/dev/XIOS_DEV_CMIP6/src/node/file.cpp
r1318 r1358 854 854 855 855 /*! 856 * Post-process the filter graph for each active field. 857 */ 858 void CFile::postProcessFilterGraph() 859 { 860 int size = this->enabledFields.size(); 861 for (int i = 0; i < size; ++i) 862 { 863 this->enabledFields[i]->checkIfMustAutoTrigger(); 864 } 865 } 866 867 /*! 856 868 Prefetching the data for enabled fields read from file. 857 869 */ … … 867 879 868 880 /*! 881 Do all pre timestep operations for enabled fields in read mode: 882 - Check that the data excepted from server has been received 883 - Check if some filters must auto-trigger 884 */ 885 void CFile::doPreTimestepOperationsForEnabledReadModeFields(void) 886 { 887 if (mode.isEmpty() || mode.getValue() != mode_attr::read) 888 return; 889 890 int size = this->enabledFields.size(); 891 for (int i = 0; i < size; ++i) 892 { 893 this->enabledFields[i]->checkForLateDataFromServer(); 894 this->enabledFields[i]->autoTriggerIfNeeded(); 895 } 896 } 897 898 /*! 869 899 Do all post timestep operations for enabled fields in read mode: 870 900 - Prefetch the data read from file when needed 871 - Check that the data excepted from server has been received872 901 */ 873 902 void CFile::doPostTimestepOperationsForEnabledReadModeFields(void) … … 879 908 for (int i = 0; i < size; ++i) 880 909 { 881 this->enabledFields[i]->checkForLateDataFromServer();882 910 this->enabledFields[i]->sendReadDataRequestIfNeeded(); 883 911 } -
XIOS/dev/XIOS_DEV_CMIP6/src/node/file.hpp
r1318 r1358 110 110 111 111 void buildFilterGraphOfEnabledFields(CGarbageCollector& gc); 112 void postProcessFilterGraph(); 112 113 void prefetchEnabledReadModeFields(); 114 void doPreTimestepOperationsForEnabledReadModeFields(); 113 115 void doPostTimestepOperationsForEnabledReadModeFields(); 114 116
Note: See TracChangeset
for help on using the changeset viewer.