Index: /XMLIO_V2/dev/dev_rv/src/XMLIO/NetCDF4_data_output.hpp
===================================================================
--- /XMLIO_V2/dev/dev_rv/src/XMLIO/NetCDF4_data_output.hpp	(revision 124)
+++ /XMLIO_V2/dev/dev_rv/src/XMLIO/NetCDF4_data_output.hpp	(revision 125)
@@ -20,19 +20,29 @@
       protected :
 
-         Poco::HashMap<string, int> getAllLimitedDim(void)
+         Poco::HashMap<string, int> getAllLimitedDim(void) const
          {
             Poco::HashMap<string, int> dims;
-            const std::set<const CDomain*> sdom = getRelFile()->getEnabledDomains();
-            const std::set<const CAxis*> saxis = getRelFile()->getEnabledAxis();
-
-            const CDomain* pdom = *sdom.begin();
-
-            // TODO AmÃ©liorer ci-dessous -> un seul domaine pris en compte pour le moment
-            dims["lon"] = pdom->nj;
-            dims["lat"] = pdom->ni;
+            const std::set<const CDomain*> sdom = this->getRelFile()->getEnabledDomains();
+            const std::set<const CAxis*>  saxis = this->getRelFile()->getEnabledAxis();
+
+            // std::cout << "Nombre de domaines disponibles pour le fichier : " << sdom.size() << std::endl;
+            // std::cout << "Nombre d'axes disponibles pour le fichier : " << saxis.size() << std::endl;
+
+            std::set<const CDomain*>::const_iterator itt;
+            for ( itt = sdom.begin() ; itt != sdom.end(); itt++ )
+            {
+               string domid = ((*itt)->name.hasValue()) ? (string)(*itt)->name : (*itt)->getId();
+               string lonid = string("lon_").append(domid);
+               string latid = string("lat_").append(domid);
+               dims[lonid]  = (*itt)->ni;
+               dims[latid]  = (*itt)->nj;
+            }
 
             std::set<const CAxis*>::const_iterator it;
             for ( it = saxis.begin() ; it != saxis.end(); it++ )
-               dims[(*it)->getId()] = (*it)->size;
+            {
+               string axisid = ((*it)->name.hasValue()) ? (string)(*it)->name : (*it)->getId();
+               dims[axisid]  = (*it)->size;
+            }
 
             return (dims);
@@ -45,5 +55,5 @@
          {
               time_t rawtime;
-              struct tm * timeinfo;
+              struct tm * timeinfo = NULL;
               char buffer [100];
 
@@ -77,5 +87,5 @@
          {
             bool withTime = true;
-            const Poco::HashMap<string, int>& allDim = getAllLimitedDim();
+            const Poco::HashMap<string, int>& allDim = this->getAllLimitedDim();
             Poco::HashMap<string, int>::ConstIterator it;
 
@@ -99,27 +109,35 @@
             Poco::HashMap<string, string> hm;
 
-            const std::set<const CDomain*> sdom = getRelFile()->getEnabledDomains();
-            const std::set<const CAxis*> saxis = getRelFile()->getEnabledAxis();
-
-            if (!(latVar = dataFile->add_var("lat", ncFloat, dataFile->get_dim("lat"))))
-               throw XMLIOUndefinedValueException("Impossible d'ajouter la variable de latitude !");
-            if (!(lonVar = dataFile->add_var("lon", ncFloat, dataFile->get_dim("lon"))))
-               throw XMLIOUndefinedValueException("Impossible d'ajouter la variable de longitude !");
-
-            // Attribut de latitude.
-            hm["axis"]          = "Y" ;
-            hm["standard_name"] = "latitude" ;
-            hm["units"]         = "degrees_north";
-            hm["long_name"]     = "Latitude" ;
-            addStringAttributesToVar(latVar, hm);
-            hm.clear();
-
-            // Attribut de longitude.
-            hm["axis"]           = "X" ;
-            hm["standard_name"]  = "longitude" ;
-            hm["units"]          = "degrees_east";
-            hm["long_name"]      = "Longitude" ;
-            addStringAttributesToVar(lonVar, hm);
-            hm.clear();
+            const std::set<const CDomain*> sdom = this->getRelFile()->getEnabledDomains();
+            const std::set<const CAxis*>  saxis = this->getRelFile()->getEnabledAxis();
+
+            std::set<const CDomain*>::const_iterator itt;
+            for ( itt = sdom.begin() ; itt != sdom.end(); itt++ )
+            {
+               string domid = ((*itt)->name.hasValue()) ? (string)(*itt)->name : (*itt)->getId();
+               string lonid = string("lon_").append(domid);
+               string latid = string("lat_").append(domid);
+
+               if (!(latVar = dataFile->add_var(latid.c_str(), ncFloat, dataFile->get_dim(latid.c_str()))))
+                  throw XMLIOUndefinedValueException("Impossible d'ajouter la variable de latitude !");
+               if (!(lonVar = dataFile->add_var(lonid.c_str(), ncFloat, dataFile->get_dim(lonid.c_str()))))
+                  throw XMLIOUndefinedValueException("Impossible d'ajouter la variable de longitude !");
+
+               // Attribut de latitude.
+               hm["axis"]          = "Y" ;
+               hm["standard_name"] = "latitude" ;
+               hm["units"]         = "degrees_north";
+               hm["long_name"]     = "Latitude" ;
+               addStringAttributesToVar(latVar, hm);
+               hm.clear();
+
+               // Attribut de longitude.
+               hm["axis"]           = "X" ;
+               hm["standard_name"]  = "longitude" ;
+               hm["units"]          = "degrees_east";
+               hm["long_name"]      = "Longitude" ;
+               addStringAttributesToVar(lonVar, hm);
+               hm.clear();
+            }
 
             // Attribut des autres coordonnÃ©es.
@@ -127,5 +145,6 @@
             for ( it = saxis.begin() ; it != saxis.end(); it++ )
             {
-               if (!(othvar = dataFile->add_var((*it)->getId().c_str(), ncFloat, dataFile->get_dim((*it)->getId().c_str()))))
+               string axisid = ((*it)->name.hasValue()) ? (string)(*it)->name : (*it)->getId();
+               if (!(othvar = dataFile->add_var(axisid.c_str(), ncFloat, dataFile->get_dim(axisid.c_str()))))
                   throw XMLIOUndefinedValueException("Impossible d'ajouter la variable "+ (*it)->getId() +" !");
 
@@ -150,6 +169,15 @@
             for ( it = enabledFields.begin() ; it != enabledFields.end(); it++ )
             {
-               CField* field = (*it);
+                     CField*  field = (*it);
                const CField* bfield = (*it)->getBaseObject();
+               const CDomain*  rdom = field->getGrid()->getRelDomain();
+               const CAxis*   raxis = field->getGrid()->getRelAxis();
+
+               string fieldid = (field->name.hasValue()) ? (string)field->name : bfield->getId();
+               string domid   = (rdom ->name.hasValue()) ? (string)rdom ->name : rdom  ->getId();
+               string axisid  = (raxis->name.hasValue()) ? (string)raxis->name : raxis ->getId();
+
+               string lonid = string("lon_").append(domid); // Nom de la coordonnÃ©e longitudinale associÃ©e.
+               string latid = string("lat_").append(domid); // Nom de la coordonnÃ©e latitudinale  associÃ©e.
 
                lonlat = !field->getGrid()->_hasAxis();
@@ -158,8 +186,5 @@
                { // Si une opÃ©ration sur le champ est dÃ©finie ...
                   if (field->operation.getId().compare("once") == 0)
-                  {
-                     wtime = false;
-                     field->freq_op.setValue(NoneDu);
-                  }
+                  { wtime = false; field->freq_op.setValue(NoneDu); }
                }
                else
@@ -175,5 +200,4 @@
                ((FieldOperation)field->operation).setFreqOp(Duration(field->freq_op));
 
-
                tvar = ncFloat;
                if (field->prec.hasValue())
@@ -184,13 +208,13 @@
                   if (lonlat) // 2D spatio + temps
                   {
-                     if (!(var = dataFile->add_var(bfield->getId().c_str(), tvar,
-                        dataFile->get_dim("time"), dataFile->get_dim("lon"), dataFile->get_dim("lat"))))
+                     if (!(var = dataFile->add_var(fieldid.c_str(), tvar,
+                        dataFile->get_dim("time"), dataFile->get_dim(lonid.c_str()), dataFile->get_dim(latid.c_str()))))
                         throw XMLIOUndefinedValueException("Impossible d'ajouter le champ "+ field->getId() +" !");
                   }
                   else // 3D spatio + temps
                   {
-                     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()))))
+                     if (!(var = dataFile->add_var(fieldid.c_str(), tvar,
+                        dataFile->get_dim("time"), dataFile->get_dim(lonid.c_str()), dataFile->get_dim(latid.c_str()),
+                        dataFile->get_dim(axisid.c_str()))))
                         throw XMLIOUndefinedValueException("Impossible d'ajouter le champ "+ field->getId() +" !");
                   }
@@ -200,13 +224,13 @@
                   if (lonlat) // 2D spatio sans temps
                   {
-                     if (!(var = dataFile->add_var(bfield->getId().c_str(), tvar,
-                        dataFile->get_dim("lon"), dataFile->get_dim("lat"))))
+                     if (!(var = dataFile->add_var(fieldid.c_str(), tvar,
+                        dataFile->get_dim(lonid.c_str()), dataFile->get_dim(latid.c_str()))))
                         throw XMLIOUndefinedValueException("Impossible d'ajouter le champ "+ field->getId() +" !");
                   }
                   else // 3D spatio sans temps
                   {
-                     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()))))
+                     if (!(var = dataFile->add_var(fieldid.c_str(), tvar,
+                        dataFile->get_dim(lonid.c_str()), dataFile->get_dim(latid.c_str()),
+                        dataFile->get_dim(axisid.c_str()))))
                         throw XMLIOUndefinedValueException("Impossible d'ajouter le champ "+ field->getId() +" !");
                   }
