Index: XMLIO_V2/dev/dev_rv/src/XMLIO/NetCDF4_data_output.hpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/XMLIO/NetCDF4_data_output.hpp	(revision 129)
+++ XMLIO_V2/dev/dev_rv/src/XMLIO/NetCDF4_data_output.hpp	(revision 130)
@@ -2,4 +2,5 @@
 #define __NETCDF4_DATA_OUTPUT__
 
+// EntÃªte NetCDF pour le C++.
 #include <netcdfcpp.h>
 
@@ -82,5 +83,38 @@
 
             if (!cVar->put(cdata.dataFirst(), cdata.size()))
-               throw XMLIOUndefinedValueException("Impossible d'Ã©crire les valeurs de coordonnÃ©es "+ id +" !");
+               throw XMLIOUndefinedValueException
+                  ("Impossible d'Ã©crire les valeurs de coordonnÃ©es "+ id +" !");
+         }
+
+         void setTimeCoords(void)
+         {
+            NcVar *oVar = NULL;
+            Poco::HashMap<string, string> hm;
+            AbstractCalendar * ccal = Context::GetCurrentContext()->getCalendar();
+            const std::set<const FieldOperation*> sfo = this->getRelFile()->getEnabledOperation();
+            std::set<const FieldOperation*>::const_iterator it;
+
+            //std::cout << "Nombre d'opÃ©ration disponibles pour le fichier : " << sfo.size() << std::endl;
+
+            for ( it = sfo.begin() ; it != sfo.end(); it++ )
+            {
+               const FieldOperation * const   fope = (*it);
+               const Duration& ffope = (*it)->getFreqOp();
+               ostringstream oss; oss << "t_" << *fope << "_" << ffope;
+               const std::string cid(oss.str());
+
+               if (!(oVar = dataFile->add_var(cid.c_str(), ncDouble, dataFile->get_dim(TimeName))))
+                  throw XMLIOUndefinedValueException
+                     ("Impossible d'ajouter la coordonnÃ©e temporelle "+cid+" !");
+
+               hm ["standard_name"] = "time";
+               hm ["title"]         = "Time";
+               hm ["long_name"]     = "Time axis";
+               hm ["units"]         = string("seconds since ").append(ccal->getInitDate().toString()); //"seconds since 1979-01-01 00:00:00"
+               hm ["calendar"]      = ccal->getType(); //"360d"
+               hm ["time_origin"]   = ccal->getInitDate().toString();//" 1979-JAN-01 00:00:00" ;
+               this->addStringAttributesToVar_str(oVar, hm);
+               hm.clear();
+            }
          }
 
@@ -94,5 +128,6 @@
             dataFile = new NcFile(filename.c_str(), NcFile::Replace);
             if(!dataFile->is_valid())
-               throw XMLIOUndefinedValueException("Impossible d'ouvrir le fichier '"+ filename +"' pour l'Ã©criture des donnÃ©es' !");
+               throw XMLIOUndefinedValueException
+                  ("Impossible d'ouvrir le fichier '"+ filename +"' pour l'Ã©criture des donnÃ©es' !");
 
             // Ajout de quelques attributs globaux.
@@ -181,9 +216,11 @@
                if ((*itt)->yvalue.hasValue())
                   this->writeCoords(lonid, (*itt)->xvalue);
-               else throw XMLIOUndefinedValueException("Les coordonnÃ©es de longitude (xvalue) ne sont pas dÃ©finies pour le domaine \""+domid+"\".");
+               else throw XMLIOUndefinedValueException
+                  ("Les coordonnÃ©es de longitude (xvalue) ne sont pas dÃ©finies pour le domaine \""+domid+"\".");
 
                if ((*itt)->xvalue.hasValue())
                   this->writeCoords(latid, (*itt)->yvalue);
-               else throw XMLIOUndefinedValueException("Les coordonnÃ©es de latitude (yvalue) ne sont pas dÃ©finies pour le domaine \""+domid+"\".");
+               else throw XMLIOUndefinedValueException
+                  ("Les coordonnÃ©es de latitude (yvalue) ne sont pas dÃ©finies pour le domaine \""+domid+"\".");
             }
 
@@ -215,6 +252,9 @@
                if ((*it)->value.hasValue())
                   this->writeCoords(axisid, (*it)->value);
-               else throw XMLIOUndefinedValueException("Les coordonnÃ©es de l'axe \""+axisid+"\" (value) ne sont pas dÃ©finies.");
-            }
+               else throw XMLIOUndefinedValueException
+                  ("Les coordonnÃ©es de l'axe \""+axisid+"\" (value) ne sont pas dÃ©finies.");
+            }
+
+            this->setTimeCoords();
          }
 
