Changeset 123


Ignore:
Timestamp:
09/27/10 14:01:47 (14 years ago)
Author:
hozdoba
Message:

Début de gestion des opérations sur les champs + quelques modifications

Location:
XMLIO_V2/dev/dev_rv/src/XMLIO
Files:
1 added
12 edited

Legend:

Unmodified
Added
Removed
  • XMLIO_V2/dev/dev_rv/src/XMLIO/NetCDF4_data_output.hpp

    r122 r123  
    5151              timeinfo = localtime ( &rawtime ); 
    5252 
    53               strftime (buffer, 100,"%Y-%b-%d %H:%M:%S %Z",timeinfo); 
     53              strftime (buffer, 100, "%Y-%b-%d %H:%M:%S %Z", timeinfo); 
    5454 
    5555              return (string(buffer)); 
     
    141141         virtual void setVars(void) 
    142142         { 
     143            NcType tvar; 
    143144            NcVar *var  = NULL; 
    144145            Poco::HashMap<string, string> hm; 
     
    156157                  if (string(field->operation).compare("once") == 0) wtime = false; 
    157158 
     159               tvar = ncFloat; 
     160               if (field->prec.hasValue()) 
     161                  if (field->prec == 8) tvar = ncDouble; 
     162 
    158163               if (wtime) 
    159164               { 
    160165                  if (lonlat) // 2D spatio + temps 
    161166                  { 
    162                      if (!(var = dataFile->add_var(bfield->getId().c_str(), ncFloat, 
     167                     if (!(var = dataFile->add_var(bfield->getId().c_str(), tvar, 
    163168                        dataFile->get_dim("time"), dataFile->get_dim("lon"), dataFile->get_dim("lat")))) 
    164169                        throw XMLIOUndefinedValueException("Impossible d'ajouter le champ "+ field->getId() +" !"); 
     
    166171                  else // 3D spatio + temps 
    167172                  { 
    168                      if (!(var = dataFile->add_var(bfield->getId().c_str(), ncFloat, 
     173                     if (!(var = dataFile->add_var(bfield->getId().c_str(), tvar, 
    169174                        dataFile->get_dim("time"), dataFile->get_dim("lon"), dataFile->get_dim("lat"), 
    170175                        dataFile->get_dim(field->getGrid()->getRelAxis()->getId().c_str())))) 
     
    176181                  if (lonlat) // 2D spatio sans temps 
    177182                  { 
    178                      if (!(var = dataFile->add_var(bfield->getId().c_str(), ncFloat, 
     183                     if (!(var = dataFile->add_var(bfield->getId().c_str(), tvar, 
    179184                        dataFile->get_dim("lon"), dataFile->get_dim("lat")))) 
    180185                        throw XMLIOUndefinedValueException("Impossible d'ajouter le champ "+ field->getId() +" !"); 
     
    182187                  else // 3D spatio sans temps 
    183188                  { 
    184                      if (!(var = dataFile->add_var(bfield->getId().c_str(), ncFloat, 
     189                     if (!(var = dataFile->add_var(bfield->getId().c_str(), tvar, 
    185190                        dataFile->get_dim("lon"), dataFile->get_dim("lat"), 
    186191                        dataFile->get_dim(field->getGrid()->getRelAxis()->getId().c_str())))) 
  • XMLIO_V2/dev/dev_rv/src/XMLIO/abstract_calendar.hpp

    r120 r123  
    1717            return (NoLeapMonthLength[d.getMonth()-1]); 
    1818         } 
     19 
     20         friend std::ostream& operator<<(std::ostream& out, AbstractCalendar& c) 
     21         { out << "[type: " << c.getId() << ", start: " << c.getInitDate() << ", current: " << c.getCurrentDate() << "]"; return (out); } 
    1922 
    2023         virtual int getYearTotalLength(const Date& d) const { return (365 * 86400); } // Retourne la durée d'une année en seconde. 
  • XMLIO_V2/dev/dev_rv/src/XMLIO/abstract_data_treatment.hpp

    r122 r123  
    3636         AbstractDataTreatment(Context* const _ctxt) : currentContext(_ctxt), enabledFiles() 
    3737         { 
    38             std::cout << "(Message temporaire) Résolution des héritages ..." << std::endl; 
     38            //std::cout << "(Message temporaire) Résolution des héritages ..." << std::endl; 
    3939            // Résolution des héritages pour le context actuel (Context::ResolveInheritance() résoud les héritages pour tous les contextes). 
    4040            solveAllInheritance(); 
    4141 
    4242            // Initialisation du vecteur 'enabledFiles' contenant la liste des fichiers à sortir. 
    43             std::cout << "(Message temporaire) Initialisation du vecteur enabledFiles ..." << std::endl; 
     43            //std::cout << "(Message temporaire) Initialisation du vecteur enabledFiles ..." << std::endl; 
    4444            findEnabledFiles(); 
    4545 
    4646            // Recherche des champs à sortir (enable à true + niveau de sortie correct) pour chaque fichier précédemment listé. 
    47             std::cout << "(Message temporaire) Recherche des champs à sortir ..." << std::endl; 
     47            //std::cout << "(Message temporaire) Recherche des champs à sortir ..." << std::endl; 
    4848            findAllEnabledFields(); 
    4949 
    5050            // Résolution des références de grilles pour chacun des champs. 
    51             std::cout << "(Message temporaire) Résolution des références de grilles ..." << std::endl; 
     51            //std::cout << "(Message temporaire) Résolution des références de grilles ..." << std::endl; 
    5252            solveAllGridRef(); 
    5353 
    54             std::cout << "(Message temporaire) fin traitement sorties ..." << std::endl; 
     54            //std::cout << "(Message temporaire) fin traitement sorties ..." << std::endl; 
    5555         } 
    5656 
  • XMLIO_V2/dev/dev_rv/src/XMLIO/c_interface.cpp

    r122 r123  
    88extern "C" void main_c_(void) ; 
    99 
     10// Cette fonction remplit un tableau à N dimensions de valeurs de type T (T = double ou float) de la maniÚre suivante : 
     11// 0.0 1.0 2.0 3.0, puis 0.1 1.1 2.1 3.1 ... au second appel de la fonction, etc. 
     12template <class T> 
     13   static void updateDataTest(T begin, T end) 
     14{ 
     15   static int called = 0; int i = 0; 
     16   for (T it = begin; it != end; it++, i++) 
     17      (*it) = i + called * 0.1; 
     18   called++; 
     19} 
     20 
    1021void main_c_ (void) 
    1122{ 
    1223   try 
    1324   { 
    14       //string file("/local/XMLIOSERVER_DEV/dev_rv/test/iodef_test.xml"); 
    15       //string file("/local/XMLIOSERVER_DEV/dev_rv/iodef_test.xml"); 
    16       string file("/local/XMLIOSERVER_DEV/dev_rv/test/iodef_simple_test.xml"); 
    17  
     25      Array<double, 3> arr(3, 3, 3) ; // Les données. 
     26      string file("/local/XMLIOSERVER_DEV/dev_rv/test/iodef_simple_test.xml"); // Le fichier de définition. 
    1827      ifstream istr( file.c_str() , ifstream::in ); 
    1928 
    2029      // On commence la lecture du flux de donnée xml qui doit posséder pour racine un unique noeud nommé "simulation". 
    2130      XMLNode node = XMLNode::CreateNode(istr, Context::GetRootName()); 
     31 
    2232      // On parse le fichier xml noeud par noeud (ie on construit dynamiquement notre arbre d'objets). 
    2333      XMLParser::Parse(node); 
    24  
    25       // On résoud les héritages descendants ainsi que les héritages par référence. 
    26       //Context::ResolveInheritance(); // Plus nécessaire!! 
    2734 
    2835      // On se place dans le contexte 'context1'. 
    2936      Context::SetCurrentContext("context1") ; 
    3037 
    31       std::cout << " * ----------- <<<TOP>>> Début du traitement ----------- * " << std::endl; 
     38      std::cout << " * ----------- Début du traitement ----------- * " << std::endl; 
     39 
     40      //Affichage de la date initiale (pour vérification). 
     41      std::cout << *Context::GetObject("context1")->getCalendar() << std::endl; 
     42 
    3243      // On crée une instance de traitement de données dans le format NetCDF4. 
    3344      AbstractDataTreatment *dtreat = new NetCDF4DataTreatment(Context::GetObject("context1")); 
    34  
    35       // Affichage de la liste des fichiers à sortir (par id). 
    36       //dtreat->printEnabledFilesId(); 
    3745 
    3846      NetCDF4DataOutput dop(CFile::GetObject("fichier1")); 
    3947      dop.createFileAndHeader(); 
    4048 
    41       // On écrit l'arborescence résultante du traitement sur la sortie. 
     49      for(int tcourant = 0, tfinal = 9; tcourant <= tfinal; tcourant++) 
     50      { 
     51         // Mise à jour de la date. 
     52 
     53 
     54         // Mise à jour des données. 
     55         updateDataTest<Array<double, 3>::iterator>(arr.begin(), arr.end()); 
     56 
     57         // Ecriture des données. 
     58         // dtreat->writeData("Premier_champ", arr); 
     59 
     60      } 
     61 
     62      // On écrit l'arborescence résultante du traitement sur la sortie de log. 
    4263      //Context::ShowTree(std::clog); 
    4364 
     
    5273   } 
    5374 
    54 // return (0); 
     75   // return (0); 
    5576} 
    5677 
    5778 
    58       /* CODE TEST POUR CALENDRIER 
    59       AbstractCalendar* calendar = new GregorianCalendar(); 
    60  
    61       Date dd (*calendar, 2000, 05, 03, 00, 00, 00) ; 
    62       Date ddd(*calendar, 2030, 11, 02, 10, 33, 40) ; 
    63  
    64       Date d1 (*calendar, 2007, 11, 12, 00, 00, 00) ; 
    65       Date d2 (*calendar, 2008, 11, 12, 00, 00, 00) ; 
    66  
    67       string sttr("12/07/2005 - 10:11:30"); 
    68       string stttr("111s 14.36 mi 7y 3.9y 3.4 mg"); 
    69       Date d3 = Date::FromString(sttr, *calendar); 
    70  
    71       // Les mois sont considérés comme des entiers mais stockés comme des flottants. 
    72       Duration sc0 = Second * -65.3 + Minute * 117.5   + Hour * 65.9  + Day * 417.8 + Month * 16.0  - Year * 17.5; 
    73       Duration sc1 = Second * 175.3 - Minute * 13109.6 + Hour * 135.1 - Day * 616.4 + Month * 236.0 + Year * 33.9; 
    74       Duration sc2 = 60 * Day; 
    75  
    76       Duration sc3 = Duration::FromString(stttr); 
    77  
    78       std::cout << calendar->getInitDate()    << std::endl; 
    79       std::cout << calendar->getCurrentDate() << std::endl; 
    80  
    81       std::cout << boolalpha << (calendar->getInitDate() != calendar->getCurrentDate()) << std::endl; 
    82  
    83       std::cout << (Time)d2 - (Time)(d1 + 365 * Day) << std::endl; 
    84       std::cout << sc0 << std::endl << sc1 << std::endl << sc1 - sc0 << std::endl; 
    85       std::cout << ddd - dd << std::endl; 
    86       std::cout << dd << std::endl; 
    87       std::cout << (Time)dd << std::endl; 
    88       std::cout << calendar->getNbSecond(dd) << std::endl; 
    89  
    90       std::cout << (dd+sc2) << std::endl; 
    91       std::cout << (d3)  << std::endl; 
    92  
    93       std::cout << (sc3) << std::endl; 
    94  
    95       delete calendar; 
    96       */ 
    97  
  • XMLIO_V2/dev/dev_rv/src/XMLIO/context.hpp

    r122 r123  
    9494                  if (attributes.end() != attributes.find("id")) 
    9595                  { WARNING("Le noeud de définition possÚde un identifiant, ce dernier ne sera pas pris en compte lors du traitement !"); } 
    96  
    97                   if (attributes.end() != attributes.find("calendar_type") && attributes.end() != attributes.find("start_date")) 
    98                      setCalendar(attributes["calendar_type"], attributes["start_date"]); 
    99  
    10096 
    10197                  if (name.compare(FieldDefinition::GetDefName())  == 0) // Parsing pour la définition des champs. 
     
    153149         GridDefinition   * getGridDefinition(void)   const { return (this->gridDef  ); } 
    154150         DomainDefinition * getDomainDefinition(void) const { return (this->domainDef); } 
     151 
     152         void updateCurrentDate(const Duration* const dr = NULL) 
     153         { 
     154            static Duration dur = Hour; 
     155            if (dr != NULL) dur = *dr; 
     156            Date newCurrentDate = ccalendar->getCurrentDate() + dur; 
     157            ccalendar->getCurrentDate() = newCurrentDate; 
     158         } 
    155159 
    156160         AbstractCalendar * getCalendar(void) const { return (this->ccalendar ); } 
  • XMLIO_V2/dev/dev_rv/src/XMLIO/date.hpp

    r120 r123  
    1515         } 
    1616 
    17          Date(const Date& d) : relCalendar(d.relCalendar) 
     17         Date(const Date& d) : relCalendar(d.getRelCalendar()) 
    1818            , year(d.year), month(d.month), day(d.day), hour(d.hour), minute(d.minute), second(d.second) 
    1919         { 
    2020            if(!checkDate()) 
    2121               WARNING("La date initialisée a été modifiée car elle était incorrecte par rapport au calendrier souhaité."); 
     22         } 
     23 
     24         Date& operator=(const Date& d) 
     25         { 
     26            // relCalendar = d.getRelCalendar(); << inutile si fonction bien utilisée 
     27            year = d.year; month = d.month; day = d.day; 
     28            hour = d.hour; minute = d.minute; second = d.second; 
     29            return (*this); 
    2230         } 
    2331 
  • XMLIO_V2/dev/dev_rv/src/XMLIO/duration.hpp

    r119 r123  
    2626         friend std::istream& operator>>(std::istream& in, struct _duration& d) 
    2727         { 
     28            d.year = d.month = d.day = d.hour = d.minute = d.second = 0.0; 
    2829            double v = 1.0; 
    2930            char   c = '/'; 
     
    7778                         Hour   = {0.0, 0.0, 0.0, 1.0, 0.0, 0.0}, 
    7879                         Minute = {0.0, 0.0, 0.0, 0.0, 1.0, 0.0}, 
    79                          Second = {0.0, 0.0, 0.0, 0.0, 0.0, 1.0}; 
     80                         Second = {0.0, 0.0, 0.0, 0.0, 0.0, 1.0}, 
     81                         NoneDu = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; 
    8082 
    8183} // namespace XMLIOSERVER 
  • XMLIO_V2/dev/dev_rv/src/XMLIO/field.hpp

    r122 r123  
    1515         CField(void) : ObjectTemplate<CField>(), FieldAttribut(), grid(NULL) 
    1616         {/* Ne rien faire de plus */} 
    17          CField(const string& _id) : ObjectTemplate<CField>(_id), FieldAttribut(), grid(NULL) 
     17         CField(const string& _id) : ObjectTemplate<CField>(_id), FieldAttribut(), grid(NULL), foper(NULL) 
    1818         {/* Ne rien faire de plus */} 
    1919 
     
    2323 
    2424         const CGrid* getGrid(void) const { return (grid); } 
     25         const Array<double, 1>& getData(void) const { return (data); } 
     26         const FieldOperation* getFieldOperation(void) const { return (foper); } 
    2527 
    2628         virtual CField* getReference(void) const 
     
    2830            if(!field_ref.hasValue()) return (NULL); 
    2931            if (!CField::HasObject(field_ref)) 
    30             { WARNING("Référence invalide sur l'objet "+GetName()+" nommé \""+((string)field_ref)+"\""); return (NULL);} 
     32            { WARNING("Référence invalide sur l'objet "+GetName()+" nommé \""+((string)field_ref)+"\""); return (NULL); } 
    3133 
    3234            return (CField::GetObject(field_ref)); 
     
    3941 
    4042         CGrid* grid ; 
     43         FieldOperation* foper; 
     44         Array<double, 1> data; 
    4145 
    4246   }; // class CField 
  • XMLIO_V2/dev/dev_rv/src/XMLIO/file_attribut.hpp

    r107 r123  
    1010         DECLARE_ATTR(name, string) ; 
    1111         DECLARE_ATTR(description, string) ; 
    12          DECLARE_ATTR(output_freq, int) ; 
     12         DECLARE_ATTR(output_freq, Duration) ; 
    1313         DECLARE_ATTR(output_level, int) ; 
    1414         DECLARE_ATTR(enabled, bool); 
  • XMLIO_V2/dev/dev_rv/src/XMLIO/grid.hpp

    r122 r123  
    4444         { /* Ne rien faire de plus */ } 
    4545 
    46  
    4746      private: 
    4847 
     
    5251         CDomain* domain ; 
    5352 
    54          Array<int,1> storeIndex ; 
    55          Array<int,1> out_i_index ; 
    56          Array<int,1> out_j_index ; 
    57          Array<int,1> out_l_index ; 
     53         Array<int, 1> storeIndex ; 
     54         Array<int, 1> out_i_index ; 
     55         Array<int, 1> out_j_index ; 
     56         Array<int, 1> out_l_index ; 
    5857 
    5958   }; // class CGrid 
    60  
    6159 
    6260   CGrid* CGrid::CreateObject(const CDomain* const a_domain, const CAxis* const a_axis) 
     
    6664 
    6765      grid->domain_ref = a_domain->getId() ; 
    68       grid->axis_ref = a_axis->getId() ; 
     66      grid->axis_ref   = a_axis  ->getId() ; 
    6967 
    7068      return (grid); 
  • XMLIO_V2/dev/dev_rv/src/XMLIO/xml_parser.hpp

    r120 r123  
    3737                  Context& context = *Context::CreateObject(attributes["id"]); 
    3838 
     39                  if (attributes.end() != attributes.find("calendar_type") && attributes.end() != attributes.find("start_date")) 
     40                     context.setCalendar(attributes["calendar_type"], attributes["start_date"]); 
     41 
    3942                  context.parse(_node); 
    4043                  attributes.clear(); 
  • XMLIO_V2/dev/dev_rv/src/XMLIO/xmlio.hpp

    r122 r123  
    4040#include "abstract_object.hpp" 
    4141 
    42 // Gestion du calendrier 
     42// Gestion du calendrier. 
    4343#include "duration.hpp" 
    4444#include "date.hpp" 
     
    4747#include "calendar_utils.hpp" 
    4848 
    49 // Gestion de l'écriture des données 
     49// Gestion de l'écriture des données. 
    5050#include "abstract_data_output.hpp" 
    5151 
     52//.... 
    5253#include "xml_node.hpp" 
    5354#include "object_template.hpp" 
     
    5960#include "field_attribut.hpp" 
    6061#include "file_attribut.hpp" 
     62 
     63// Traitement des opérations sur les champs 
     64#include "field_operation.hpp" 
    6165 
    6266#include "group_template.hpp" 
     
    7074#include "file.hpp" 
    7175 
     76// Résolution des références aux grilles pour les champs. 
    7277#include "field_gridrefsolver.hpp" 
    7378 
     79//.... 
    7480#include "context.hpp" 
    7581#include "xml_parser.hpp" 
     
    7985#include "NetCDF4_data_output.hpp" 
    8086 
    81 // Traitement des données 
     87// Traitement des données (abstract puis selon types de sortie) 
    8288#include "abstract_data_treatment.hpp" 
    8389#include "NetCDF4_data_treatment.hpp" 
Note: See TracChangeset for help on using the changeset viewer.