@@ -221,4 +245,16 @@
          }
 
+         virtual void writeCoords(const string& id, const Array<float, 1>& cdata)
+         {
+            //if (!latVar->put(lats, NLAT))
+            //   return NC_ERR;
+         }
+
+         virtual void writeVarData(const string& id, const Array<float, 1>& vdata)
+         {
+            //if (!latVar->put(lats, NLAT))
+            //   return NC_ERR;
+         }
+
       private :
 
Index: /XMLIO_V2/dev/dev_rv/src/XMLIO/abstract_data_output.hpp
===================================================================
--- /XMLIO_V2/dev/dev_rv/src/XMLIO/abstract_data_output.hpp	(revision 124)
+++ /XMLIO_V2/dev/dev_rv/src/XMLIO/abstract_data_output.hpp	(revision 125)
@@ -34,8 +34,8 @@
 
 
-         virtual void initFile(void) = 0;
-         virtual void setDims(void) = 0;
+         virtual void initFile (void) = 0;
+         virtual void setDims  (void) = 0;
          virtual void setCoords(void) = 0;
-         virtual void setVars(void) = 0;
+         virtual void setVars  (void) = 0;
 
       private :
Index: /XMLIO_V2/dev/dev_rv/src/XMLIO/abstract_data_treatment.hpp
===================================================================
--- /XMLIO_V2/dev/dev_rv/src/XMLIO/abstract_data_treatment.hpp	(revision 124)
+++ /XMLIO_V2/dev/dev_rv/src/XMLIO/abstract_data_treatment.hpp	(revision 125)
@@ -40,4 +40,5 @@
 
             std::vector<CField*>::const_iterator it;