@@ -233,10 +273,10 @@
             for ( it = enabledFields.begin() ; it != enabledFields.end(); it++ )
             {
-                     CField  *  field = (*it);
-               const CField  * bfield = (*it)->getBaseObject();
-               const CDomain *   rdom = field->getGrid()->getRelDomain();
-               const CAxis   *  raxis = field->getGrid()->getRelAxis();
-               FieldOperation*   fope = field->operation.getValue();
-               Duration      *  ffope = field->freq_op.getValue();
+                     CField  * const  field = (*it);
+               const CField  * const bfield = (*it)->getBaseObject();
+               const CDomain * const   rdom = field->getGrid()->getRelDomain();
+               const CAxis   * const  raxis = field->getGrid()->getRelAxis();
+               FieldOperation* const   fope = field->operation.getValue();
+               //Duration    * const  ffope = field->freq_op.getValue();
 
                string fieldid = (field->name.hasValue()) ? (string)field->name : bfield->getId();
@@ -244,33 +284,19 @@
                string axisid  = (raxis->name.hasValue()) ? (string)raxis->name : raxis ->getId();
 
-               string lonid = (sdom.size() == 1)? string("lon"): string("lon_").append(domid); // Nom de la coordonnÃ©e longitudinale associÃ©e.
-               string latid = (sdom.size() == 1)? string("lat"): string("lat_").append(domid); // Nom de la coordonnÃ©e latitudinale  associÃ©e.
+               string lonid = (sdom.size() == 1)? string("lon")
+                     : string("lon_").append(domid); // Nom de la coordonnÃ©e longitudinale associÃ©e.
+               string latid = (sdom.size() == 1)? string("lat")
+                     : string("lat_").append(domid); // Nom de la coordonnÃ©e latitudinale  associÃ©e.
 
                lonlat = !field->getGrid()->_hasAxis();
 
-
-               ////////////////////////////////////// A DEPLACER
                if (fope != NULL)
-               { // Si une opÃ©ration sur le champ est dÃ©finie ...
                   if (fope->getId().compare("once") == 0)
-                  { wtime = false; field->freq_op.setValue(NoneDu); }
-               }
-               else
-               { // Si aucune opÃ©ration sur le champ n'est dÃ©finie ...
-                  FieldOperation ope("inst");
-                  field->operation.setValue(ope);
-               }
-
-               // Si la frÃ©quence d'opÃ©ration n'est pas dÃ©finie, on l'initialise Ã  0s.
-               // Une frÃ©quence Ã  0s signifie que l'opÃ©ration se fera Ã  chaque Ã©criture de donnÃ©es depuis la simulation.
-               if (ffope == NULL)
-                  field->freq_op.setValue(NoneDu);
-
-               field->operation.getValue()->setFreqOp(field->freq_op);
-               /////////////////////////////////////////////
+                     wtime = false;
 
                tvar = ncFloat;
                if (field->prec.hasValue())
-                  if (field->prec == 8) tvar = ncDouble;
+                  if (field->prec == 8)
+                     tvar = ncDouble;
 
                if (wtime)
Index: XMLIO_V2/dev/dev_rv/src/XMLIO/abstract_calendar.hpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/XMLIO/abstract_calendar.hpp	(revision 129)
+++ XMLIO_V2/dev/dev_rv/src/XMLIO/abstract_calendar.hpp	(revision 130)
@@ -19,4 +19,6 @@
             return (out);
          }
+
+         virtual string getType(void) const { return (string(this->getId())); }
 
          const Date& getInitDate(void) const { return(initDate); }
Index: XMLIO_V2/dev/dev_rv/src/XMLIO/calendar.hpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/XMLIO/calendar.hpp	(revision 129)
+++ XMLIO_V2/dev/dev_rv/src/XMLIO/calendar.hpp	(revision 130)
@@ -27,4 +27,6 @@
             return (AbstractCalendar::getMonthLength(_d));
          }
+
+         virtual string getType(void) const { return (string("julian")); }
 
          virtual ~JulianCalendar()
@@ -63,4 +65,6 @@
          }
 
+         virtual string getType(void) const { return (string("gregorian")); }
+
          virtual ~GregorianCalendar()
          {/* Ne rien faire de plus */}
@@ -76,4 +80,6 @@
          NoLeapCalendar(const string& dateStr) : AbstractCalendar("NoLeap", dateStr)
          {/* Ne rien faire de plus */}
+
+         virtual string getType(void) const { return (string("noleap")); }
 
          virtual ~NoLeapCalendar()
@@ -98,4 +104,6 @@
          virtual int getYearTotalLength(const Date& d) const { return (366 * 86400); }
 
