Changeset 138 for XMLIO_V2/dev/dev_rv/src/XMLIO/c_interface.cpp
- Timestamp:
- 12/10/10 16:04:54 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XMLIO_V2/dev/dev_rv/src/XMLIO/c_interface.cpp
r137 r138 44 44 void xios_xml_parse_file(const XString _filename, XSize _filename_len) 45 45 { 46 MAKE_STRING(__filename, _filename, _filename_len); 47 std::ifstream __istr( __filename.c_str() , std::ifstream::in);48 49 // On commence la lecture du flux de donnée xml. 50 XMLNode node = XMLNode::CreateNode(__istr, Context::GetRootName());51 // On parse le fichier xml noeud par noeud52 // (ie on construit dynamiquement notre arbre d'objets).53 XMLParser::Parse(node);54 46 47 MAKE_STRING(__filename, _filename, _filename_len); 48 std::ifstream __istr( __filename.c_str() , std::ifstream::in ); 49 50 // On commence la lecture du flux de donnée xml. 51 XMLNode node = XMLNode::CreateNode(__istr, Context::GetRootName()); 52 // On parse le fichier xml noeud par noeud 53 // (ie on construit dynamiquement notre arbre d'objets). 54 XMLParser::Parse(node); 55 55 } 56 56 … … 76 76 77 77 void xios_context_create (XPtr * _ctx, const XString _ctx_id, 78 XSize _ctx_id_len, XCalendarType _calType) 78 XSize _ctx_id_len, XCalendarType _calType, 79 XInt yr, XInt mth, XInt dd, 80 XInt hr, XInt min, XInt sec) 79 81 { 80 82 MAKE_STRING(__ctx_id, _ctx_id, _ctx_id_len); … … 92 94 { 93 95 case (D360) : 94 context->setCalendar(new D360Calendar()); return; 96 context->setCalendar(new D360Calendar(yr, mth, dd, hr, min, sec)); 97 return; 95 98 case (ALLLEAP) : 96 context->setCalendar(new AllLeapCalendar()); return; 99 context->setCalendar(new AllLeapCalendar(yr, mth, dd, hr, min, sec)); 100 return; 97 101 case (NOLEAP) : 98 context->setCalendar(new NoLeapCalendar()); return; 102 context->setCalendar(new NoLeapCalendar(yr, mth, dd, hr, min, sec)); 103 return; 99 104 case (JULIAN) : 100 context->setCalendar(new JulianCalendar()); return; 105 context->setCalendar(new JulianCalendar(yr, mth, dd, hr, min, sec)); 106 return; 101 107 case (GREGORIAN) : 102 context->setCalendar(new GregorianCalendar()); return; 108 context->setCalendar(new GregorianCalendar(yr, mth, dd, hr, min, sec)); 109 return; 103 110 default: 104 111 std::cerr << "[context_create] Type de calendrier invalide [0-5]" << std::endl; … … 149 156 CFile * _file = (CFile *) _parent; 150 157 FieldGroup * _field_group = _file->createVirtualFieldGroup(_file->getId()); 151 xios_xml_tree_add (_field_group, GFIELD, _child, _child_type, _child_id, _child_id_len); 158 xios_xml_tree_add (_field_group, GFIELD, 159 _child, _child_type, _child_id, _child_id_len); 152 160 return; 153 161 } … … 279 287 XML_SET_STRING(Axis, axis, unit, unit) 280 288 281 void xios_xml_set_axis_value(XPtr const _axis, XDType _dtype, double value[], XSize value_size) 289 void xios_xml_set_axis_value(XPtr const _axis, XDType _dtype, 290 double value[], XSize value_size) 282 291 { 283 292 Array<double, 1> __arr(value, shape(value_size), neverDeleteData, FortranArray<1>()); … … 312 321 XML_SET(Domain, domain, int, nj, nj) 313 322 314 void xios_xml_set_domain_mask(XPtr const _domain, XDType _dtype, bool * _mask , XSize _maskXsize, XSize _maskYsize) 323 void xios_xml_set_domain_mask(XPtr const _domain, XDType _dtype, bool * _mask , 324 XSize _maskXsize, XSize _maskYsize) 315 325 { 316 326 Array<bool, 2> __arr(_mask, shape(_maskXsize, _maskYsize), neverDeleteData, FortranArray<2>()); … … 336 346 XML_SET(Domain, domain, int, dnindex, data_n_index) 337 347 338 void xios_xml_set_domain_diindex(XPtr const _domain, XDType _dtype, int _diindex[], XSize _diindex_size) 348 void xios_xml_set_domain_diindex(XPtr const _domain, XDType _dtype, 349 int _diindex[], XSize _diindex_size) 339 350 { 340 351 Array<int, 1> __arr(_diindex, shape(_diindex_size), neverDeleteData, FortranArray<1>()); … … 351 362 } 352 363 353 void xios_xml_set_domain_djindex(XPtr const _domain, XDType _dtype, int _djindex[], XSize _djindex_size) 364 void xios_xml_set_domain_djindex(XPtr const _domain, XDType _dtype, 365 int _djindex[], XSize _djindex_size) 354 366 { 355 367 Array<int, 1> __arr(_djindex, shape(_djindex_size), neverDeleteData, FortranArray<1>()); … … 366 378 } 367 379 368 void xios_xml_set_domain_lonvalue(XPtr const _domain, XDType _dtype, double _lonvalue[], XSize _lonvalue_Xsize, XSize _lonvalue_Ysize) 380 void xios_xml_set_domain_lonvalue(XPtr const _domain, XDType _dtype, double _lonvalue[], 381 XSize _lonvalue_Xsize, XSize _lonvalue_Ysize) 369 382 { 370 383 XSize __size = (_lonvalue_Ysize == -1) … … 383 396 } 384 397 385 void xios_xml_set_domain_latvalue(XPtr const _domain, XDType _dtype, double _latvalue[], XSize _latvalue_Xsize, XSize _latvalue_Ysize) 398 void xios_xml_set_domain_latvalue(XPtr const _domain, XDType _dtype, double _latvalue[], 399 XSize _latvalue_Xsize, XSize _latvalue_Ysize) 386 400 { 387 401 XSize __size = (_latvalue_Ysize == -1) … … 428 442 called = true; 429 443 } 430 } 444 switch(filetype) 445 { 446 case (NETCDF4): 447 __dtrt->createDataOutput<NetCDF4DataOutput>(); 448 return; 449 // Autres formats de fichiers si disponibles... 450 default: 451 return; 452 } 453 } 454 } 455 456 void xios_dtreatment_end(void) 457 { 458 459 460 } 461 462 void xios_write_data(const XString _field_id, XSize _field_id_len, double * data_k8, 463 XSize data_Xsize, XSize data_Ysize, XSize data_Zsize) 464 { 465 MAKE_STRING(__field_id, _field_id, _field_id_len); 466 467 Context * const __ctxt = Context::GetCurrentContext(); 468 DataTreatment * __dtrt = __ctxt->getDataTreatment(); 469 AbstractCalendar * __cald = __ctxt->getCalendar(); 470 if (__dtrt != NULL) 471 { 472 std::cout << "> Itération de calcul effectuée à la date t = " << __cald->getCurrentDate() 473 << " (soit aprÚs " << (Time)__cald->getCurrentDate() << " sec.)." << std::endl; 474 std::cout << __field_id << " : " 475 << data_Xsize << " : " 476 << data_Ysize << " : " 477 << data_Zsize << std::endl; 478 if ((data_Zsize == -1) && (data_Ysize == -1)) 479 { // cas 1D 480 Array<double, 1> __arr(data_k8, shape(data_Xsize), 481 neverDeleteData, FortranArray<1>()); 482 __dtrt->writeData<Array<double, 1> >(__field_id, __arr); 483 } 484 else if (data_Zsize == -1) 485 { // cas 2D 486 Array<double, 2> __arr(data_k8, shape(data_Xsize, data_Ysize), 487 neverDeleteData, FortranArray<2>()); 488 __dtrt->writeData<Array<double, 2> >(__field_id, __arr); 489 } 490 else 491 { // cas 3D 492 Array<double, 3> __arr(data_k8, shape(data_Xsize, data_Ysize, data_Zsize), 493 neverDeleteData, FortranArray<3>()); 494 __dtrt->writeData<Array<double, 3> >(__field_id, __arr); 495 } 496 } 497 } 498 499 /* ********************************************************** */ 500 /* CALENDAR INTERFACE */ 501 /* ********************************************************** */ 502 503 void xios_update_calendar(int step) 504 { 505 Context * current = Context::GetCurrentContext(); 506 AbstractCalendar * calendar = current->getCalendar(); 507 if (current->getDataTreatment() == NULL) 508 { 509 std::cerr << "Error : Le traitement n'a pas été effectué" << std::endl; 510 return; 511 } 512 calendar->update(); 513 } 514 515 void xios_set_timestep(double ts_year, double ts_month, double ts_day, 516 double ts_hour, double ts_minute, double ts_second) 517 { 518 Context * current = Context::GetCurrentContext(); 519 AbstractCalendar * calendar = current->getCalendar(); 520 struct _duration dr = { ts_year, ts_month , ts_day, 521 ts_hour, ts_minute, ts_second }; 522 if (current->getDataTreatment() == NULL) 523 { 524 std::cerr << "Error : Le traitement n'a pas été effectué" << std::endl; 525 return; 526 } 527 calendar->setTimeStep(dr); 431 528 } 432 529
Note: See TracChangeset
for help on using the changeset viewer.