Changeset 609 for XIOS/trunk/src/output/nc4_data_output.cpp
- Timestamp:
- 06/05/15 16:42:18 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/output/nc4_data_output.cpp
r607 r609 482 482 void CNc4DataOutput::writeAxis_(CAxis* axis) 483 483 { 484 if (axis->IsWritten(this->filename)) return; 485 axis->checkAttributes(); 486 StdSize zoom_size_srv=axis->zoom_size_srv; 487 StdSize zoom_begin_srv=axis->zoom_begin_srv; 488 StdSize zoom_size = (MULTI_FILE == SuperClass::type) ? zoom_size_srv 489 : axis->zoom_size; 490 StdSize zoom_begin = (MULTI_FILE == SuperClass::type) ? zoom_begin_srv 491 : axis->zoom_begin; 492 493 494 std::vector<StdString> dims; 495 StdString axisid = (!axis->name.isEmpty()) 496 ? axis->name.getValue() : axis->getId(); 497 try 498 { 499 SuperClassWriter::addDimension(axisid, zoom_size); 500 dims.push_back(axisid); 501 502 switch (SuperClass::type) 503 { 504 case (MULTI_FILE ) : 505 {} 506 case (ONE_FILE) : 484 if (axis->IsWritten(this->filename)) return; 485 axis->checkAttributes(); 486 int zoom_size_srv = axis->zoom_size_srv; 487 int zoom_begin_srv = axis->zoom_begin_srv; 488 int zoom_size = (MULTI_FILE == SuperClass::type) ? zoom_size_srv : axis->zoom_size; 489 int zoom_begin = (MULTI_FILE == SuperClass::type) ? zoom_begin_srv : axis->zoom_begin; 490 491 492 std::vector<StdString> dims; 493 StdString axisid = !axis->name.isEmpty() ? axis->name.getValue() : axis->getId(); 494 try 495 { 496 SuperClassWriter::addDimension(axisid, zoom_size); 497 dims.push_back(axisid); 498 499 switch (SuperClass::type) 500 { 501 case MULTI_FILE: 502 case ONE_FILE: 503 { 504 SuperClassWriter::addVariable(axisid, NC_FLOAT, dims); 505 506 SuperClassWriter::addAttribute("axis", StdString("Z"), &axisid); 507 508 if (!axis->name.isEmpty()) 509 SuperClassWriter::addAttribute("name", axis->name.getValue(), &axisid); 510 511 if (!axis->standard_name.isEmpty()) 512 SuperClassWriter::addAttribute("standard_name", axis->standard_name.getValue(), &axisid); 513 514 if (!axis->long_name.isEmpty()) 515 SuperClassWriter::addAttribute("long_name", axis->long_name.getValue(), &axisid); 516 517 if (!axis->unit.isEmpty()) 518 SuperClassWriter::addAttribute("units", axis->unit.getValue(), &axisid); 519 520 if (!axis->positive.isEmpty()) 521 if (axis->positive == CAxis::positive_attr::up) SuperClassWriter::addAttribute("positive", string("up"), &axisid); 522 else SuperClassWriter::addAttribute("positive", string("down"), &axisid); 523 524 StdString axisBoundsId = axisid + "_bounds"; 525 if (!axis->bounds.isEmpty()) 507 526 { 508 SuperClassWriter::addVariable(axisid, NC_FLOAT, dims); 509 510 SuperClassWriter::addAttribute("axis", StdString("Z"), &axisid); 511 512 if (!axis->name.isEmpty()) 513 SuperClassWriter::addAttribute 514 ("name", axis->name.getValue(), &axisid); 515 516 if (!axis->standard_name.isEmpty()) 517 SuperClassWriter::addAttribute 518 ("standard_name", axis->standard_name.getValue(), &axisid); 519 520 if (!axis->long_name.isEmpty()) 521 SuperClassWriter::addAttribute 522 ("long_name", axis->long_name.getValue(), &axisid); 523 524 if (!axis->unit.isEmpty()) 525 SuperClassWriter::addAttribute 526 ("units", axis->unit.getValue(), &axisid); 527 528 if (!axis->positive.isEmpty()) 529 if (axis->positive==CAxis::positive_attr::up) SuperClassWriter::addAttribute("positive", string("up"), &axisid); 530 else SuperClassWriter::addAttribute("positive", string("down"), &axisid); 531 532 SuperClassWriter::definition_end(); 533 534 CArray<double,1> axis_value(zoom_size) ; 535 for(StdSize i = 0 ; i < zoom_size_srv ; i++) axis_value(i)=axis->value(i+zoom_begin_srv) ; 536 SuperClassWriter::writeData(axis_value, axisid, isCollective, 0); 537 538 SuperClassWriter::definition_start(); 539 540 break; 527 dims.push_back("axis_nbounds"); 528 SuperClassWriter::addVariable(axisBoundsId, NC_FLOAT, dims); 529 SuperClassWriter::addAttribute("bounds", axisBoundsId, &axisid); 541 530 } 542 default : 543 ERROR("CNc4DataOutput::writeDomain(domain)", 544 << "[ type = " << SuperClass::type << "]" 545 << " not implemented yet !"); 546 } 547 } 548 catch (CNetCdfException& e) 549 { 550 StdString msg("On writing the axis : "); 551 msg.append(axisid); msg.append("\n"); 552 msg.append("In the context : "); 553 CContext* context = CContext::getCurrent() ; 554 msg.append(context->getId()); msg.append("\n"); 555 msg.append(e.what()); 556 ERROR("CNc4DataOutput::writeAxis_(CAxis* axis)", << msg); 557 } 558 axis->addRelFile(this->filename); 531 532 SuperClassWriter::definition_end(); 533 534 CArray<double,1> axis_value(zoom_size); 535 for (int i = 0; i < zoom_size_srv; i++) axis_value(i) = axis->value(i + zoom_begin_srv); 536 SuperClassWriter::writeData(axis_value, axisid, isCollective, 0); 537 538 if (!axis->bounds.isEmpty()) 539 { 540 CArray<double,2> axisBounds(zoom_size, 2); 541 for (int i = 0; i < zoom_size_srv; i++) 542 { 543 axisBounds(i, 0) = axis->bounds(i + zoom_begin_srv, 0); 544 axisBounds(i, 1) = axis->bounds(i + zoom_begin_srv, 1); 545 } 546 SuperClassWriter::writeData(axisBounds, axisBoundsId, isCollective, 0); 547 } 548 549 SuperClassWriter::definition_start(); 550 551 break; 552 } 553 default : 554 ERROR("CNc4DataOutput::writeDomain(domain)", 555 << "[ type = " << SuperClass::type << "]" 556 << " not implemented yet !"); 557 } 558 } 559 catch (CNetCdfException& e) 560 { 561 StdString msg("On writing the axis : "); 562 msg.append(axisid); msg.append("\n"); 563 msg.append("In the context : "); 564 CContext* context = CContext::getCurrent() ; 565 msg.append(context->getId()); msg.append("\n"); 566 msg.append(e.what()); 567 ERROR("CNc4DataOutput::writeAxis_(CAxis* axis)", << msg); 568 } 569 axis->addRelFile(this->filename); 559 570 } 560 571 … … 999 1010 ? file->description.getValue() 1000 1011 : StdString("Created by xios"); 1012 1013 singleDomain = (file->nbDomains == 1); 1014 1001 1015 try 1002 1016 { 1003 1017 this->writeFileAttributes(filename, description, 1004 StdString 1018 StdString("CF-1.1"), 1005 1019 StdString("An IPSL model"), 1006 1020 this->getTimeStamp()); 1021 1022 if (file->nbAxis >= 1) 1023 SuperClassWriter::addDimension("axis_nbounds", 2); 1007 1024 } 1008 1025 catch (CNetCdfException& e) … … 1016 1033 ERROR("CNc4DataOutput::writeFile_ (CFile* file)", << msg); 1017 1034 } 1018 if (file->nbDomain==1) singleDomain=true ;1019 else singleDomain=false ;1020 1035 } 1021 1036
Note: See TracChangeset
for help on using the changeset viewer.