Changeset 300 for XMLIO_V2/dev/common/src/output/nc4_data_output.cpp
- Timestamp:
- 02/13/12 19:35:25 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XMLIO_V2/dev/common/src/output/nc4_data_output.cpp
r292 r300 10 10 #include "xios_manager.hpp" 11 11 #include "context.hpp" 12 #include "context_server.hpp" 12 13 13 14 namespace xmlioserver … … 58 59 void CNc4DataOutput::writeDomain_(const boost::shared_ptr<tree::CDomain> domain) 59 60 { 61 shared_ptr<CContext> context=CObjectFactory::GetObject<CContext>(CObjectFactory::GetCurrentContextId()) ; 62 CContextServer* server=context->server ; 63 60 64 if (domain->IsWritten(this->filename)) return; 61 65 domain->checkAttributes(); 62 66 63 // if (domain->isEmpty()) return; 67 if (domain->isEmpty()) 68 if (SuperClass::type==MULTI_FILE) return ; 64 69 65 70 std::vector<StdString> dim0, dim1; … … 68 73 StdString lonid = StdString("lon_").append(domid); 69 74 StdString latid = StdString("lat_").append(domid); 70 StdString lonid_loc = ( comm::CMPIManager::GetCommSize(CXIOSManager::Comm_Server)> 1)75 StdString lonid_loc = (server->intraCommSize > 1) 71 76 ? StdString("lon_").append(domid).append("_local") 72 77 : lonid; 73 StdString latid_loc = ( comm::CMPIManager::GetCommSize(CXIOSManager::Comm_Server)> 1)78 StdString latid_loc = (server->intraCommSize > 1) 74 79 ? StdString("lat_").append(domid).append("_local") 75 80 : latid; 76 StdString maskid = StdString("mask_").append(domid).append("_local"); 77 78 ARRAY(int, 2) mask = domain->getLocalMask(); 79 80 unsigned int ssize = domain->zoom_ni_loc.getValue() * domain->zoom_nj_loc.getValue(); 81 bool isCurvilinear = (domain->lonvalue.getValue()->size() == ssize); 81 // supress mask StdString maskid = StdString("mask_").append(domid).append("_local"); 82 83 // supress mask ARRAY(int, 2) mask = domain->getLocalMask(); 84 85 // unsigned int ssize = domain->zoom_ni_loc.getValue() * domain->zoom_nj_loc.getValue(); 86 // bool isCurvilinear = (domain->lonvalue.getValue()->size() == ssize); 87 bool isCurvilinear = true ; //for moment 82 88 83 89 switch (SuperClass::type) … … 85 91 case (MULTI_FILE) : 86 92 { 87 if (domain->isEmpty()) return;93 // if (domain->isEmpty()) return; 88 94 89 if ( comm::CMPIManager::GetCommSize(CXIOSManager::Comm_Server)> 1)95 if (server->intraCommSize > 1) 90 96 { 91 97 SuperClassWriter::addDimension(lonid, domain->zoom_ni.getValue()); … … 105 111 } 106 112 107 SuperClassWriter::addDimension(lonid_loc, domain->zoom_ni_ loc.getValue());108 SuperClassWriter::addDimension(latid_loc, domain->zoom_nj_ loc.getValue());109 if ( comm::CMPIManager::GetCommSize(CXIOSManager::Comm_Server)> 1)110 { 111 this->writeLocalAttributes(domain->zoom_ibegin_ loc.getValue(),112 domain->zoom_ni_ loc.getValue(),113 domain->zoom_jbegin_ loc.getValue(),114 domain->zoom_nj_ loc.getValue(),113 SuperClassWriter::addDimension(lonid_loc, domain->zoom_ni_srv); 114 SuperClassWriter::addDimension(latid_loc, domain->zoom_nj_srv); 115 if (server->intraCommSize > 1) 116 { 117 this->writeLocalAttributes(domain->zoom_ibegin_srv, 118 domain->zoom_ni_srv, 119 domain->zoom_jbegin_srv, 120 domain->zoom_nj_srv, 115 121 domid); 116 122 } … … 135 141 dim0.push_back(lonid_loc); 136 142 137 if (comm::CMPIManager::GetCommSize(CXIOSManager::Comm_Server) > 1) 138 { 139 SuperClassWriter::addVariable(maskid, NC_INT, dim0); 140 141 this->writeMaskAttributes(maskid, 142 domain->data_dim.getValue()/*, 143 domain->data_ni.getValue(), 144 domain->data_nj.getValue(), 145 domain->data_ibegin.getValue(), 146 domain->data_jbegin.getValue()*/); 147 } 143 144 // supress mask if (server->intraCommSize > 1) 145 // supress mask { 146 // supress mask SuperClassWriter::addVariable(maskid, NC_INT, dim0); 147 // supress mask 148 // supress mask this->writeMaskAttributes(maskid, 149 // supress mask domain->data_dim.getValue()/*, 150 // supress mask domain->data_ni.getValue(), 151 // supress mask domain->data_nj.getValue(), 152 // supress mask domain->data_ibegin.getValue(), 153 // supress mask domain->data_jbegin.getValue()*/); 154 // supress mask } 148 155 149 156 //SuperClassWriter::setDefaultValue(maskid, &dvm); 150 157 151 158 SuperClassWriter::definition_end(); 152 SuperClassWriter::writeData(domain->latvalue.getValue(), latid, true, 0); 153 SuperClassWriter::writeData(domain->lonvalue.getValue(), lonid, true, 0); 154 if (comm::CMPIManager::GetCommSize(CXIOSManager::Comm_Server) > 1) 155 SuperClassWriter::writeData(mask, maskid); 159 SuperClassWriter::writeData(domain->latvalue_srv, latid, true, 0); 160 SuperClassWriter::writeData(domain->lonvalue_srv, lonid, true, 0); 161 // supress mask if (server->intraCommSize > 1) SuperClassWriter::writeData(mask, maskid); 156 162 SuperClassWriter::definition_start(); 157 163 … … 195 201 else 196 202 { 197 start[1]=domain->zoom_ibegin_ loc.getValue()+domain->ibegin.getValue()-1-domain->zoom_ibegin.getValue() ; start [0]=domain->zoom_jbegin_loc.getValue()+domain->jbegin.getValue()-1-domain->zoom_jbegin.getValue() ;198 count[1]=domain->zoom_ni_ loc.getValue() ; count[0]=domain->zoom_nj_loc.getValue();203 start[1]=domain->zoom_ibegin_srv-domain->zoom_ibegin.getValue() ; start [0]=domain->zoom_jbegin_srv-domain->zoom_jbegin.getValue() ; 204 count[1]=domain->zoom_ni_srv ; count[0]=domain->zoom_nj_srv ; 199 205 } 200 206 201 SuperClassWriter::writeData(domain->latvalue .getValue(), latid, true, 0,&start,&count);202 SuperClassWriter::writeData(domain->lonvalue .getValue(), lonid, true, 0,&start,&count);207 SuperClassWriter::writeData(domain->latvalue_srv, latid, true, 0,&start,&count); 208 SuperClassWriter::writeData(domain->lonvalue_srv, lonid, true, 0,&start,&count); 203 209 SuperClassWriter::definition_start(); 204 210 … … 265 271 void CNc4DataOutput::writeField_(const boost::shared_ptr<tree::CField> field) 266 272 { 273 shared_ptr<CContext> context=CObjectFactory::GetObject<CContext>(CObjectFactory::GetCurrentContextId()) ; 274 CContextServer* server=context->server ; 275 267 276 std::vector<StdString> dims, coodinates; 268 boost::shared_ptr<CGrid> grid = 269 CObjectFactory::GetObject<CGrid>(field->grid_ref.getValue()); 270 boost::shared_ptr<CDomain> domain = 271 CObjectFactory::GetObject<CDomain>(grid->domain_ref.getValue()); 277 boost::shared_ptr<CGrid> grid = field->grid; 278 boost::shared_ptr<CDomain> domain = grid->domain; 272 279 273 280 if (domain->isEmpty()) … … 279 286 StdString lonid = StdString("lon_").append(domid); 280 287 StdString latid = StdString("lat_").append(domid); 281 StdString lonid_loc = ( comm::CMPIManager::GetCommSize(CXIOSManager::Comm_Server)> 1)288 StdString lonid_loc = (server->intraCommSize > 1) 282 289 ? StdString("lon_").append(domid).append("_local") 283 290 : lonid; 284 StdString latid_loc = ( comm::CMPIManager::GetCommSize(CXIOSManager::Comm_Server)> 1)291 StdString latid_loc = (server->intraCommSize > 1) 285 292 ? StdString("lat_").append(domid).append("_local") 286 293 : latid; … … 288 295 ? field->name.getValue() : field->getBaseFieldReference()->getId(); 289 296 290 unsigned int ssize = domain->zoom_ni_loc.getValue() * domain->zoom_nj_loc.getValue(); 291 bool isCurvilinear = (domain->lonvalue.getValue()->size() == ssize); 292 297 // unsigned int ssize = domain->zoom_ni_loc.getValue() * domain->zoom_nj_loc.getValue(); 298 // bool isCurvilinear = (domain->lonvalue.getValue()->size() == ssize); 299 bool isCurvilinear = true ; // for moment 300 293 301 nc_type type = (!field->prec.isEmpty() && 294 302 ( field->prec.getValue() == 4)) … … 309 317 if (!grid->axis_ref.isEmpty()) 310 318 { 311 boost::shared_ptr<CAxis> axis = 312 CObjectFactory::GetObject<CAxis>(grid->axis_ref.getValue()); 313 StdString axisid = (!axis->name.isEmpty()) 314 ? axis->name.getValue() : axis->getId(); 319 boost::shared_ptr<CAxis> axis = grid->axis ; 320 StdString axisid = (!axis->name.isEmpty()) ? axis->name.getValue() : axis->getId(); 315 321 dims.push_back(axisid); 316 322 coodinates.push_back(axisid); … … 425 431 void CNc4DataOutput::closeFile_ (void) 426 432 { 427 std::cout<<"--> Close file "<<filename<<std::endl ;428 433 SuperClassWriter::close() ; 429 434 } … … 449 454 void CNc4DataOutput::writeFieldData_ (const boost::shared_ptr<tree::CField> field) 450 455 { 451 boost::shared_ptr<CGrid> grid =452 CObjectFactory::GetObject<CGrid>(field->grid_ref.getValue()); 453 boost::shared_ptr<C Domain> domain =454 CObjectFactory::GetObject<CDomain>(grid->domain_ref.getValue());456 shared_ptr<CContext> context=CObjectFactory::GetObject<CContext>(CObjectFactory::GetCurrentContextId()) ; 457 458 boost::shared_ptr<CGrid> grid = field->grid ; 459 boost::shared_ptr<CDomain> domain = grid->domain ; 455 460 456 461 if(SuperClass::type==MULTI_FILE) if (domain->isEmpty()) return; 457 462 458 463 459 StdString fieldid = (!field->name.isEmpty()) 464 StdString fieldid = (!field->name.isEmpty()) 460 465 ? field->name.getValue() 461 466 : field->getBaseFieldReference()->getId(); 462 boost::shared_ptr<xmlioserver::tree::CContext> context =463 CObjectFactory::GetObject<xmlioserver::tree::CContext>464 (CObjectFactory::GetCurrentContextId());465 467 466 468 StdOStringStream oss; … … 468 470 << "_" << field->getRelFile()->output_freq.getValue(); 469 471 470 ARRAY(double, 1) field_data = field->getData();472 // ARRAY(double, 1) field_data = field->data_srv; 471 473 ARRAY_CREATE(time_data, double, 1, [1]); 472 (*time_data)[0] = date::Time(*field-> getLastWriteDate());474 (*time_data)[0] = date::Time(*field->last_Write_srv); 473 475 474 476 if (grid->hasAxis()) // 3D 475 477 { 476 boost::shared_ptr<CAxis> axis = CObjectFactory::GetObject<CAxis>(grid->axis_ref.getValue());477 ARRAY (double, 3) field_data3D (new CArray<double,3>(grid->getLocalShape()/*, boost::c_storage_order()*/));478 grid->outputField(field_data,field_data3D);478 boost::shared_ptr<CAxis> axis = grid->axis ; 479 ARRAY_CREATE(field_data3D,double,3,[domain->zoom_ni_srv][domain->zoom_nj_srv][axis->size.getValue()]) ; 480 field->outputField(field_data3D); 479 481 switch (SuperClass::type) 480 482 { … … 497 499 { 498 500 // start[2]=domain->zoom_ibegin_loc.getValue()-domain->zoom_ibegin.getValue() ; start [1]=domain->zoom_jbegin_loc.getValue()-domain->zoom_jbegin.getValue() ; start[0]=0 ; 499 start[2]=domain->zoom_ibegin_ loc.getValue()+domain->ibegin.getValue()-1-domain->zoom_ibegin.getValue() ; start [1]=domain->zoom_jbegin_loc.getValue()+domain->jbegin.getValue()-1-domain->zoom_jbegin.getValue() ; start[0]=0 ;500 count[2]=domain->zoom_ni_ loc.getValue() ; count[1]=domain->zoom_nj_loc.getValue(); count[0] = axis->size.getValue();501 start[2]=domain->zoom_ibegin_srv-domain->zoom_ibegin.getValue() ; start [1]=domain->zoom_jbegin_srv-domain->zoom_jbegin.getValue() ; start[0]=0 ; 502 count[2]=domain->zoom_ni_srv ; count[1]=domain->zoom_nj_srv ; count[0] = axis->size.getValue(); 501 503 } 502 504 SuperClassWriter::writeData(field_data3D, fieldid, true, field->getNStep()-1,&start,&count ); … … 509 511 else // 2D 510 512 { 511 ARRAY (double, 2) field_data2D (new CArray<double, 2>(grid->getLocalShape()/*, boost::c_storage_order()*/));512 grid->outputField(field_data,field_data2D);513 ARRAY_CREATE(field_data2D,double,2,[domain->zoom_ni_srv][domain->zoom_nj_srv]) ; 514 field->outputField(field_data2D); 513 515 switch (SuperClass::type) 514 516 { … … 530 532 else 531 533 { 532 start[1]=domain->zoom_ibegin_ loc.getValue()+domain->ibegin.getValue()-1-domain->zoom_ibegin.getValue() ; start [0]=domain->zoom_jbegin_loc.getValue()+domain->jbegin.getValue()-1-domain->zoom_jbegin.getValue() ;533 count[1]=domain->zoom_ni_ loc.getValue() ; count[0]=domain->zoom_nj_loc.getValue() ;534 start[1]=domain->zoom_ibegin_srv-domain->zoom_ibegin.getValue() ; start[0]=domain->zoom_jbegin_srv-domain->zoom_jbegin.getValue() ; 535 count[1]=domain->zoom_ni_srv ; count[0]=domain->zoom_nj_srv ; 534 536 } 537 535 538 SuperClassWriter::writeData(field_data2D, fieldid, true, field->getNStep()-1,&start,&count); 536 539 SuperClassWriter::writeData(time_data, oss.str(), true, field->getNStep()-1);
Note: See TracChangeset
for help on using the changeset viewer.