Index: XMLIO_V2/dev/dev_rv/src/XMLIO/NetCDF4_data_output.hpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/XMLIO/NetCDF4_data_output.hpp	(revision 122)
+++ XMLIO_V2/dev/dev_rv/src/XMLIO/NetCDF4_data_output.hpp	(revision 123)
@@ -51,5 +51,5 @@
               timeinfo = localtime ( &rawtime );
 
-              strftime (buffer, 100,"%Y-%b-%d %H:%M:%S %Z",timeinfo);
+              strftime (buffer, 100, "%Y-%b-%d %H:%M:%S %Z", timeinfo);
 
               return (string(buffer));
@@ -141,4 +141,5 @@
          virtual void setVars(void)
          {
+            NcType tvar;
             NcVar *var  = NULL;
             Poco::HashMap<string, string> hm;
@@ -156,9 +157,13 @@
                   if (string(field->operation).compare("once") == 0) wtime = false;
 
+               tvar = ncFloat;
+               if (field->prec.hasValue())
+                  if (field->prec == 8) tvar = ncDouble;
+
                if (wtime)
                {
                   if (lonlat) // 2D spatio + temps
                   {
-                     if (!(var = dataFile->add_var(bfield->getId().c_str(), ncFloat,
+                     if (!(var = dataFile->add_var(bfield->getId().c_str(), tvar,
                         dataFile->get_dim("time"), dataFile->get_dim("lon"), dataFile->get_dim("lat"))))
                         throw XMLIOUndefinedValueException("Impossible d'ajouter le champ "+ field->getId() +" !");
@@ -166,5 +171,5 @@
                   else // 3D spatio + temps
                   {
-                     if (!(var = dataFile->add_var(bfield->getId().c_str(), ncFloat,
+                     if (!(var = dataFile->add_var(bfield->getId().c_str(), tvar,
                         dataFile->get_dim("time"), dataFile->get_dim("lon"), dataFile->get_dim("lat"),
                         dataFile->get_dim(field->getGrid()->getRelAxis()->getId().c_str()))))
@@ -176,5 +181,5 @@
                   if (lonlat) // 2D spatio sans temps
                   {
-                     if (!(var = dataFile->add_var(bfield->getId().c_str(), ncFloat,
+                     if (!(var = dataFile->add_var(bfield->getId().c_str(), tvar,
                         dataFile->get_dim("lon"), dataFile->get_dim("lat"))))
                         throw XMLIOUndefinedValueException("Impossible d'ajouter le champ "+ field->getId() +" !");
@@ -182,5 +187,5 @@
                   else // 3D spatio sans temps
                   {
-                     if (!(var = dataFile->add_var(bfield->getId().c_str(), ncFloat,
+                     if (!(var = dataFile->add_var(bfield->getId().c_str(), tvar,
                         dataFile->get_dim("lon"), dataFile->get_dim("lat"),
                         dataFile->get_dim(field->getGrid()->getRelAxis()->getId().c_str()))))
Index: XMLIO_V2/dev/dev_rv/src/XMLIO/abstract_calendar.hpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/XMLIO/abstract_calendar.hpp	(revision 122)
+++ XMLIO_V2/dev/dev_rv/src/XMLIO/abstract_calendar.hpp	(revision 123)
@@ -17,4 +17,7 @@
             return (NoLeapMonthLength[d.getMonth()-1]);
          }
+
+         friend std::ostream& operator<<(std::ostream& out, AbstractCalendar& c)
+         { out << "[type: " << c.getId() << ", start: " << c.getInitDate() << ", current: " << c.getCurrentDate() << "]"; return (out); }
 
          virtual int getYearTotalLength(const Date& d) const { return (365 * 86400); } // Retourne la durÃ©e d'une annÃ©e en seconde.
Index: XMLIO_V2/dev/dev_rv/src/XMLIO/abstract_data_treatment.hpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/XMLIO/abstract_data_treatment.hpp	(revision 122)
+++ XMLIO_V2/dev/dev_rv/src/XMLIO/abstract_data_treatment.hpp	(revision 123)
@@ -36,21 +36,21 @@
          AbstractDataTreatment(Context* const _ctxt) : currentContext(_ctxt), enabledFiles()
          {
-            std::cout << "(Message temporaire) RÃ©solution des hÃ©ritages ..." << std::endl;
+            //std::cout << "(Message temporaire) RÃ©solution des hÃ©ritages ..." << std::endl;
             // RÃ©solution des hÃ©ritages pour le context actuel (Context::ResolveInheritance() rÃ©soud les hÃ©ritages pour tous les contextes).
             solveAllInheritance();
 
             // Initialisation du vecteur 'enabledFiles' contenant la liste des fichiers Ã  sortir.
-            std::cout << "(Message temporaire) Initialisation du vecteur enabledFiles ..." << std::endl;
+            //std::cout << "(Message temporaire) Initialisation du vecteur enabledFiles ..." << std::endl;
             findEnabledFiles();
 
             // Recherche des champs Ã  sortir (enable Ã  true + niveau de sortie correct) pour chaque fichier prÃ©cÃ©demment listÃ©.
-            std::cout << "(Message temporaire) Recherche des champs Ã  sortir ..." << std::endl;
+            //std::cout << "(Message temporaire) Recherche des champs Ã  sortir ..." << std::endl;
             findAllEnabledFields();
 
             // RÃ©solution des rÃ©fÃ©rences de grilles pour chacun des champs.
-            std::cout << "(Message temporaire) RÃ©solution des rÃ©fÃ©rences de grilles ..." << std::endl;
+            //std::cout << "(Message temporaire) RÃ©solution des rÃ©fÃ©rences de grilles ..." << std::endl;
             solveAllGridRef();
 
-            std::cout << "(Message temporaire) fin traitement sorties ..." << std::endl;
+            //std::cout << "(Message temporaire) fin traitement sorties ..." << std::endl;
          }
 
Index: XMLIO_V2/dev/dev_rv/src/XMLIO/c_interface.cpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/XMLIO/c_interface.cpp	(revision 122)
+++ XMLIO_V2/dev/dev_rv/src/XMLIO/c_interface.cpp	(revision 123)
@@ -8,36 +8,57 @@
 extern "C" void main_c_(void) ;
 
+// Cette fonction remplit un tableau Ã  N dimensions de valeurs de type T (T = double ou float) de la maniÃšre suivante :
+// 0.0 1.0 2.0 3.0, puis 0.1 1.1 2.1 3.1 ... au second appel de la fonction, etc.
+template <class T>
+   static void updateDataTest(T begin, T end)
+{
+   static int called = 0; int i = 0;
+   for (T it = begin; it != end; it++, i++)
+      (*it) = i + called * 0.1;
+   called++;
+}
+
 void main_c_ (void)
 {
    try
    {
-      //string file("/local/XMLIOSERVER_DEV/dev_rv/test/iodef_test.xml");
-      //string file("/local/XMLIOSERVER_DEV/dev_rv/iodef_test.xml");
-      string file("/local/XMLIOSERVER_DEV/dev_rv/test/iodef_simple_test.xml");
-
+      Array<double, 3> arr(3, 3, 3) ; // Les donnÃ©es.
+      string file("/local/XMLIOSERVER_DEV/dev_rv/test/iodef_simple_test.xml"); // Le fichier de dÃ©finition.
       ifstream istr( file.c_str() , ifstream::in );
 
       // On commence la lecture du flux de donnÃ©e xml qui doit possÃ©der pour racine un unique noeud nommÃ© "simulation".
       XMLNode node = XMLNode::CreateNode(istr, Context::GetRootName());
+
       // On parse le fichier xml noeud par noeud (ie on construit dynamiquement notre arbre d'objets).
       XMLParser::Parse(node);
-
-      // On rÃ©soud les hÃ©ritages descendants ainsi que les hÃ©ritages par rÃ©fÃ©rence.
-      //Context::ResolveInheritance(); // Plus nÃ©cessaire!!
 
       // On se place dans le contexte 'context1'.
       Context::SetCurrentContext("context1") ;
 
-      std::cout << " * ----------- <<<TOP>>> DÃ©but du traitement ----------- * " << std::endl;
+      std::cout << " * ----------- DÃ©but du traitement ----------- * " << std::endl;
+
+      //Affichage de la date initiale (pour vÃ©rification).
+      std::cout << *Context::GetObject("context1")->getCalendar() << std::endl;
+
       // On crÃ©e une instance de traitement de donnÃ©es dans le format NetCDF4.
       AbstractDataTreatment *dtreat = new NetCDF4DataTreatment(Context::GetObject("context1"));
-
-      // Affichage de la liste des fichiers Ã  sortir (par id).
-      //dtreat->printEnabledFilesId();
 
       NetCDF4DataOutput dop(CFile::GetObject("fichier1"));
       dop.createFileAndHeader();
 
-      // On Ã©crit l'arborescence rÃ©sultante du traitement sur la sortie.
+      for(int tcourant = 0, tfinal = 9; tcourant <= tfinal; tcourant++)
+      {
+         // Mise Ã  jour de la date.
+
+
+         // Mise Ã  jour des donnÃ©es.
+         updateDataTest<Array<double, 3>::iterator>(arr.begin(), arr.end());
+
+         // Ecriture des donnÃ©es.
+         // dtreat->writeData("Premier_champ", arr);
+
+      }
+
+      // On Ã©crit l'arborescence rÃ©sultante du traitement sur la sortie de log.
       //Context::ShowTree(std::clog);
 
@@ -52,46 +73,6 @@
    }
 
-// return (0);
+   // return (0);
 }
 
 
-      /* CODE TEST POUR CALENDRIER
-      AbstractCalendar* calendar = new GregorianCalendar();
-
-      Date dd (*calendar, 2000, 05, 03, 00, 00, 00) ;
-      Date ddd(*calendar, 2030, 11, 02, 10, 33, 40) ;
-
-      Date d1 (*calendar, 2007, 11, 12, 00, 00, 00) ;
-      Date d2 (*calendar, 2008, 11, 12, 00, 00, 00) ;
-
-      string sttr("12/07/2005 - 10:11:30");
-      string stttr("111s 14.36 mi 7y 3.9y 3.4 mg");
-      Date d3 = Date::FromString(sttr, *calendar);
-
-      // Les mois sont considÃ©rÃ©s comme des entiers mais stockÃ©s comme des flottants.
-      Duration sc0 = Second * -65.3 + Minute * 117.5   + Hour * 65.9  + Day * 417.8 + Month * 16.0  - Year * 17.5;
-      Duration sc1 = Second * 175.3 - Minute * 13109.6 + Hour * 135.1 - Day * 616.4 + Month * 236.0 + Year * 33.9;
-      Duration sc2 = 60 * Day;
-
-      Duration sc3 = Duration::FromString(stttr);
-
-      std::cout << calendar->getInitDate()    << std::endl;
-      std::cout << calendar->getCurrentDate() << std::endl;
-
-      std::cout << boolalpha << (calendar->getInitDate() != calendar->getCurrentDate()) << std::endl;
-
-      std::cout << (Time)d2 - (Time)(d1 + 365 * Day) << std::endl;
-      std::cout << sc0 << std::endl << sc1 << std::endl << sc1 - sc0 << std::endl;
-      std::cout << ddd - dd << std::endl;
-      std::cout << dd << std::endl;
-      std::cout << (Time)dd << std::endl;
-      std::cout << calendar->getNbSecond(dd) << std::endl;
-
-      std::cout << (dd+sc2) << std::endl;
-      std::cout << (d3)  << std::endl;
-
-      std::cout << (sc3) << std::endl;
-
-      delete calendar;
-      */
-
Index: XMLIO_V2/dev/dev_rv/src/XMLIO/context.hpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/XMLIO/context.hpp	(revision 122)
+++ XMLIO_V2/dev/dev_rv/src/XMLIO/context.hpp	(revision 123)
@@ -94,8 +94,4 @@
                   if (attributes.end() != attributes.find("id"))
                   { WARNING("Le noeud de dÃ©finition possÃšde un identifiant, ce dernier ne sera pas pris en compte lors du traitement !"); }
-
-                  if (attributes.end() != attributes.find("calendar_type") && attributes.end() != attributes.find("start_date"))
-                     setCalendar(attributes["calendar_type"], attributes["start_date"]);
-
 
                   if (name.compare(FieldDefinition::GetDefName())  == 0) // Parsing pour la dÃ©finition des champs.
@@ -153,4 +149,12 @@
          GridDefinition   * getGridDefinition(void)   const { return (this->gridDef  ); }
          DomainDefinition * getDomainDefinition(void) const { return (this->domainDef); }
+
+         void updateCurrentDate(const Duration* const dr = NULL)
+         {
+            static Duration dur = Hour;
+            if (dr != NULL) dur = *dr;
+            Date newCurrentDate = ccalendar->getCurrentDate() + dur;
+            ccalendar->getCurrentDate() = newCurrentDate;
+         }
 
          AbstractCalendar * getCalendar(void) const { return (this->ccalendar ); }
Index: XMLIO_V2/dev/dev_rv/src/XMLIO/date.hpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/XMLIO/date.hpp	(revision 122)
+++ XMLIO_V2/dev/dev_rv/src/XMLIO/date.hpp	(revision 123)
@@ -15,9 +15,17 @@
          }
 
-         Date(const Date& d) : relCalendar(d.relCalendar)
+         Date(const Date& d) : relCalendar(d.getRelCalendar())
             , year(d.year), month(d.month), day(d.day), hour(d.hour), minute(d.minute), second(d.second)
          {
             if(!checkDate())
                WARNING("La date initialisÃ©e a Ã©tÃ© modifiÃ©e car elle Ã©tait incorrecte par rapport au calendrier souhaitÃ©.");
+         }
+
+         Date& operator=(const Date& d)
+         {
+            // relCalendar = d.getRelCalendar(); << inutile si fonction bien utilisÃ©e
+            year = d.year; month = d.month; day = d.day;
+            hour = d.hour; minute = d.minute; second = d.second;
+            return (*this);
          }
 
Index: XMLIO_V2/dev/dev_rv/src/XMLIO/duration.hpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/XMLIO/duration.hpp	(revision 122)
+++ XMLIO_V2/dev/dev_rv/src/XMLIO/duration.hpp	(revision 123)
@@ -26,4 +26,5 @@
          friend std::istream& operator>>(std::istream& in, struct _duration& d)
          {
+            d.year = d.month = d.day = d.hour = d.minute = d.second = 0.0;
             double v = 1.0;
             char   c = '/';
@@ -77,5 +78,6 @@
                          Hour   = {0.0, 0.0, 0.0, 1.0, 0.0, 0.0},
                          Minute = {0.0, 0.0, 0.0, 0.0, 1.0, 0.0},
-                         Second = {0.0, 0.0, 0.0, 0.0, 0.0, 1.0};
+                         Second = {0.0, 0.0, 0.0, 0.0, 0.0, 1.0},
+                         NoneDu = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
 
 } // namespace XMLIOSERVER
Index: XMLIO_V2/dev/dev_rv/src/XMLIO/field.hpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/XMLIO/field.hpp	(revision 122)
+++ XMLIO_V2/dev/dev_rv/src/XMLIO/field.hpp	(revision 123)
@@ -15,5 +15,5 @@
          CField(void) : ObjectTemplate<CField>(), FieldAttribut(), grid(NULL)
          {/* Ne rien faire de plus */}
-         CField(const string& _id) : ObjectTemplate<CField>(_id), FieldAttribut(), grid(NULL)
+         CField(const string& _id) : ObjectTemplate<CField>(_id), FieldAttribut(), grid(NULL), foper(NULL)
          {/* Ne rien faire de plus */}
 
@@ -23,4 +23,6 @@
 
          const CGrid* getGrid(void) const { return (grid); }
+         const Array<double, 1>& getData(void) const { return (data); }
+         const FieldOperation* getFieldOperation(void) const { return (foper); }
 
          virtual CField* getReference(void) const
@@ -28,5 +30,5 @@
             if(!field_ref.hasValue()) return (NULL);
             if (!CField::HasObject(field_ref))
-            { WARNING("RÃ©fÃ©rence invalide sur l'objet "+GetName()+" nommÃ© \""+((string)field_ref)+"\""); return (NULL);}
+            { WARNING("RÃ©fÃ©rence invalide sur l'objet "+GetName()+" nommÃ© \""+((string)field_ref)+"\""); return (NULL); }
 
             return (CField::GetObject(field_ref));
@@ -39,4 +41,6 @@
 
          CGrid* grid ;
+         FieldOperation* foper;
+         Array<double, 1> data;
 
    }; // class CField
Index: XMLIO_V2/dev/dev_rv/src/XMLIO/field_operation.hpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/XMLIO/field_operation.hpp	(revision 123)
+++ XMLIO_V2/dev/dev_rv/src/XMLIO/field_operation.hpp	(revision 123)
@@ -0,0 +1,29 @@
+#ifndef __FIELD_OPERATION__
+#define __FIELD_OPERATION__
+
+namespace XMLIOSERVER
+{
+
+   class FieldOperation : public AbstractObject
+   {
+      public :
+
+         FieldOperation() : AbstractObject("Inst(X)")
+         { /* Ne rien faire de plus */ }
+
+         FieldOperation(const string& _id) : AbstractObject(_id)
+         { /* Ne rien faire de plus */ }
+
+         virtual ~FieldOperation()
+         { /* Ne rien faire de plus */ }
+
+
+      protected :
+
+      private :
+
+
+   }; // class FieldOperation
+} // namespace XMLIOSERVER
+
+#endif //__FIELD_OPERATION__
Index: XMLIO_V2/dev/dev_rv/src/XMLIO/file_attribut.hpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/XMLIO/file_attribut.hpp	(revision 122)
+++ XMLIO_V2/dev/dev_rv/src/XMLIO/file_attribut.hpp	(revision 123)
@@ -10,5 +10,5 @@
          DECLARE_ATTR(name, string) ;
          DECLARE_ATTR(description, string) ;
-         DECLARE_ATTR(output_freq, int) ;
+         DECLARE_ATTR(output_freq, Duration) ;
          DECLARE_ATTR(output_level, int) ;
          DECLARE_ATTR(enabled, bool);
Index: XMLIO_V2/dev/dev_rv/src/XMLIO/grid.hpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/XMLIO/grid.hpp	(revision 122)
+++ XMLIO_V2/dev/dev_rv/src/XMLIO/grid.hpp	(revision 123)
@@ -44,5 +44,4 @@
          { /* Ne rien faire de plus */ }
 
-
       private:
 
@@ -52,11 +51,10 @@
          CDomain* domain ;
 
-         Array<int,1> storeIndex ;
-         Array<int,1> out_i_index ;
-         Array<int,1> out_j_index ;
-         Array<int,1> out_l_index ;
+         Array<int, 1> storeIndex ;
+         Array<int, 1> out_i_index ;
+         Array<int, 1> out_j_index ;
+         Array<int, 1> out_l_index ;
 
    }; // class CGrid
-
 
    CGrid* CGrid::CreateObject(const CDomain* const a_domain, const CAxis* const a_axis)
@@ -66,5 +64,5 @@
 
       grid->domain_ref = a_domain->getId() ;
-      grid->axis_ref = a_axis->getId() ;
+      grid->axis_ref   = a_axis  ->getId() ;
 
       return (grid);
Index: XMLIO_V2/dev/dev_rv/src/XMLIO/xml_parser.hpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/XMLIO/xml_parser.hpp	(revision 122)
+++ XMLIO_V2/dev/dev_rv/src/XMLIO/xml_parser.hpp	(revision 123)
@@ -37,4 +37,7 @@
                   Context& context = *Context::CreateObject(attributes["id"]);
 
+                  if (attributes.end() != attributes.find("calendar_type") && attributes.end() != attributes.find("start_date"))
+                     context.setCalendar(attributes["calendar_type"], attributes["start_date"]);
+
                   context.parse(_node);
                   attributes.clear();
Index: XMLIO_V2/dev/dev_rv/src/XMLIO/xmlio.hpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/XMLIO/xmlio.hpp	(revision 122)
+++ XMLIO_V2/dev/dev_rv/src/XMLIO/xmlio.hpp	(revision 123)
@@ -40,5 +40,5 @@
 #include "abstract_object.hpp"
 
-// Gestion du calendrier
+// Gestion du calendrier.
 #include "duration.hpp"
 #include "date.hpp"
@@ -47,7 +47,8 @@
 #include "calendar_utils.hpp"
 
-// Gestion de l'Ã©criture des donnÃ©es
+// Gestion de l'Ã©criture des donnÃ©es.
 #include "abstract_data_output.hpp"
 
+//....
 #include "xml_node.hpp"
 #include "object_template.hpp"
@@ -59,4 +60,7 @@
 #include "field_attribut.hpp"
 #include "file_attribut.hpp"
+
+// Traitement des opÃ©rations sur les champs
+#include "field_operation.hpp"
 
 #include "group_template.hpp"
@@ -70,6 +74,8 @@
 #include "file.hpp"
 
+// RÃ©solution des rÃ©fÃ©rences aux grilles pour les champs.
 #include "field_gridrefsolver.hpp"
 
+//....
 #include "context.hpp"
 #include "xml_parser.hpp"
@@ -79,5 +85,5 @@
 #include "NetCDF4_data_output.hpp"
 
-// Traitement des donnÃ©es
+// Traitement des donnÃ©es (abstract puis selon types de sortie)
 #include "abstract_data_treatment.hpp"
 #include "NetCDF4_data_treatment.hpp"
