Ignore:
Timestamp:
06/06/17 17:58:16 (7 years ago)
Author:
oabramkina
Message:

Two server levels: merging with trunk r1137.
There are bugs.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_olga/src/node/context.cpp

    r1144 r1158  
    1414#include "type.hpp" 
    1515#include "xios_spl.hpp" 
     16#include "timer.hpp" 
     17#include "memtrack.hpp" 
    1618 
    1719#include "server.hpp" 
     
    372374       comms.push_back(interCommClient); 
    373375     } 
    374      client = new CContextClient(this,intraCommClient,interCommClient,cxtClient); 
     376     client = new CContextClient(this,intraCommClient,interCommClient, cxtClient); 
    375377   } 
    376378 
     
    615617   void CContext::closeDefinition(void) 
    616618   { 
     619    CTimer::get("Context : close definition").resume() ; 
    617620    postProcessingGlobalAttributes(); 
    618621 
     
    640643      if (!hasServer) startPrefetchingOfEnabledReadModeFiles(); 
    641644    } 
     645    CTimer::get("Context : close definition").suspend() ; 
    642646   } 
    643647 
     
    690694       this->enabledFiles[i]->generateNewTransformationGridDest(); 
    691695     } 
    692  
    693696   } 
    694697 
     
    783786   { 
    784787      const std::vector<CFile*> allFiles = CFile::getAll(); 
     788      const CDate& initDate = calendar->getInitDate(); 
    785789 
    786790      for (unsigned int i = 0; i < allFiles.size(); i++) 
     
    788792         { 
    789793            if (allFiles[i]->enabled.getValue()) // Si l'attribut 'enabled' est fixé à vrai. 
     794            { 
     795              if ((initDate + allFiles[i]->output_freq.getValue()) < (initDate + this->getCalendar()->getTimeStep())) 
     796              { 
     797                error(0)<<"WARNING: void CContext::findEnabledFiles()"<<endl 
     798                    << "Output frequency in file \""<<allFiles[i]->getFileOutputName() 
     799                    <<"\" is less than the time step. File will not be written."<<endl; 
     800              } 
     801              else 
    790802               enabledFiles.push_back(allFiles[i]); 
     803            } 
    791804         } 
    792          else enabledFiles.push_back(allFiles[i]); // otherwise true by default 
    793  
     805         else 
     806         { 
     807           if ( (initDate + allFiles[i]->output_freq.getValue()) < (initDate + this->getCalendar()->getTimeStep())) 
     808           { 
     809             error(0)<<"WARNING: void CContext::findEnabledFiles()"<<endl 
     810                 << "Output frequency in file \""<<allFiles[i]->getFileOutputName() 
     811                 <<"\" is less than the time step. File will not be written."<<endl; 
     812           } 
     813           else 
     814             enabledFiles.push_back(allFiles[i]); // otherwise true by default 
     815         } 
    794816 
    795817      if (enabledFiles.size() == 0) 
     
    12671289     StdString fileDefRoot("file_definition"); 
    12681290     CFileGroup* cfgrpPtr = CFileGroup::get(fileDefRoot); 
     1291 
    12691292     for (int i = 0; i < size; ++i) 
    12701293     { 
     
    13131336       CFile* file = allFiles[i]; 
    13141337 
     1338       std::vector<CVariable*> fileVars, fieldVars, vars = file->getAllVariables(); 
     1339       for (size_t k = 0; k < vars.size(); k++) 
     1340       { 
     1341         CVariable* var = vars[k]; 
     1342 
     1343         if (var->ts_target.isEmpty() 
     1344              || var->ts_target == CVariable::ts_target_attr::file || var->ts_target == CVariable::ts_target_attr::both) 
     1345           fileVars.push_back(var); 
     1346 
     1347         if (!var->ts_target.isEmpty() 
     1348              && (var->ts_target == CVariable::ts_target_attr::field || var->ts_target == CVariable::ts_target_attr::both)) 
     1349           fieldVars.push_back(var); 
     1350       } 
     1351 
    13151352       if (!file->timeseries.isEmpty() && file->timeseries != CFile::timeseries_attr::none) 
    13161353       { 
    1317          StdString tsPrefix = !file->ts_prefix.isEmpty() ? file->ts_prefix : file->getFileOutputName(); 
    1318  
     1354         StdString fileNameStr("%file_name%") ; 
     1355         StdString tsPrefix = !file->ts_prefix.isEmpty() ? file->ts_prefix : fileNameStr ; 
     1356          
     1357         StdString fileName=file->getFileOutputName(); 
     1358         size_t pos=tsPrefix.find(fileNameStr) ; 
     1359         while (pos!=std::string::npos) 
     1360         { 
     1361           tsPrefix=tsPrefix.replace(pos,fileNameStr.size(),fileName) ; 
     1362           pos=tsPrefix.find(fileNameStr) ; 
     1363         } 
     1364         
    13191365         const std::vector<CField*> allFields = file->getAllFields(); 
    13201366         for (size_t j = 0; j < allFields.size(); j++) 
     
    13261372             CFile* tsFile = CFile::create(); 
    13271373             tsFile->duplicateAttributes(file); 
    1328              tsFile->setVirtualVariableGroup(file->getVirtualVariableGroup()); 
    1329  
     1374 
     1375             // Add variables originating from file and targeted to timeserie file 
     1376             for (size_t k = 0; k < fileVars.size(); k++) 
     1377               tsFile->getVirtualVariableGroup()->addChild(fileVars[k]); 
     1378 
     1379             
    13301380             tsFile->name = tsPrefix + "_"; 
    13311381             if (!field->name.isEmpty()) 
     
    13411391             CField* tsField = tsFile->addField(); 
    13421392             tsField->field_ref = field->getId(); 
    1343              tsField->setVirtualVariableGroup(field->getVirtualVariableGroup()); 
     1393 
     1394             // Add variables originating from file and targeted to timeserie field 
     1395             for (size_t k = 0; k < fieldVars.size(); k++) 
     1396               tsField->getVirtualVariableGroup()->addChild(fieldVars[k]); 
     1397 
     1398             vars = field->getAllVariables(); 
     1399             for (size_t k = 0; k < vars.size(); k++) 
     1400             { 
     1401               CVariable* var = vars[k]; 
     1402 
     1403               // Add variables originating from field and targeted to timeserie field 
     1404               if (var->ts_target.isEmpty() 
     1405                    || var->ts_target == CVariable::ts_target_attr::field || var->ts_target == CVariable::ts_target_attr::both) 
     1406                 tsField->getVirtualVariableGroup()->addChild(var); 
     1407 
     1408               // Add variables originating from field and targeted to timeserie file 
     1409               if (!var->ts_target.isEmpty() 
     1410                    && (var->ts_target == CVariable::ts_target_attr::file || var->ts_target == CVariable::ts_target_attr::both)) 
     1411                 tsFile->getVirtualVariableGroup()->addChild(var); 
     1412             } 
    13441413 
    13451414             tsFile->solveFieldRefInheritance(true); 
     
    14561525   void CContext::updateCalendar(int step) 
    14571526   { 
    1458       info(50) <<"Context "<< this->getId() <<" updateCalendar : before : " << calendar->getCurrentDate() << endl; 
     1527      info(50) << "updateCalendar : before : " << calendar->getCurrentDate() << endl; 
    14591528      calendar->update(step); 
    1460       info(50) <<"Context "<< this->getId() << " updateCalendar : after : " << calendar->getCurrentDate() << endl; 
    1461  
     1529      info(50) << "updateCalendar : after : " << calendar->getCurrentDate() << endl; 
     1530#ifdef XIOS_MEMTRACK_LIGHT 
     1531      info(50) << " Current memory used by XIOS : "<<  MemTrack::getCurrentMemorySize()*1.0/(1024*1024)<<" Mbyte, at timestep "<<step<<" of context "<<this->getId()<<endl ; 
     1532#endif 
    14621533      if (hasClient) 
    14631534      { 
     
    15371608 
    15381609  void CContext::sendRegistry(void) 
    1539   {     
     1610  { 
    15401611    registryOut->hierarchicalGatherRegistry() ; 
    15411612 
Note: See TracChangeset for help on using the changeset viewer.