Ignore:
Timestamp:
12/10/10 16:04:54 (14 years ago)
Author:
hozdoba
Message:

Mise à jour

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XMLIO_V2/dev/dev_rv/src/XMLIO/c_interface.cpp

    r137 r138  
    4444void xios_xml_parse_file(const XString _filename, XSize _filename_len) 
    4545{ 
    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 noeud 
    52    // (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); 
    5555} 
    5656 
     
    7676 
    7777void 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) 
    7981{ 
    8082   MAKE_STRING(__ctx_id, _ctx_id, _ctx_id_len); 
     
    9294   { 
    9395      case (D360) : 
    94          context->setCalendar(new D360Calendar());      return; 
     96         context->setCalendar(new D360Calendar(yr, mth, dd, hr, min, sec)); 
     97         return; 
    9598      case (ALLLEAP) : 
    96          context->setCalendar(new AllLeapCalendar());   return; 
     99         context->setCalendar(new AllLeapCalendar(yr, mth, dd, hr, min, sec)); 
     100         return; 
    97101      case (NOLEAP) : 
    98          context->setCalendar(new NoLeapCalendar());    return; 
     102         context->setCalendar(new NoLeapCalendar(yr, mth, dd, hr, min, sec)); 
     103         return; 
    99104      case (JULIAN) : 
    100          context->setCalendar(new JulianCalendar());    return; 
     105         context->setCalendar(new JulianCalendar(yr, mth, dd, hr, min, sec)); 
     106         return; 
    101107      case (GREGORIAN) : 
    102          context->setCalendar(new GregorianCalendar()); return; 
     108         context->setCalendar(new GregorianCalendar(yr, mth, dd, hr, min, sec)); 
     109         return; 
    103110      default: 
    104111         std::cerr << "[context_create] Type de calendrier invalide [0-5]" << std::endl; 
     
    149156         CFile * _file = (CFile *) _parent; 
    150157         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); 
    152160         return; 
    153161      } 
     
    279287XML_SET_STRING(Axis, axis, unit, unit) 
    280288 
    281 void xios_xml_set_axis_value(XPtr const _axis, XDType _dtype, double value[], XSize value_size) 
     289void xios_xml_set_axis_value(XPtr const _axis, XDType _dtype, 
     290                             double value[], XSize value_size) 
    282291{ 
    283292   Array<double, 1> __arr(value, shape(value_size), neverDeleteData, FortranArray<1>()); 
     
    312321XML_SET(Domain, domain, int, nj, nj) 
    313322 
    314 void xios_xml_set_domain_mask(XPtr const _domain, XDType _dtype, bool * _mask , XSize _maskXsize, XSize _maskYsize) 
     323void xios_xml_set_domain_mask(XPtr const _domain, XDType _dtype, bool * _mask , 
     324                              XSize _maskXsize, XSize _maskYsize) 
    315325{ 
    316326   Array<bool, 2> __arr(_mask, shape(_maskXsize, _maskYsize), neverDeleteData, FortranArray<2>()); 
     
    336346XML_SET(Domain, domain, int, dnindex, data_n_index) 
    337347 
    338 void xios_xml_set_domain_diindex(XPtr const _domain, XDType _dtype, int _diindex[], XSize _diindex_size) 
     348void xios_xml_set_domain_diindex(XPtr const _domain, XDType _dtype, 
     349                                 int _diindex[], XSize _diindex_size) 
    339350{ 
    340351   Array<int, 1> __arr(_diindex, shape(_diindex_size), neverDeleteData, FortranArray<1>()); 
     
    351362} 
    352363 
    353 void xios_xml_set_domain_djindex(XPtr const _domain, XDType _dtype, int _djindex[], XSize _djindex_size) 
     364void xios_xml_set_domain_djindex(XPtr const _domain, XDType _dtype, 
     365                                 int _djindex[], XSize _djindex_size) 
    354366{ 
    355367   Array<int, 1> __arr(_djindex, shape(_djindex_size), neverDeleteData, FortranArray<1>()); 
     
    366378} 
    367379 
    368 void xios_xml_set_domain_lonvalue(XPtr const _domain, XDType _dtype, double _lonvalue[], XSize _lonvalue_Xsize, XSize _lonvalue_Ysize) 
     380void xios_xml_set_domain_lonvalue(XPtr const _domain, XDType _dtype, double _lonvalue[], 
     381                                  XSize _lonvalue_Xsize, XSize _lonvalue_Ysize) 
    369382{ 
    370383   XSize __size = (_lonvalue_Ysize == -1) 
     
    383396} 
    384397 
    385 void xios_xml_set_domain_latvalue(XPtr const _domain, XDType _dtype, double _latvalue[], XSize _latvalue_Xsize, XSize _latvalue_Ysize) 
     398void xios_xml_set_domain_latvalue(XPtr const _domain, XDType _dtype, double _latvalue[], 
     399                                  XSize _latvalue_Xsize, XSize _latvalue_Ysize) 
    386400{ 
    387401   XSize __size = (_latvalue_Ysize == -1) 
     
    428442         called = true; 
    429443      } 
    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 
     456void xios_dtreatment_end(void) 
     457{ 
     458 
     459 
     460} 
     461 
     462void 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 
     503void 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 
     515void 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); 
    431528} 
    432529 
Note: See TracChangeset for help on using the changeset viewer.