+
             for (it = vectRef.begin(); it != vectRef.end(); it++ )
             {
@@ -47,4 +48,9 @@
                   (*it)->getGrid()->storeField(arr, data_uni);
                   (*it)->storeData(data_uni, currentContext->getCalendar()->getCurrentDate());
+               }
+
+               if (true)
+               { // Ecriture des donnÃ©es si nÃ©cessaire.
+
                }
             }
@@ -61,13 +67,13 @@
          AbstractDataTreatment(Context* const _ctxt, const AbstractCalendar& cal) : enabledFiles(), currentContext(_ctxt)
          {
+            // RÃ©solution des hÃ©ritages pour le context actuel (Context::ResolveInheritance() rÃ©soud les hÃ©ritages pour tous les contextes).
             //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.
+            //Initialisation du vecteur 'enabledFiles' contenant la liste des fichiers Ã  sortir.
             //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Ã©.
+            //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;
             findAllEnabledFields(cal.getInitDate());
Index: /XMLIO_V2/dev/dev_rv/src/XMLIO/axis.hpp
===================================================================
--- /XMLIO_V2/dev/dev_rv/src/XMLIO/axis.hpp	(revision 124)
+++ /XMLIO_V2/dev/dev_rv/src/XMLIO/axis.hpp	(revision 125)
@@ -17,4 +17,5 @@
 
          static string GetName(void) {return ("axis"); }
+         static string GetDefName(void)  { return (CAxis::GetName()); }
 
          virtual ~CAxis(void)
Index: /XMLIO_V2/dev/dev_rv/src/XMLIO/c_interface.cpp
===================================================================
--- /XMLIO_V2/dev/dev_rv/src/XMLIO/c_interface.cpp	(revision 124)
+++ /XMLIO_V2/dev/dev_rv/src/XMLIO/c_interface.cpp	(revision 125)
@@ -56,5 +56,5 @@
             calendar->update();
 
-            std::cout << "> ItÃ©ration de calcul " << tcourant << ",  " << *calendar << std::endl;
+            std::cout << "> ItÃ©ration de calcul " << tcourant << ", " << *calendar << std::endl;
 
             // Mise Ã  jour des donnÃ©es.
@@ -63,9 +63,8 @@
             // Ecriture des donnÃ©es.
             dtreat->writeData<Array<double, 3> >("champ1", arr);
-
          }
 
          // On Ã©crit l'arborescence rÃ©sultante du traitement sur la sortie de log.
