Changeset 321 for XIOS/trunk/src/node/file.cpp
- Timestamp:
- 02/23/12 14:57:50 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/node/file.cpp
r318 r321 141 141 return false ; 142 142 } 143 143 144 void CFile::initFile(void) 145 { 146 shared_ptr<CContext> context=CObjectFactory::GetObject<CContext>(CObjectFactory::GetCurrentContextId()) ; 147 date::CDate& currentDate=context->calendar->getCurrentDate() ; 148 149 if (! sync_freq.isEmpty()) syncFreq = date::CDuration::FromString(sync_freq.getValue()); 150 if (! split_freq.isEmpty()) splitFreq = date::CDuration::FromString(split_freq.getValue()); 151 if (! output_freq.isEmpty()) outputFreq = date::CDuration::FromString(output_freq.getValue()); 152 lastSync=new date::CDate(currentDate) ; 153 lastSplit=new date::CDate(currentDate) ; 154 isOpen=false ; 155 } 156 157 void CFile::checkFile(void) 158 { 159 if (!isOpen) createHeader() ; 160 checkSync() ; 161 checkSplit() ; 162 } 163 164 165 bool CFile::checkSync(void) 166 { 167 shared_ptr<CContext> context=CObjectFactory::GetObject<CContext>(CObjectFactory::GetCurrentContextId()) ; 168 date::CDate& currentDate=context->calendar->getCurrentDate() ; 169 if (! sync_freq.isEmpty()) 170 { 171 if (*lastSync+syncFreq < currentDate) 172 { 173 *lastSync=currentDate ; 174 data_out->syncFile() ; 175 return true ; 176 } 177 } 178 return false ; 179 } 180 181 182 bool CFile::checkSplit(void) 183 { 184 shared_ptr<CContext> context=CObjectFactory::GetObject<CContext>(CObjectFactory::GetCurrentContextId()) ; 185 date::CDate& currentDate=context->calendar->getCurrentDate() ; 186 if (! split_freq.isEmpty()) 187 { 188 if (*lastSplit+splitFreq < currentDate) 189 { 190 *lastSplit=currentDate-outputFreq ; 191 192 std::vector<boost::shared_ptr<CField> >::iterator it, end = this->enabledFields.end(); 193 for (it = this->enabledFields.begin() ;it != end; it++) (*it)->resetNStep() ; 194 createHeader() ; 195 return true ; 196 } 197 } 198 return false ; 199 } 200 144 201 void CFile::createHeader(void) 145 202 { 146 203 shared_ptr<CContext> context=CObjectFactory::GetObject<CContext>(CObjectFactory::GetCurrentContextId()) ; 147 148 if (! sync_freq.isEmpty()) syncFreq = date::CDuration::FromString(sync_freq.getValue()); 149 lastSync=new date::CDate(context->calendar->getCurrentDate()) ; 204 date::CDate& currentDate=context->calendar->getCurrentDate() ; 150 205 151 206 std::vector<boost::shared_ptr<CField> >::iterator it, end = this->enabledFields.end(); … … 168 223 oss << filename; 169 224 if (!name_suffix.isEmpty()) oss << name_suffix.getValue(); 170 225 // if (!split_freq.isEmpty()) oss<<"-["<<currentDate.toString()<<"]" ; 226 if (!split_freq.isEmpty()) oss<<"_"<<lastSplit->getStryyyymmdd()<<"-"<< (*lastSplit+(splitFreq-1*date::Second)).getStryyyymmdd(); 171 227 bool multifile=true ; 172 228 if (!type.isEmpty()) … … 187 243 oss << ".nc"; 188 244 245 if (isOpen) data_out->closeFile() ; 246 189 247 data_out=shared_ptr<io::CDataOutput>(new io::CNc4DataOutput(oss.str(), false,server->intraComm,multifile)); 248 isOpen=true ; 190 249 191 250 data_out->writeFile(CObjectFactory::GetObject<CFile>(this)); … … 208 267 void CFile::close(void) 209 268 { 269 delete lastSync ; 270 delete lastSplit ; 210 271 if (!AllDomainEmpty || type.getValue()=="one_file") 211 this->data_out->closeFile(); 212 delete lastSync ; 272 if (isOpen) 273 { 274 this->data_out->closeFile(); 275 } 213 276 } 214 277 //----------------------------------------------------------------
Note: See TracChangeset
for help on using the changeset viewer.