+         virtual string getType(void) const { return (string("allleap")); }
+
          virtual ~AllLeapCalendar()
          {/* Ne rien faire de plus */}
@@ -117,4 +125,6 @@
          virtual int getMonthLength(const Date& d) const { return (30); }
 
+         virtual string getType(void) const { return (string("360d")); }
+
          virtual ~D360Calendar()
          {/* Ne rien faire de plus */}
Index: XMLIO_V2/dev/dev_rv/src/XMLIO/data_treatment.hpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/XMLIO/data_treatment.hpp	(revision 129)
+++ XMLIO_V2/dev/dev_rv/src/XMLIO/data_treatment.hpp	(revision 130)
@@ -97,4 +97,7 @@
             this->solveAllGridRef();
 
+            // Traitement des opÃ©rations.
+            this->solveAllOperation();
+
             //std::cout << "(Message temporaire) fin traitement sorties ..." << std::endl;
          }
@@ -114,4 +117,10 @@
             for (unsigned int i = 0; i < enabledFiles.size(); i++)
                enabledFiles[i]->solveEFGridRef();
+         }
+
+         void solveAllOperation(void)
+         {
+            for (unsigned int i = 0; i < enabledFiles.size(); i++)
+               enabledFiles[i]->solveEFOperation();
          }
 
Index: XMLIO_V2/dev/dev_rv/src/XMLIO/date.hpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/XMLIO/date.hpp	(revision 129)
+++ XMLIO_V2/dev/dev_rv/src/XMLIO/date.hpp	(revision 130)
@@ -32,6 +32,9 @@
          }
 
-         operator Time(void); // Retourne le nombre de secondes Ã©coulÃ©es depuis la date initiale dÃ©finie dans le calendrier.
+         operator Time(void);  // Retourne le nombre de secondes Ã©coulÃ©es depuis la date initiale dÃ©finie dans le calendrier.
          bool checkDate(void); // VÃ©rifie la validitÃ© de la date.
+
+         std::string toString(void) const
+         { std::ostringstream oss; oss << (*this); return (string(oss.str())); }
 
          friend std::ostream& operator<<(std::ostream& out, const Date& d)
@@ -72,5 +75,5 @@
          const AbstractCalendar& getRelCalendar(void) const { return (relCalendar); }
 
-         ~Date()
+         ~Date(void)
          {/* Ne rien faire de plus */}
 
Index: XMLIO_V2/dev/dev_rv/src/XMLIO/duration.hpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/XMLIO/duration.hpp	(revision 129)
+++ XMLIO_V2/dev/dev_rv/src/XMLIO/duration.hpp	(revision 130)
@@ -19,6 +19,7 @@
          }
 
-         friend std::ostream& operator<<(std::ostream& out, const struct _duration& d)
+         friend std::ostream& operator<<(std::ostream& _out, const struct _duration& d)
          {
+            std::ostringstream out;
             bool testValue = true;
             if(d.year   != 0.0) { testValue = false; out << d.year   << "y " ; }
@@ -28,5 +29,7 @@
             if(d.minute != 0.0) { testValue = false; out << d.minute << "mi "; }
             if(d.second != 0.0 || testValue) { out << d.second << "s " ; }
-            return (out);
+
+            _out << (out.str().substr(0, out.str().size()-1)); // << suppression de l'espace en fin de chaÃ®ne.
+            return (_out);
          }
 
Index: XMLIO_V2/dev/dev_rv/src/XMLIO/field.hpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/XMLIO/field.hpp	(revision 129)
+++ XMLIO_V2/dev/dev_rv/src/XMLIO/field.hpp	(revision 130)
@@ -40,4 +40,28 @@
             data.resize(shape(arr.size())) ;
             data = arr;
+         }
+
+         void solveOperation(void)
+         {
+            FieldOperation*   fope = this->operation.getValue();
+            Duration      *  ffope = this->freq_op.getValue();
+
+            if (fope != NULL)
+            { // Si une opÃ©ration sur le champ est dÃ©finie ...
+               if (fope->getId().compare("once") == 0)
+                  this->freq_op.setValue(NoneDu);
+            }
+            else
+            { // Si aucune opÃ©ration sur le champ n'est dÃ©finie ...
+               FieldOperation ope("inst");
+               this->operation.setValue(ope);
+            }
+
+            // Si la frÃ©quence d'opÃ©ration n'est pas dÃ©finie, on l'initialise Ã  0s.
+            // Une frÃ©quence Ã  0s signifie que l'opÃ©ration se fera Ã  chaque Ã©criture de donnÃ©es depuis la simulation.
+            if (ffope == NULL)
+               this->freq_op.setValue(NoneDu);
+
+            this->operation.getValue()->setFreqOp(this->freq_op);
          }
 