-         Context::ShowTree(std::clog);
+         // Context::ShowTree(std::clog);
 
          delete dtreat;
Index: /XMLIO_V2/dev/dev_rv/src/XMLIO/context.hpp
===================================================================
--- /XMLIO_V2/dev/dev_rv/src/XMLIO/context.hpp	(revision 124)
+++ /XMLIO_V2/dev/dev_rv/src/XMLIO/context.hpp	(revision 125)
@@ -53,9 +53,22 @@
          }
 
+         static Context* SwapContext(void)
+         {
+            if (Stid.size() == 0)
+            {
+               WARNING("SwapContext impossible car le pile des contextes est vides !");
+               return (NULL);
+            }
+            string lastId = Stid.top (); Stid.pop ();
+            return (Context::GetObject(lastId));
+         }
+
          static Context* GetCurrentContext(void)
          { return (Context::GetObject(Context::GetCurrentContextId())); }
 
-         static void SetCurrentContext(const string& id)
-         {
+         static void SetCurrentContext(const string& id, bool withSwap = false)
+         {
+            if (withSwap) Stid.push (Context::GetCurrentContextId());
+
             // On modifie le context courrant pour tout les ObjectTemplate
             Context::SetContext(id);
@@ -121,6 +134,8 @@
          }
 
+         static string GetRootName(void) { return ("simulation"); }
          static string GetName(void)     { return ("context"); }
-         static string GetRootName(void) { return ("simulation"); }
+         static string GetDefName(void)  { return (Context::GetName()); }
+
 
          virtual bool hasChild(void) const
@@ -185,4 +200,6 @@
       private:
 
+         static stack<string> Stid;
+
          AbstractCalendar* ccalendar;
 
@@ -194,4 +211,7 @@
 
    }; //class Context
