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/file.cpp

    r1144 r1158  
    1414#include "type.hpp" 
    1515#include "xios_spl.hpp" 
     16#include "context_client.hpp" 
    1617#include "mpi.hpp" 
     18#include "timer.hpp" 
    1719 
    1820namespace xios { 
     
    4951   //---------------------------------------------------------------- 
    5052 
    51    const StdString& CFile::getFileOutputName(void) const 
    52    { 
    53      return name.isEmpty() ? getId() : name; 
     53   const StdString CFile::getFileOutputName(void) const 
     54   { 
     55     return (name.isEmpty() ? getId() : name) + (name_suffix.isEmpty() ? StdString("") :  name_suffix.getValue()); 
    5456   } 
    5557 
     
    215217      if (!split_freq.isEmpty()) 
    216218      { 
    217         if (context->registryIn->foundKey("splitStart") && context->registryIn->foundKey("splitEnd")) 
     219        StdString keySuffix("CContext_"+CContext::getCurrent()->getId()+"::CFile_"+getFileOutputName()+"::") ;  
     220        if (context->registryIn->foundKey(keySuffix+"splitStart") && context->registryIn->foundKey(keySuffix+"splitEnd")) 
    218221        { 
    219222          CDate savedSplitStart(*context->getCalendar()), savedSplitEnd(*context->getCalendar()); 
    220           context->registryIn->getKey("splitStart", savedSplitStart); 
    221           context->registryIn->getKey("splitEnd",   savedSplitEnd); 
     223          context->registryIn->getKey(keySuffix+"splitStart", savedSplitStart); 
     224          context->registryIn->getKey(keySuffix+"splitEnd",   savedSplitEnd); 
    222225 
    223226          if (savedSplitStart <= lastSplit && lastSplit <= savedSplitEnd) 
     
    234237      const int recordOffset = record_offset.isEmpty() ? 0 : record_offset; 
    235238 
    236 //      set<CAxis*> setAxis; 
    237 //      set<CDomain*> setDomains; 
    238239      set<StdString> setAxis; 
    239240      set<StdString> setDomains; 
     
    263264      if (allDomainEmpty) MPI_Comm_free(&fileComm); 
    264265 
    265       if (time_counter.isEmpty()) time_counter.setValue(time_counter_attr::centered); 
     266      // if (time_counter.isEmpty()) time_counter.setValue(time_counter_attr::centered); 
    266267      if (time_counter_name.isEmpty()) time_counter_name = "time_counter"; 
    267268    } 
     
    281282        if (mode.isEmpty() || mode.getValue() == mode_attr::write) 
    282283        { 
     284          CTimer::get("Files : create headers").resume(); 
    283285          if (!isOpen) createHeader(); 
     286          CTimer::get("Files : create headers").suspend(); 
    284287          checkSync(); 
    285288        }         
     
    303306        if (!mode.isEmpty() && mode.getValue() == mode_attr::read) 
    304307        { 
     308          CTimer::get("Files : open headers").resume(); 
    305309          if (!isOpen) openInReadMode(&(context->server->intraComm)); 
     310          CTimer::get("Files : open headers").suspend(); 
    306311        } 
    307312        //checkSplit(); // Really need for reading? 
     
    374379      { 
    375380         StdString filename = getFileOutputName(); 
    376          if (!name_suffix.isEmpty()) filename+=name_suffix.getValue(); 
    377381 
    378382// determine splitting format in the file name  : firstPart%start_date%middlePart%end_date%lastPart 
     
    441445           oss << lastPart ; 
    442446 
    443            context->registryOut->setKey("splitStart", lastSplit); 
    444            context->registryOut->setKey("splitEnd",   splitEnd); 
     447           StdString keySuffix("CContext_"+CContext::getCurrent()->getId()+"::CFile_"+getFileOutputName()+"::") ;  
     448           context->registryOut->setKey(keySuffix+"splitStart", lastSplit); 
     449           context->registryOut->setKey(keySuffix+"splitEnd",   splitEnd); 
    445450         } 
    446451         else oss<<firstPart<<lastPart ; 
     
    489494         if (isOpen) data_out->closeFile(); 
    490495 
    491         data_out = shared_ptr<CDataOutput>(new CNc4DataOutput(oss.str(), append, useClassicFormat, useCFConvention, 
     496        data_out = shared_ptr<CDataOutput>(new CNc4DataOutput(this, oss.str(), append, useClassicFormat, useCFConvention, 
    492497                                                              fileComm, multifile, isCollective, time_counter_name)); 
    493498        isOpen = true; 
     
    509514          { 
    510515            CField* field = *it; 
     516            this->data_out->writeFieldTimeAxis(field); 
     517          } 
     518           
     519          for (it = this->enabledFields.begin(); it != end; it++) 
     520          { 
     521            CField* field = *it; 
    511522            this->data_out->writeField(field); 
    512523          } 
     
    517528 
    518529          this->data_out->definition_end(); 
     530        } 
     531        else 
     532        { 
     533          // check time axis even in append mode 
     534          std::vector<CField*>::iterator it, end = this->enabledFields.end(); 
     535          for (it = this->enabledFields.begin(); it != end; it++) 
     536          { 
     537            CField* field = *it; 
     538            this->data_out->writeFieldTimeAxis(field); 
     539          } 
    519540        } 
    520541      } 
     
    535556      StdOStringStream oss; 
    536557      oss << filename; 
    537       if (!name_suffix.isEmpty()) oss << name_suffix.getValue(); 
    538558 
    539559      if (!split_freq.isEmpty()) 
     
    872892   } 
    873893 
    874  
    875894   /*! 
    876895   \brief Send a message to create a field on server side 
Note: See TracChangeset for help on using the changeset viewer.