Index: XMLIO_V2/dev/dev_rv/src/XMLIO/file.hpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/XMLIO/file.hpp	(revision 129)
+++ XMLIO_V2/dev/dev_rv/src/XMLIO/file.hpp	(revision 130)
@@ -11,18 +11,27 @@
       public:
 
-         CFile(void) : ObjectTemplate<CFile>(), FileAttribut(), vfieldGroup(NULL), enabledFields(), output(NULL)
-         {/* Ne rien faire de plus */}
-         CFile(const string& _id) : ObjectTemplate<CFile>(_id), FileAttribut(), vfieldGroup(NULL), enabledFields(), output(NULL)
-         {/* Ne rien faire de plus */}
+         CFile(void)
+            : ObjectTemplate<CFile>(), FileAttribut(),
+              vfieldGroup(NULL), enabledFields(), output(NULL)
+         { /* Ne rien faire de plus */ }
 
-         AbstractDataOutput* getDataOutput(void) const { return (output); }
+         CFile(const string& _id)
+            : ObjectTemplate<CFile>(_id), FileAttribut(),
+              vfieldGroup(NULL), enabledFields(), output(NULL)
+         { /* Ne rien faire de plus */ }
+
+         AbstractDataOutput*         getDataOutput       (void) const { return (output); }
+         FieldGroup*                 getVirtualFieldGroup(void) const { return (vfieldGroup); }
+         const std::vector<CField*>& getEnabledFields    (void) const { return (enabledFields); }
+
          void initializeDataOutput(AbstractDataOutput* _output)
          {
             if (_output != NULL) output = _output;
-            else throw XMLIOSERVER::XMLIOUndefinedValueException("Impossible d'initialiser la sortie de donnÃ©es pour le fichier nommÃ© '"+ getId() +"'.") ;
+            else throw XMLIOSERVER::XMLIOUndefinedValueException
+               ("Impossible d'initialiser la sortie de donnÃ©es pour le fichier nommÃ© '"+ getId() +"'.") ;
          }
 
-         void getAllFields(std::vector<CField*>& _allF) const {  if (vfieldGroup!=NULL) vfieldGroup->getAllChildren(_allF); }
-         const std::vector<CField*>& getEnabledFields(void) const { return (enabledFields); }
+         void getAllFields(std::vector<CField*>& _allF) const
+         {  if (vfieldGroup!=NULL) vfieldGroup->getAllChildren(_allF); }
 
          const std::set<const CGrid*> getEnabledGrids(void) const
@@ -46,5 +55,5 @@
             for ( it = enabledFields.begin() ; it != enabledFields.end(); it++ )
                if ((*it)->operation.hasValue())
-                  sope.insert((FieldOperation*)&(*it)->operation);
+                  sope.insert((*it)->operation.getValue());
 
             return (sope);
@@ -55,5 +64,4 @@
             const std::set<const CGrid*> sgrid = this->getEnabledGrids();
             std::set<const CDomain*> sdomain;
-
             std::set<const CGrid*>::const_iterator it;
 
@@ -68,5 +76,4 @@
             const std::set<const CGrid*> sgrid = this->getEnabledGrids();
             std::set<const CAxis*> saxis;
-
             std::set<const CGrid*>::const_iterator it;
 
@@ -80,10 +87,10 @@
          { // RÃ©solution des hÃ©ritages par rÃ©fÃ©rence de chacun des champs contenus dans le fichier.
             std::vector<CField*> allF; this->getAllFields(allF);
-            for (unsigned int i = 0; i < allF.size(); i++) allF[i]->solveRefInheritance();
+            for (unsigned int i = 0; i < allF.size(); i++)
+               allF[i]->solveRefInheritance();
          }
 
-         FieldGroup* getVirtualFieldGroup(void) const { return (vfieldGroup); }
-
-         void findEnabledFields(const Date& inidate, int default_outputlevel = 5, int default_level = 1, bool default_enabled = true )
+         void findEnabledFields(const Date& inidate,
+               int default_outputlevel = 5, int default_level = 1, bool default_enabled = true )
          {
             const int _outputlevel = (output_level.hasValue()) ? (int)output_level : default_outputlevel;
@@ -128,4 +135,10 @@
             for (unsigned int i = 0; i < enabledFields.size(); i++)
                enabledFields[i]->solveGridRef();
+         }
+
+         void solveEFOperation(void)
+         {
+            for (unsigned int i = 0; i < enabledFields.size(); i++)
+               enabledFields[i]->solveOperation();
          }
 