+
+   //stack<string> Context::Stid();
+
 }// namespace XMLIOSERVER
 
Index: /XMLIO_V2/dev/dev_rv/src/XMLIO/domain.hpp
===================================================================
--- /XMLIO_V2/dev/dev_rv/src/XMLIO/domain.hpp	(revision 124)
+++ /XMLIO_V2/dev/dev_rv/src/XMLIO/domain.hpp	(revision 125)
@@ -17,4 +17,5 @@
 
          static string GetName(void) {return ("domain"); }
+         static string GetDefName(void) { return (CDomain::GetName()); }
 
          inline void check(void) ;
@@ -26,7 +27,7 @@
    void CDomain::check(void)
    {
-      static bool isChecked = false ;
+      //static bool isChecked = false ;
 
-      if (isChecked) return; // Si la vÃ©rification a Ã©tÃ© faite, on arrÃªte tout.
+      //if (isChecked) return; // Si la vÃ©rification a Ã©tÃ© faite, on arrÃªte tout.
 
       // domaine global
@@ -173,5 +174,5 @@
       }
 
-      isChecked = true ;
+      //isChecked = true ;
    }
 
Index: /XMLIO_V2/dev/dev_rv/src/XMLIO/field.hpp
===================================================================
--- /XMLIO_V2/dev/dev_rv/src/XMLIO/field.hpp	(revision 124)
+++ /XMLIO_V2/dev/dev_rv/src/XMLIO/field.hpp	(revision 125)
@@ -20,4 +20,5 @@
 
          static string GetName(void) { return ("field"); }
+         static string GetDefName(void)  { return (CField::GetName()); }
 
          inline void solveGridRef(void) ;
Index: /XMLIO_V2/dev/dev_rv/src/XMLIO/file.hpp
===================================================================
--- /XMLIO_V2/dev/dev_rv/src/XMLIO/file.hpp	(revision 124)
+++ /XMLIO_V2/dev/dev_rv/src/XMLIO/file.hpp	(revision 125)
@@ -17,4 +17,5 @@
 
          static string GetName(void) { return ("file"); }
+         static string GetDefName(void)  { return (CFile::GetName()); }
 
          virtual void parse (XMLNode& _node)
@@ -92,5 +93,5 @@
          void resolveFieldRefInheritance(void)
          { // RÃ©solution des hÃ©ritages par rÃ©fÃ©rence de chacun des champs contenus dans le fichier.
-            std::vector<CField*> allF; getAllFields(allF);
+            std::vector<CField*> allF; this->getAllFields(allF);
             for (unsigned int i = 0; i < allF.size(); i++) allF[i]->resolveRefInheritance();
          }
@@ -103,17 +104,18 @@
             std::vector<CField*>::iterator it;
 
-            getAllFields(enabledFields);
+            this->getAllFields(enabledFields);
 
             for ( it = enabledFields.begin() ; it != enabledFields.end(); it++ )
