//! Initialize a file in order to write into it void CFile::initFile(void) { CContext* context = CContext::getCurrent(); const CDate& currentDate = context->calendar->getCurrentDate(); CContextServer* server = context->server; lastSync = currentDate; lastSplit = currentDate; if (!split_freq.isEmpty()) { StdString keySuffix("CContext_"+CContext::getCurrent()->getId()+"::CFile_"+getFileOutputName()+"::") ; if (context->registryIn->foundKey(keySuffix+"splitStart") && context->registryIn->foundKey(keySuffix+"splitEnd")) { CDate savedSplitStart(*context->getCalendar()), savedSplitEnd(*context->getCalendar()); context->registryIn->getKey(keySuffix+"splitStart", savedSplitStart); context->registryIn->getKey(keySuffix+"splitEnd", savedSplitEnd); if (savedSplitStart <= lastSplit && lastSplit <= savedSplitEnd) lastSplit = savedSplitStart; } } isOpen = false; allDomainEmpty = true; // if (!record_offset.isEmpty() && record_offset < 0) // ERROR("void CFile::initFile(void)", // "Invalid 'record_offset', this attribute cannot be negative."); const int recordOffset = record_offset.isEmpty() ? 0 : record_offset; // set<CAxis*> setAxis; // set<CDomain*> setDomains; set<StdString> setAxis; set<StdString> setDomains; std::vector<CField*>::iterator it, end = this->enabledFields.end(); for (it = this->enabledFields.begin(); it != end; it++) { CField* field = *it; allDomainEmpty &= !field->grid->doGridHaveDataToWrite(); std::vector<CAxis*> vecAxis = field->grid->getAxis(); for (size_t i = 0; i < vecAxis.size(); ++i) setAxis.insert(vecAxis[i]->getAxisOutputName()); // setAxis.insert(vecAxis[i]); std::vector<CDomain*> vecDomains = field->grid->getDomains(); for (size_t i = 0; i < vecDomains.size(); ++i) setDomains.insert(vecDomains[i]->getDomainOutputName()); // setDomains.insert(vecDomains[i]); field->resetNStep(recordOffset); } nbAxis = setAxis.size(); nbDomains = setDomains.size(); // create sub communicator for file int color = allDomainEmpty ? 0 : 1; MPI_Comm_split(server->intraComm, color, server->intraCommRank, &fileComm); if (allDomainEmpty) MPI_Comm_free(&fileComm); // if (time_counter.isEmpty()) time_counter.setValue(time_counter_attr::centered); if (time_counter_name.isEmpty()) time_counter_name = "time_counter"; }