Changeset 449 for XIOS/trunk/src/output/nc4_data_output.cpp
- Timestamp:
- 09/19/13 17:05:07 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/output/nc4_data_output.cpp
r448 r449 57 57 void CNc4DataOutput::writeDomain_(CDomain* domain) 58 58 { 59 if (domain->type == CDomain::type_attr::unstructured) 60 { 61 writeUnstructuredDomain(domain) ; 62 return ; 63 } 64 59 65 CContext* context = CContext::getCurrent() ; 60 66 CContextServer* server=context->server ; … … 70 76 ? domain->name.getValue() : domain->getId(); 71 77 StdString appendDomid = (singleDomain) ? "" : "_"+domid ; 72 73 bool isCurvilinear = domain->isCurvilinear ; 78 79 74 80 StdString dimXid, dimYid ; 75 if (isCurvilinear) 76 { 77 dimXid = StdString("x").append(appendDomid); 78 dimYid = StdString("y").append(appendDomid); 79 } 80 else 81 { 82 dimXid = StdString("lon").append(appendDomid); 83 dimYid = StdString("lat").append(appendDomid); 81 82 switch (domain->type) 83 { 84 case CDomain::type_attr::curvilinear : 85 dimXid = StdString("x").append(appendDomid); 86 dimYid = StdString("y").append(appendDomid); 87 break ; 88 case CDomain::type_attr::regular : 89 dimXid = StdString("lon").append(appendDomid); 90 dimYid = StdString("lat").append(appendDomid); 91 break; 92 case CDomain::type_attr::unstructured : 93 dimXid = StdString("cell").append(appendDomid); 94 break; 84 95 } 85 96 86 string lonid,latid ;97 string lonid,latid,bounds_lonid,bounds_latid ; 87 98 /* 88 99 StdString lonid_loc = (server->intraCommSize > 1) … … 106 117 } 107 118 108 if (isCurvilinear) 109 { 110 dim0.push_back(dimYid); dim0.push_back(dimXid); 111 lonid = StdString("nav_lon").append(appendDomid); 112 latid = StdString("nav_lat").append(appendDomid); 119 switch (domain->type) 120 { 121 case CDomain::type_attr::curvilinear : 122 dim0.push_back(dimYid); dim0.push_back(dimXid); 123 lonid = StdString("nav_lon").append(appendDomid); 124 latid = StdString("nav_lat").append(appendDomid); 125 break ; 126 case CDomain::type_attr::regular : 127 lonid = StdString("lon").append(appendDomid); 128 latid = StdString("lat").append(appendDomid); 129 dim0.push_back(dimYid); 130 dim1.push_back(dimXid); 131 break; 132 case CDomain::type_attr::unstructured : 133 lonid = StdString("lon").append(appendDomid); 134 latid = StdString("lat").append(appendDomid); 135 bounds_lonid=string("bounds_lon").append(appendDomid); 136 bounds_latid=string("bounds_lat").append(appendDomid); 137 dim0.push_back(dimXid); 138 break; 139 } 140 141 if (domain->type == CDomain::type_attr::unstructured) 142 { 143 SuperClassWriter::addDimension(dimXid, domain->nj_glo); 113 144 } 114 145 else 115 146 { 116 lonid = StdString("lon").append(appendDomid); 117 latid = StdString("lat").append(appendDomid); 118 dim0.push_back(dimYid); 119 dim1.push_back(dimXid); 120 } 121 122 SuperClassWriter::addDimension(dimXid, domain->zoom_ni_srv); 123 SuperClassWriter::addDimension(dimYid, domain->zoom_nj_srv); 147 SuperClassWriter::addDimension(dimXid, domain->zoom_ni_srv); 148 SuperClassWriter::addDimension(dimYid, domain->zoom_nj_srv); 149 } 150 124 151 if (server->intraCommSize > 1) 125 152 { 126 this->writeLocalAttributes(domain->zoom_ibegin_srv, 127 domain->zoom_ni_srv, 128 domain->zoom_jbegin_srv, 129 domain->zoom_nj_srv, 130 appendDomid); 153 if (domain->type != CDomain::type_attr::unstructured) 154 { 155 this->writeLocalAttributes(domain->zoom_ibegin_srv, 156 domain->zoom_ni_srv, 157 domain->zoom_jbegin_srv, 158 domain->zoom_nj_srv, 159 appendDomid); 131 160 132 if (singleDomain) this->writeLocalAttributes_IOIPSL(domain->zoom_ibegin_srv, 133 domain->zoom_ni_srv, 134 domain->zoom_jbegin_srv, 135 domain->zoom_nj_srv, 136 domain->ni_glo,domain->nj_glo, 137 server->intraCommRank,server->intraCommSize); 138 } 139 140 if (isCurvilinear) 141 { 142 SuperClassWriter::addVariable(latid, NC_FLOAT, dim0); 143 SuperClassWriter::addVariable(lonid, NC_FLOAT, dim0); 144 } 145 else 146 { 147 SuperClassWriter::addVariable(latid, NC_FLOAT, dim0); 148 SuperClassWriter::addVariable(lonid, NC_FLOAT, dim1); 149 } 150 this->writeAxisAttributes 151 (lonid, "X", "longitude", "Longitude", "degrees_east", domid); 152 this->writeAxisAttributes 153 (latid, "Y", "latitude", "Latitude", "degrees_north", domid); 161 if (singleDomain) this->writeLocalAttributes_IOIPSL(domain->zoom_ibegin_srv, 162 domain->zoom_ni_srv, 163 domain->zoom_jbegin_srv, 164 domain->zoom_nj_srv, 165 domain->ni_glo,domain->nj_glo, 166 server->intraCommRank,server->intraCommSize); 167 } 168 } 169 170 switch (domain->type) 171 { 172 case CDomain::type_attr::curvilinear : 173 SuperClassWriter::addVariable(latid, NC_FLOAT, dim0); 174 SuperClassWriter::addVariable(lonid, NC_FLOAT, dim0); 175 break ; 176 case CDomain::type_attr::regular : 177 SuperClassWriter::addVariable(latid, NC_FLOAT, dim0); 178 SuperClassWriter::addVariable(lonid, NC_FLOAT, dim1); 179 break ; 180 case CDomain::type_attr::unstructured : 181 SuperClassWriter::addVariable(latid, NC_FLOAT, dim0); 182 SuperClassWriter::addVariable(lonid, NC_FLOAT, dim0); 183 } 184 185 this->writeAxisAttributes(lonid, "X", "longitude", "Longitude", "degrees_east", domid); 186 this->writeAxisAttributes(latid, "Y", "latitude", "Latitude", "degrees_north", domid); 154 187 155 188 dim0.clear(); 156 dim0.push_back(dimYid);189 if (domain->type != CDomain::type_attr::unstructured) dim0.push_back(dimYid); 157 190 dim0.push_back(dimXid); 158 191 … … 173 206 174 207 SuperClassWriter::definition_end(); 175 if (isCurvilinear) 176 {177 178 SuperClassWriter::writeData(domain->latvalue_srv, latid, isCollective, 0);179 SuperClassWriter::writeData(domain->lonvalue_srv, lonid, isCollective, 0);180 // supress mask if (server->intraCommSize > 1) SuperClassWriter::writeData(mask, maskid);181 }182 else183 {184 CArray<double,1> lat = domain->latvalue_srv(Range(fromStart,toEnd,domain->zoom_ni_srv));185 SuperClassWriter::writeData(CArray<double,1>(lat.copy()), latid, isCollective, 0);186 CArray<double,1> lon=domain->lonvalue_srv(Range(0,domain->zoom_ni_srv-1));187 SuperClassWriter::writeData(CArray<double,1>(lon.copy()), lonid, isCollective, 0);208 209 switch (domain->type) 210 { 211 case CDomain::type_attr::curvilinear : 212 SuperClassWriter::writeData(domain->latvalue_srv, latid, isCollective, 0); 213 SuperClassWriter::writeData(domain->lonvalue_srv, lonid, isCollective, 0); 214 break; 215 case CDomain::type_attr::regular : 216 CArray<double,1> lat = domain->latvalue_srv(Range(fromStart,toEnd,domain->zoom_ni_srv)) ; 217 SuperClassWriter::writeData(CArray<double,1>(lat.copy()), latid, isCollective, 0); 218 CArray<double,1> lon=domain->lonvalue_srv(Range(0,domain->zoom_ni_srv-1)) ; 219 SuperClassWriter::writeData(CArray<double,1>(lon.copy()), lonid, isCollective, 0); 220 break; 188 221 } 189 222 SuperClassWriter::definition_start(); … … 197 230 198 231 199 if (isCurvilinear) 200 { 201 dim0.push_back(dimYid); dim0.push_back(dimXid); 202 lonid = StdString("nav_lon").append(appendDomid); 203 latid = StdString("nav_lat").append(appendDomid); 204 SuperClassWriter::addVariable(latid, NC_FLOAT, dim0); 205 SuperClassWriter::addVariable(lonid, NC_FLOAT, dim0); 206 } 207 else 208 { 209 dim0.push_back(dimYid); 210 dim1.push_back(dimXid); 211 lonid = StdString("lon").append(appendDomid); 212 latid = StdString("lat").append(appendDomid); 213 SuperClassWriter::addVariable(latid, NC_FLOAT, dim0); 214 SuperClassWriter::addVariable(lonid, NC_FLOAT, dim1); 232 switch (domain->type) 233 { 234 case CDomain::type_attr::curvilinear : 235 dim0.push_back(dimYid); dim0.push_back(dimXid); 236 lonid = StdString("nav_lon").append(appendDomid); 237 latid = StdString("nav_lat").append(appendDomid); 238 SuperClassWriter::addVariable(latid, NC_FLOAT, dim0); 239 SuperClassWriter::addVariable(lonid, NC_FLOAT, dim0); 240 break; 241 242 case CDomain::type_attr::regular : 243 dim0.push_back(dimYid); 244 dim1.push_back(dimXid); 245 lonid = StdString("lon").append(appendDomid); 246 latid = StdString("lat").append(appendDomid); 247 SuperClassWriter::addVariable(latid, NC_FLOAT, dim0); 248 SuperClassWriter::addVariable(lonid, NC_FLOAT, dim1); 249 break; 215 250 } 216 251 this->writeAxisAttributes … … 221 256 222 257 SuperClassWriter::definition_end(); 223 if (isCurvilinear) 224 { 225 std::vector<StdSize> start(2) ; 226 std::vector<StdSize> count(2) ; 227 if (domain->isEmpty()) 258 switch (domain->type) 259 { 260 case CDomain::type_attr::curvilinear : 228 261 { 229 start[0]=0 ; start [1]=0 ; 230 count[0]=0 ; count[1]=0 ; 262 std::vector<StdSize> start(2) ; 263 std::vector<StdSize> count(2) ; 264 if (domain->isEmpty()) 265 { 266 start[0]=0 ; start [1]=0 ; 267 count[0]=0 ; count[1]=0 ; 268 } 269 else 270 { 271 start[1]=domain->zoom_ibegin_srv-domain->zoom_ibegin.getValue() ; start [0]=domain->zoom_jbegin_srv-domain->zoom_jbegin.getValue() ; 272 count[1]=domain->zoom_ni_srv ; count[0]=domain->zoom_nj_srv ; 273 } 274 275 SuperClassWriter::writeData(domain->latvalue_srv, latid, isCollective, 0,&start,&count); 276 SuperClassWriter::writeData(domain->lonvalue_srv, lonid, isCollective, 0,&start,&count); 277 break; 231 278 } 232 else279 case CDomain::type_attr::regular : 233 280 { 234 start[1]=domain->zoom_ibegin_srv-domain->zoom_ibegin.getValue() ; start [0]=domain->zoom_jbegin_srv-domain->zoom_jbegin.getValue() ; 235 count[1]=domain->zoom_ni_srv ; count[0]=domain->zoom_nj_srv ; 236 } 237 238 SuperClassWriter::writeData(domain->latvalue_srv, latid, isCollective, 0,&start,&count); 239 SuperClassWriter::writeData(domain->lonvalue_srv, lonid, isCollective, 0,&start,&count); 240 } 241 else 242 { 243 std::vector<StdSize> start(1) ; 244 std::vector<StdSize> count(1) ; 245 if (domain->isEmpty()) 246 { 247 start[0]=0 ; 248 count[0]=0 ; 249 SuperClassWriter::writeData(domain->latvalue_srv, latid, isCollective, 0,&start,&count); 250 SuperClassWriter::writeData(domain->lonvalue_srv, lonid, isCollective, 0,&start,&count); } 251 else 252 { 253 start[0]=domain->zoom_jbegin_srv-domain->zoom_jbegin.getValue() ; 254 count[0]=domain->zoom_nj_srv ; 255 CArray<double,1> lat = domain->latvalue_srv(Range(fromStart,toEnd,domain->zoom_ni_srv)) ; 256 SuperClassWriter::writeData(CArray<double,1>(lat.copy()), latid, isCollective, 0,&start,&count); 257 258 start[0]=domain->zoom_ibegin_srv-domain->zoom_ibegin.getValue() ; 259 count[0]=domain->zoom_ni_srv ; 260 CArray<double,1> lon=domain->lonvalue_srv(Range(0,domain->zoom_ni_srv-1)) ; 261 SuperClassWriter::writeData(CArray<double,1>(lon.copy()), lonid, isCollective, 0,&start,&count); 281 std::vector<StdSize> start(1) ; 282 std::vector<StdSize> count(1) ; 283 if (domain->isEmpty()) 284 { 285 start[0]=0 ; 286 count[0]=0 ; 287 SuperClassWriter::writeData(domain->latvalue_srv, latid, isCollective, 0,&start,&count); 288 SuperClassWriter::writeData(domain->lonvalue_srv, lonid, isCollective, 0,&start,&count); } 289 else 290 { 291 start[0]=domain->zoom_jbegin_srv-domain->zoom_jbegin.getValue() ; 292 count[0]=domain->zoom_nj_srv ; 293 CArray<double,1> lat = domain->latvalue_srv(Range(fromStart,toEnd,domain->zoom_ni_srv)) ; 294 SuperClassWriter::writeData(CArray<double,1>(lat.copy()), latid, isCollective, 0,&start,&count); 295 296 start[0]=domain->zoom_ibegin_srv-domain->zoom_ibegin.getValue() ; 297 count[0]=domain->zoom_ni_srv ; 298 CArray<double,1> lon=domain->lonvalue_srv(Range(0,domain->zoom_ni_srv-1)) ; 299 SuperClassWriter::writeData(CArray<double,1>(lon.copy()), lonid, isCollective, 0,&start,&count); 300 } 301 break; 262 302 } 263 303 } … … 273 313 } 274 314 315 void CNc4DataOutput::writeUnstructuredDomain(CDomain* domain) 316 { 317 CContext* context = CContext::getCurrent() ; 318 CContextServer* server=context->server ; 319 320 if (domain->IsWritten(this->filename)) return; 321 domain->checkAttributes(); 322 323 if (domain->isEmpty()) 324 if (SuperClass::type==MULTI_FILE) return ; 325 326 std::vector<StdString> dim0, dim1; 327 StdString domid = (!domain->name.isEmpty()) 328 ? domain->name.getValue() : domain->getId(); 329 StdString appendDomid = (singleDomain) ? "" : "_"+domid ; 330 331 332 StdString dimXid = StdString("cell").append(appendDomid); 333 StdString dimVertId = StdString("nvertex").append(appendDomid); 334 335 string lonid,latid,bounds_lonid,bounds_latid ; 336 337 switch (SuperClass::type) 338 { 339 case (MULTI_FILE) : 340 { 341 lonid = StdString("lon").append(appendDomid); 342 latid = StdString("lat").append(appendDomid); 343 dim0.push_back(dimXid); 344 345 SuperClassWriter::addDimension(dimXid, domain->zoom_nj_srv); 346 SuperClassWriter::addVariable(latid, NC_FLOAT, dim0); 347 SuperClassWriter::addVariable(lonid, NC_FLOAT, dim0); 348 349 bounds_lonid = StdString("bounds_lon").append(appendDomid); 350 bounds_latid = StdString("bounds_lat").append(appendDomid); 351 352 353 this->writeAxisAttributes(lonid, "X", "longitude", "Longitude", "degrees_east", domid); 354 if (domain->hasBounds) SuperClassWriter::addAttribute("bounds",bounds_lonid, &lonid); 355 this->writeAxisAttributes(latid, "Y", "latitude", "Latitude", "degrees_north", domid); 356 if (domain->hasBounds) SuperClassWriter::addAttribute("bounds",bounds_latid, &latid); 357 if (domain->hasBounds) SuperClassWriter::addDimension(dimVertId, domain->nvertex); 358 dim0.clear(); 359 if (domain->hasBounds) 360 { 361 dim0.push_back(dimXid); 362 dim0.push_back(dimVertId); 363 SuperClassWriter::addVariable(bounds_lonid, NC_FLOAT, dim0); 364 SuperClassWriter::addVariable(bounds_latid, NC_FLOAT, dim0); 365 } 366 367 dim0.clear(); 368 dim0.push_back(dimXid); 369 370 SuperClassWriter::definition_end(); 371 372 SuperClassWriter::writeData(domain->latvalue_srv, latid, isCollective, 0); 373 SuperClassWriter::writeData(domain->lonvalue_srv, lonid, isCollective, 0); 374 375 if (domain->hasBounds) 376 { 377 SuperClassWriter::writeData(domain->bounds_lon_srv, bounds_lonid, isCollective, 0); 378 SuperClassWriter::writeData(domain->bounds_lat_srv, bounds_latid, isCollective, 0); 379 } 380 SuperClassWriter::definition_start(); 381 break ; 382 } 383 384 case (ONE_FILE) : 385 { 386 lonid = StdString("lon").append(appendDomid); 387 latid = StdString("lat").append(appendDomid); 388 bounds_lonid = StdString("bounds_lon").append(appendDomid); 389 bounds_latid = StdString("bounds_lat").append(appendDomid); 390 dim0.push_back(dimXid); 391 SuperClassWriter::addDimension(dimXid, domain->nj_glo); 392 SuperClassWriter::addVariable(latid, NC_FLOAT, dim0); 393 SuperClassWriter::addVariable(lonid, NC_FLOAT, dim0); 394 this->writeAxisAttributes(lonid, "X", "longitude", "Longitude", "degrees_east", domid); 395 if (domain->hasBounds) SuperClassWriter::addAttribute("bounds",bounds_lonid, &lonid); 396 this->writeAxisAttributes(latid, "Y", "latitude", "Latitude", "degrees_north", domid); 397 if (domain->hasBounds) SuperClassWriter::addAttribute("bounds",bounds_latid, &latid); 398 if (domain->hasBounds) SuperClassWriter::addDimension(dimVertId, domain->nvertex); 399 dim0.clear(); 400 401 if (domain->hasBounds) 402 { 403 dim0.push_back(dimXid); 404 dim0.push_back(dimVertId); 405 SuperClassWriter::addVariable(bounds_lonid, NC_FLOAT, dim0); 406 SuperClassWriter::addVariable(bounds_latid, NC_FLOAT, dim0); 407 } 408 409 SuperClassWriter::definition_end(); 410 411 std::vector<StdSize> start(1), startBounds(2) ; 412 std::vector<StdSize> count(1), countBounds(2) ; 413 if (domain->isEmpty()) 414 { 415 start[0]=0 ; 416 count[0]=0 ; 417 startBounds[0]=0 ; 418 countBounds[0]=domain->nvertex ; 419 startBounds[1]=0 ; 420 countBounds[1]=0 ; 421 } 422 else 423 { 424 start[0]=domain->zoom_jbegin_srv-domain->zoom_jbegin ; 425 count[0]=domain->zoom_nj_srv ; 426 startBounds[0]=0 ; 427 countBounds[0]=domain->nvertex ; 428 startBounds[1]=domain->zoom_jbegin_srv-domain->zoom_jbegin ; 429 countBounds[1]=domain->zoom_nj_srv ; 430 } 431 SuperClassWriter::writeData(domain->latvalue_srv, latid, isCollective, 0,&start,&count); 432 SuperClassWriter::writeData(domain->lonvalue_srv, lonid, isCollective, 0,&start,&count); 433 if (domain->hasBounds) 434 { 435 SuperClassWriter::writeData(domain->bounds_lon_srv, bounds_lonid, isCollective, 0,&start,&count); 436 SuperClassWriter::writeData(domain->bounds_lat_srv, bounds_latid, isCollective, 0,&startBounds,&countBounds); 437 } 438 439 440 SuperClassWriter::definition_start(); 441 442 break; 443 } 444 default : 445 ERROR("CNc4DataOutput::writeDomain(domain)", 446 << "[ type = " << SuperClass::type << "]" 447 << " not implemented yet !"); 448 } 449 domain->addRelFile(this->filename); 450 } 275 451 //-------------------------------------------------------------- 276 452 … … 334 510 void CNc4DataOutput::writeTimeDimension_(void) 335 511 { 336 SuperClassWriter::addDimension( string("time_counter"));512 SuperClassWriter::addDimension("time_counter"); 337 513 } 338 514 //-------------------------------------------------------------- … … 355 531 StdString appendDomid = (singleDomain) ? "" : "_"+domid ; 356 532 357 bool isCurvilinear = domain->isCurvilinear ; 533 // bool isCurvilinear = domain->isCurvilinear ; 534 // bool isCurvilinear = (domain->type == CDomain::type_attr::curvilinear) ; 358 535 359 536 StdString dimXid,dimYid ; 360 537 361 if (isCurvilinear) 362 { 363 dimXid = StdString("x").append(appendDomid); 364 dimYid = StdString("y").append(appendDomid); 365 } 366 else 367 { 368 dimXid = StdString("lon").append(appendDomid); 369 dimYid = StdString("lat").append(appendDomid); 370 } 538 switch (domain->type) 539 { 540 case CDomain::type_attr::curvilinear : 541 dimXid = StdString("x").append(appendDomid); 542 dimYid = StdString("y").append(appendDomid); 543 break ; 544 case CDomain::type_attr::regular : 545 dimXid = StdString("lon").append(appendDomid); 546 dimYid = StdString("lat").append(appendDomid); 547 break ; 548 case CDomain::type_attr::unstructured : 549 dimXid = StdString("cell").append(appendDomid); 550 break ; 551 } 371 552 372 553 /* … … 388 569 ( field->prec.getValue() == 4)) 389 570 ? NC_FLOAT : NC_DOUBLE; 390 bool wtime = !(!field->operation.isEmpty() && 391 ( field->operation.getValue().compare("once") == 0)); 571 bool wtime = !(!field->operation.isEmpty() && field->foperation->timeType() == func::CFunctor::once); 392 572 393 573 if (wtime) 394 574 { 395 StdOStringStream oss; 396 oss << "time_" << field->operation.getValue() 397 << "_" << field->getRelFile()->output_freq.getValue(); 398 399 coodinates.push_back(oss.str()); 575 576 //StdOStringStream oss; 577 // oss << "time_" << field->operation.getValue() 578 // << "_" << field->getRelFile()->output_freq.getValue(); 579 //oss 580 if (field->foperation->timeType() == func::CFunctor::instant) coodinates.push_back(string("time_instant")); 581 else if (field->foperation->timeType() == func::CFunctor::centered) coodinates.push_back(string("time_centered")); 400 582 dims.push_back(timeid); 401 583 } … … 409 591 } 410 592 411 if (isCurvilinear) 412 { 413 coodinates.push_back(StdString("nav_lat").append(appendDomid)); 414 coodinates.push_back(StdString("nav_lon").append(appendDomid)); 415 } 416 else 417 { 593 switch (domain->type) 594 { 595 case CDomain::type_attr::curvilinear : 596 coodinates.push_back(StdString("nav_lon").append(appendDomid)); 597 coodinates.push_back(StdString("nav_lat").append(appendDomid)); 598 break; 599 case CDomain::type_attr::regular : 600 case CDomain::type_attr::unstructured : 601 coodinates.push_back(StdString("lon").append(appendDomid)); 418 602 coodinates.push_back(StdString("lat").append(appendDomid)); 419 coodinates.push_back(StdString("lon").append(appendDomid)); 420 } 421 422 switch (SuperClass::type) 423 { 424 case (MULTI_FILE) : 425 { 426 dims.push_back(dimYid); 427 dims.push_back(dimXid); 428 break ; 429 } 430 case (ONE_FILE) : 431 { 432 dims.push_back(dimYid); 433 dims.push_back(dimXid); 434 break; 435 } 436 default : 437 ERROR("CNc4DataOutput::writeDomain(domain)", 438 << "[ type = " << SuperClass::type << "]" 439 << " not implemented yet !"); 440 } 603 break; 604 } 605 606 if ( domain->type == CDomain::type_attr::curvilinear || type == CDomain::type_attr::regular)dims.push_back(dimYid); 607 dims.push_back(dimXid); 441 608 442 609 SuperClassWriter::addVariable(fieldid, type, dims); … … 567 734 568 735 StdOStringStream oss; 569 oss << "time_" << field->operation.getValue() 570 << "_" << field->getRelFile()->output_freq.getValue(); 736 string timeAxisId ; 737 if (field->foperation->timeType() == func::CFunctor::instant) timeAxisId="time_instant" ; 738 else if (field->foperation->timeType() == func::CFunctor::centered) timeAxisId="time_centered" ; 739 571 740 572 741 CArray<double,1> time_data(1) ; 573 574 bool wtime = !(!field->operation.isEmpty() &&575 ( field->operation.getValue().compare("once") == 0));742 CArray<double,1> time_counter(1) ; 743 744 bool wtime = !(!field->operation.isEmpty() && (field->foperation->timeType() == func::CFunctor::once)); 576 745 577 746 if (wtime) 578 747 { 579 if (field->operation.getValue()=="instant") time_data(0) = Time(*field->last_Write_srv) 580 -Time(context->calendar->getTimeOrigin()); 581 else time_data(0) = (Time(*field->last_Write_srv)+Time(*field->lastlast_Write_srv))/2 582 -Time(context->calendar->getTimeOrigin()); 748 time_counter(0)= (Time(*field->last_Write_srv)+Time(*field->lastlast_Write_srv))/2 -Time(context->calendar->getTimeOrigin()); 749 if (field->foperation->timeType() == func::CFunctor::instant) 750 time_data(0) = Time(*field->last_Write_srv)-Time(context->calendar->getTimeOrigin()); 751 else if (field->foperation->timeType() == func::CFunctor::centered) time_data(0) = time_counter(0); 752 583 753 } 584 754 … … 599 769 { 600 770 SuperClassWriter::writeData(field_data3D, fieldid, isCollective, field->getNStep()-1); 601 if (wtime) SuperClassWriter::writeData(time_data, oss.str(), isCollective, field->getNStep()-1); 771 if (wtime) 772 { 773 SuperClassWriter::writeData(time_data, timeAxisId, isCollective, field->getNStep()-1); 774 SuperClassWriter::writeData(time_counter, string("time_counter"), isCollective, field->getNStep()-1); 775 } 602 776 break ; 603 777 } … … 618 792 } 619 793 SuperClassWriter::writeData(field_data3D, fieldid, isCollective, field->getNStep()-1,&start,&count ); 620 if (wtime) SuperClassWriter::writeTimeAxisData(time_data, oss.str(), isCollective, field->getNStep()-1,isRoot ); 794 if (wtime) 795 { 796 SuperClassWriter::writeTimeAxisData(time_data, timeAxisId, isCollective, field->getNStep()-1,isRoot ); 797 SuperClassWriter::writeTimeAxisData(time_counter, string("time_counter"), isCollective, field->getNStep()-1,isRoot ); 798 } 621 799 break; 622 800 } … … 634 812 { 635 813 SuperClassWriter::writeData(field_data2D, fieldid, isCollective, field->getNStep()-1); 636 if (wtime) SuperClassWriter::writeData(time_data, oss.str(), isCollective, field->getNStep()-1); 814 if (wtime) 815 { 816 SuperClassWriter::writeData(time_data, timeAxisId, isCollective, field->getNStep()-1); 817 SuperClassWriter::writeData(time_counter, string("time_counter"), isCollective, field->getNStep()-1); 818 } 637 819 break; 638 820 } … … 653 835 654 836 SuperClassWriter::writeData(field_data2D, fieldid, isCollective, field->getNStep()-1,&start,&count); 655 if (wtime) SuperClassWriter::writeTimeAxisData(time_data, oss.str(), isCollective, field->getNStep()-1,isRoot); 837 if (wtime) 838 { 839 SuperClassWriter::writeTimeAxisData(time_data, timeAxisId, isCollective, field->getNStep()-1,isRoot); 840 SuperClassWriter::writeTimeAxisData(time_counter, string("time_counter"), isCollective, field->getNStep()-1,isRoot); 841 } 656 842 break; 657 843 … … 669 855 StdOStringStream oss; 670 856 671 if (field->operation.getValue().compare("once") == 0) return ; 672 673 oss << "time_" << field->operation.getValue() 674 << "_" << field->getRelFile()->output_freq.getValue(); 675 857 // if (field->operation.getValue().compare("once") == 0) return ; 858 if (field->foperation->timeType() == func::CFunctor::once) return ; 859 860 // oss << "time_" << field->operation.getValue() 861 // << "_" << field->getRelFile()->output_freq.getValue(); 862 863 string axisid ; 864 if (field->foperation->timeType() == func::CFunctor::centered) axisid="time_centered" ; 865 else if (field->foperation->timeType() == func::CFunctor::instant) axisid="time_instant" ; 866 676 867 std::vector<StdString> dims; 677 StdString axisid = oss.str();868 // StdString axisid = oss.str(); 678 869 StdString timeid = StdString("time_counter"); 679 870 … … 682 873 { 683 874 SuperClassWriter::addVariable(axisid, NC_DOUBLE, dims); 875 684 876 CDate timeOrigin=cal->getTimeOrigin() ; 685 877 // StdOStringStream oss2; … … 693 885 strTimeOrigin); 694 886 } 887 888 dims.clear() ; 889 axisid = "time_counter" ; 890 timeid = "time_counter" ; 891 892 dims.push_back(timeid); 893 if (!SuperClassWriter::varExist(axisid)) 894 { 895 SuperClassWriter::addVariable(axisid, NC_DOUBLE, dims); 896 SuperClassWriter::addAttribute("axis", string("T"), &axisid); 897 CDate timeOrigin=cal->getTimeOrigin() ; 898 StdString strTimeOrigin=timeOrigin.toString() ; 899 this->writeTimeAxisAttributes 900 (axisid, cal->getType(), 901 StdString("seconds since ").append(strTimeOrigin), 902 strTimeOrigin); 903 } 904 695 905 696 906 }
Note: See TracChangeset
for help on using the changeset viewer.