-            {
+            { // TODO Jeu avec les itÃ©rateurs un peu bizarre, Ã  modifier.
+              // std::cout << (*it)->field_ref <<std::endl;
                if ((*it)->enabled.hasValue()) // Si l'attribut 'enabled' est dÃ©fini ...
                {
                   if (! ((*it)->enabled))
-                  { enabledFields.erase(it); continue; }
+                  { it--; enabledFields.erase(it+1); continue; }
                }
                else // Si l'attribut 'enabled' n'est pas dÃ©fini ...
                {
                   if (!default_enabled)
-                  { enabledFields.erase(it); continue; }
+                  { it--; enabledFields.erase(it+1); continue; }
                }
 
@@ -121,10 +123,10 @@
                {
                   if ((*it)->level > _outputlevel)
-                  { enabledFields.erase(it); continue; }
+                  { it--; enabledFields.erase(it+1); continue; }
                }
                else // Si l'attribut 'level' n'est pas dÃ©fini ...
                {
                   if (default_level > _outputlevel)
-                  { enabledFields.erase(it); continue; }
+                  { it--; enabledFields.erase(it+1); continue; }
                }
 
Index: /XMLIO_V2/dev/dev_rv/src/XMLIO/grid.hpp
===================================================================
--- /XMLIO_V2/dev/dev_rv/src/XMLIO/grid.hpp	(revision 124)
+++ /XMLIO_V2/dev/dev_rv/src/XMLIO/grid.hpp	(revision 125)
@@ -18,7 +18,13 @@
 
          static string GetName(void) { return ("grid"); }
+         static string GetDefName(void)  { return (CGrid::GetName()); }
 
          const CAxis* getRelAxis(void) const { return (axis); }
          const CDomain* getRelDomain(void) const { return (domain); }
+
+         const Array<int, 1>& getStoreIndex(void) { return (storeIndex); }
+         const Array<int, 1>& getOutIIndex(void) { return (out_i_index); }
+         const Array<int, 1>& getOutJIndex(void) { return (out_j_index); }
+         const Array<int, 1>& getOutLIndex(void) { return (out_l_index); }
 
          inline void solveReference(void) ;
@@ -82,6 +88,10 @@
    {
 
-      static bool isReferenceSolved = false;
-      if (isReferenceSolved) return;
+      /**static bool isReferenceSolved = false;
+      if (isReferenceSolved)
+      {
+         std::cout << "C'est n'importe quoi, A modifierrrrrrrrrrr!!!!!!!!!!!!!!!!!!!!!" << std::endl;
+         return;
+      }*/
 
       // RÃ©solution de chacune des rÃ©fÃ©rences et indexation.
@@ -90,5 +100,5 @@
       computeIndex() ;
 
-      isReferenceSolved = true ;
+      //isReferenceSolved = true ;
    }
 
Index: /XMLIO_V2/dev/dev_rv/src/XMLIO/object_template.hpp
===================================================================
--- /XMLIO_V2/dev/dev_rv/src/XMLIO/object_template.hpp	(revision 124)
+++ /XMLIO_V2/dev/dev_rv/src/XMLIO/object_template.hpp	(revision 125)
@@ -41,5 +41,11 @@
          }
 
-         string getName(void) const {return (T::GetName()); }
+         string getName(void) const
+         {
+            if (hasId())
+               if (T::GetDefName().compare(getId()) == 0)
+                  return T::GetDefName();
+            return (T::GetName());
+         }
 
          T* getBaseObject(void) const { return (baseObject); }
Index: /XMLIO_V2/dev/dev_rv/src/XMLIO/xml_parser.hpp
===================================================================
--- /XMLIO_V2/dev/dev_rv/src/XMLIO/xml_parser.hpp	(revision 124)
+++ /XMLIO_V2/dev/dev_rv/src/XMLIO/xml_parser.hpp	(revision 125)
@@ -37,5 +37,6 @@
                   Context& context = *Context::CreateObject(attributes["id"]);
 
-                  if (attributes.end() != attributes.find("calendar_type") && attributes.end() != attributes.find("start_date"))
+                  if ((attributes.end() != attributes.find("calendar_type")) &&
+                      (attributes.end() != attributes.find("start_date")))
                      context.setCalendar(attributes["calendar_type"], attributes["start_date"]);
 
Index: /XMLIO_V2/dev/dev_rv/src/XMLIO/xmlio.hpp
===================================================================
--- /XMLIO_V2/dev/dev_rv/src/XMLIO/xmlio.hpp	(revision 124)
+++ /XMLIO_V2/dev/dev_rv/src/XMLIO/xmlio.hpp	(revision 125)
@@ -7,8 +7,8 @@
 #include <cmath>
 
-
 // Conteneurs.
 #include <vector>
 #include <set>
+#include <stack>
 
 //Flux.
