Changeset 1158 for XIOS/dev/dev_olga/src/node/file.cpp
- Timestamp:
- 06/06/17 17:58:16 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_olga/src/node/file.cpp
r1144 r1158 14 14 #include "type.hpp" 15 15 #include "xios_spl.hpp" 16 #include "context_client.hpp" 16 17 #include "mpi.hpp" 18 #include "timer.hpp" 17 19 18 20 namespace xios { … … 49 51 //---------------------------------------------------------------- 50 52 51 const StdString &CFile::getFileOutputName(void) const52 { 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()); 54 56 } 55 57 … … 215 217 if (!split_freq.isEmpty()) 216 218 { 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")) 218 221 { 219 222 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); 222 225 223 226 if (savedSplitStart <= lastSplit && lastSplit <= savedSplitEnd) … … 234 237 const int recordOffset = record_offset.isEmpty() ? 0 : record_offset; 235 238 236 // set<CAxis*> setAxis;237 // set<CDomain*> setDomains;238 239 set<StdString> setAxis; 239 240 set<StdString> setDomains; … … 263 264 if (allDomainEmpty) MPI_Comm_free(&fileComm); 264 265 265 if (time_counter.isEmpty()) time_counter.setValue(time_counter_attr::centered);266 // if (time_counter.isEmpty()) time_counter.setValue(time_counter_attr::centered); 266 267 if (time_counter_name.isEmpty()) time_counter_name = "time_counter"; 267 268 } … … 281 282 if (mode.isEmpty() || mode.getValue() == mode_attr::write) 282 283 { 284 CTimer::get("Files : create headers").resume(); 283 285 if (!isOpen) createHeader(); 286 CTimer::get("Files : create headers").suspend(); 284 287 checkSync(); 285 288 } … … 303 306 if (!mode.isEmpty() && mode.getValue() == mode_attr::read) 304 307 { 308 CTimer::get("Files : open headers").resume(); 305 309 if (!isOpen) openInReadMode(&(context->server->intraComm)); 310 CTimer::get("Files : open headers").suspend(); 306 311 } 307 312 //checkSplit(); // Really need for reading? … … 374 379 { 375 380 StdString filename = getFileOutputName(); 376 if (!name_suffix.isEmpty()) filename+=name_suffix.getValue();377 381 378 382 // determine splitting format in the file name : firstPart%start_date%middlePart%end_date%lastPart … … 441 445 oss << lastPart ; 442 446 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); 445 450 } 446 451 else oss<<firstPart<<lastPart ; … … 489 494 if (isOpen) data_out->closeFile(); 490 495 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, 492 497 fileComm, multifile, isCollective, time_counter_name)); 493 498 isOpen = true; … … 509 514 { 510 515 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; 511 522 this->data_out->writeField(field); 512 523 } … … 517 528 518 529 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 } 519 540 } 520 541 } … … 535 556 StdOStringStream oss; 536 557 oss << filename; 537 if (!name_suffix.isEmpty()) oss << name_suffix.getValue();538 558 539 559 if (!split_freq.isEmpty()) … … 872 892 } 873 893 874 875 894 /*! 876 895 \brief Send a message to create a field on server side
Note: See TracChangeset
for help on using the changeset viewer.