Index: /XIOS/dev/dev_olga/arch/arch-X64_IRENE.fcm
===================================================================
--- /XIOS/dev/dev_olga/arch/arch-X64_IRENE.fcm	(revision 1611)
+++ /XIOS/dev/dev_olga/arch/arch-X64_IRENE.fcm	(revision 1612)
@@ -11,5 +11,5 @@
 #%DEV_CFLAGS     -g -traceback
 %DEV_CFLAGS     -g 
-%DEBUG_CFLAGS   -DBZ_DEBUG -g -traceback -fno-inline
+%DEBUG_CFLAGS   -DBZ_DEBUG -g -traceback -fno-inline -D__XIOS_EXCEPTION
 
 %BASE_FFLAGS    -D__NONE__ 
Index: /XIOS/dev/dev_olga/src/array_new.hpp
===================================================================
--- /XIOS/dev/dev_olga/src/array_new.hpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/array_new.hpp	(revision 1612)
@@ -532,4 +532,16 @@
       virtual void fromString(const string& str) { istringstream iss(str); iss >> *this; initialized = true; }
       virtual string toString(void) const { ostringstream oss; oss << *this; return oss.str(); }
+
+      virtual string dump(void) const
+      {
+        ostringstream oss;
+        oss << this->shape()<<" ";
+        if (this->shape().numElements() == 1 && this->shape().dataFirst()[0] == 1)
+          oss << this->dataFirst()[0];
+        else
+          oss << this->dataFirst()[0] <<" ... "<< this->dataFirst()[this->numElements()-1];
+        return oss.str();
+      }
+
       virtual void reset(void) { this->free(); initialized = false; }
       virtual bool isEmpty(void) const { return !initialized; }
Index: /XIOS/dev/dev_olga/src/attribute.hpp
===================================================================
--- /XIOS/dev/dev_olga/src/attribute.hpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/attribute.hpp	(revision 1612)
@@ -41,4 +41,5 @@
             virtual StdString toString(void) const = 0;
             virtual void fromString(const StdString & str) = 0;
+            virtual StdString dump(void) const = 0;
             virtual bool isEqual(const CAttribute& ) = 0;
 
Index: /XIOS/dev/dev_olga/src/attribute_array.hpp
===================================================================
--- /XIOS/dev/dev_olga/src/attribute_array.hpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/attribute_array.hpp	(revision 1612)
@@ -55,4 +55,5 @@
             virtual bool toBuffer  (CBufferOut& buffer) const { return _toBuffer(buffer);}
             virtual bool fromBuffer(CBufferIn& buffer) { return _fromBuffer(buffer); }
+            virtual string dump(void) const { return _dump();}
 
             virtual void generateCInterface(ostream& oss,const string& className) ;
@@ -69,4 +70,5 @@
           CArray<T_numtype, N_rank> inheritedValue ;
           StdString _toString(void) const;
+          StdString _dump(void) const;
           void _fromString(const StdString & str);
           bool _toBuffer  (CBufferOut& buffer) const;
Index: /XIOS/dev/dev_olga/src/attribute_array_impl.hpp
===================================================================
--- /XIOS/dev/dev_olga/src/attribute_array_impl.hpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/attribute_array_impl.hpp	(revision 1612)
@@ -129,4 +129,14 @@
     }
 
+    template <typename T_numtype, int N_rank>
+    StdString CAttributeArray<T_numtype,N_rank>::_dump(void) const
+    {
+      StdOStringStream oss;
+      if (! isEmpty() && this->hasId() && (this->numElements()!=0))
+        oss << this->getName() << "=\"" << CArray<T_numtype, N_rank>::dump() << "\"";
+      return (oss.str());
+    }
+
+
       template <typename T_numtype, int N_rank>
          void CAttributeArray<T_numtype, N_rank>::_fromString(const StdString & str)
Index: /XIOS/dev/dev_olga/src/attribute_enum.hpp
===================================================================
--- /XIOS/dev/dev_olga/src/attribute_enum.hpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/attribute_enum.hpp	(revision 1612)
@@ -14,5 +14,5 @@
 namespace xios
 {
-      /// ////////////////////// Déclarations ////////////////////// ///
+      /// ////////////////////// Declarations ////////////////////// ///
         /*!
         \class CAttributeEnum
@@ -62,4 +62,5 @@
             virtual StdString toString(void) const { return _toString();}
             virtual void fromString(const StdString & str) { if (str==resetInheritanceStr) { reset(); _canInherite=false ;}  else _fromString(str);}
+            virtual StdString dump(void) const { return _toString();}
 
             virtual bool toBuffer  (CBufferOut& buffer) const { return _toBuffer(buffer);} 
Index: /XIOS/dev/dev_olga/src/attribute_map.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/attribute_map.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/attribute_map.cpp	(revision 1612)
@@ -28,4 +28,33 @@
             att.second->reset();
          }
+      }
+
+      ///--------------------------------------------------------------
+      /*!
+         Dump of all non-empty attributes of an object
+      */
+      StdString CAttributeMap::dumpXiosAttributes(void) const
+      {
+        int maxNbChar = 250;
+        StdString str;
+        typedef std::pair<StdString, CAttribute*> StdStrAttPair;
+        auto it = SuperClassMap::begin(), end = SuperClassMap::end();
+        for (; it != end; it++)
+        {
+          const StdStrAttPair& att = *it;
+          if (!att.second->isEmpty())
+          {
+            if (str.length() < maxNbChar)
+            {
+              str.append(att.second->dump());
+              str.append(" ");
+            }
+            else if (str.length() == maxNbChar)
+            {
+              str.append("...");
+            }
+          }
+        }
+        return str;
       }
 
Index: /XIOS/dev/dev_olga/src/attribute_map.hpp
===================================================================
--- /XIOS/dev/dev_olga/src/attribute_map.hpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/attribute_map.hpp	(revision 1612)
@@ -38,4 +38,5 @@
             void duplicateAttributes(const CAttributeMap* const _parent);
             void clearAllAttributes(void);
+            StdString dumpXiosAttributes(void) const;
 
             void clearAttribute(const StdString& key);
Index: /XIOS/dev/dev_olga/src/attribute_template.hpp
===================================================================
--- /XIOS/dev/dev_olga/src/attribute_template.hpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/attribute_template.hpp	(revision 1612)
@@ -74,4 +74,5 @@
 //            virtual void toBinary  (StdOStream & os) const;
 //            virtual void fromBinary(StdIStream & is);
+            virtual StdString dump(void) const { return _dump();}
 
             virtual bool toBuffer  (CBufferOut& buffer) const { return _toBuffer(buffer);}
@@ -98,4 +99,5 @@
           bool isEqual_(const CAttributeTemplate& attr);
           StdString _toString(void) const;
+          StdString _dump(void) const;
           void _fromString(const StdString & str);
           bool _toBuffer  (CBufferOut& buffer) const;
Index: /XIOS/dev/dev_olga/src/attribute_template_impl.hpp
===================================================================
--- /XIOS/dev/dev_olga/src/attribute_template_impl.hpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/attribute_template_impl.hpp	(revision 1612)
@@ -199,4 +199,16 @@
         CType<T>::fromString(str) ;
       }
+
+      //---------------------------------------------------------------
+
+      template <class T>
+         StdString CAttributeTemplate<T>::_dump(void) const
+      {
+         StdOStringStream oss;
+         if (!CType<T>::isEmpty() && this->hasId())
+            oss << this->getName() << "=\"" << CType<T>::dump() << "\"";
+         return (oss.str());
+      }
+
 
       //---------------------------------------------------------------
Index: /XIOS/dev/dev_olga/src/cxios.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/cxios.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/cxios.cpp	(revision 1612)
@@ -20,4 +20,7 @@
   string CXios::serverPrmFile="./xios_server1";
   string CXios::serverSndFile="./xios_server2";
+
+  bool CXios::xiosStack = true;
+  bool CXios::systemStack = false;
 
   bool CXios::isClient ;
@@ -62,4 +65,11 @@
     printLogs2Files=getin<bool>("print_file",false);
 
+    xiosStack=getin<bool>("xios_stack",true) ;
+    systemStack=getin<bool>("system_stack",false) ;
+    if (xiosStack && systemStack)
+    {
+      xiosStack = false;
+    }
+
     StdString bufMemory("memory");
     StdString bufPerformance("performance");
@@ -91,4 +101,5 @@
   */
   void CXios::initClientSide(const string& codeId, MPI_Comm& localComm, MPI_Comm& returnComm)
+  TRY
   {
     initialize() ;
@@ -114,4 +125,5 @@
     }
   }
+  CATCH
 
   void CXios::clientFinalize(void)
Index: /XIOS/dev/dev_olga/src/cxios.hpp
===================================================================
--- /XIOS/dev/dev_olga/src/cxios.hpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/cxios.hpp	(revision 1612)
@@ -33,4 +33,7 @@
      static string serverPrmFile;  //!< Filename template for primary server in case of two server levels
      static string serverSndFile;  //!< Filename template for secondary server in case of two server levels
+
+     static bool xiosStack;    //!< Exception handling
+     static bool systemStack;  //!< Exception handling
 
      static bool isClient ; //!< Check if xios is client
Index: /XIOS/dev/dev_olga/src/data_output.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/data_output.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/data_output.cpp	(revision 1612)
@@ -47,10 +47,13 @@
 
       void CDataOutput::writeGrid(CDomain* domain, CAxis* axis)
+      TRY
       {
          this->writeDomain_(domain);
          this->writeAxis_(axis);
       }
+      CATCH
 
       void CDataOutput::writeGrid(std::vector<CDomain*> domains, std::vector<CAxis*> axis)
+      TRY
       {
         int domSize = domains.size();
@@ -59,6 +62,8 @@
         for (int i = 0; i < aSize; ++i) this->writeAxis_(axis[i]);
       }
+      CATCH
 
       void CDataOutput::writeGrid(std::vector<CDomain*> domains, std::vector<CAxis*> axis, std::vector<CScalar*> scalars)
+      TRY
       {
         int domSize = domains.size();
@@ -69,20 +74,26 @@
         for (int i = 0; i < sSize; ++i) this->writeScalar_(scalars[i]);
       }
+      CATCH
 
       //----------------------------------------------------------------
 
       void CDataOutput::writeGrid(CDomain* domain)
+      TRY
       {
          this->writeDomain_(domain);
       }
+      CATCH
 
       void CDataOutput::writeTimeDimension(void)
+      TRY
       {
          this->writeTimeDimension_();
       }
+      CATCH
 
       //----------------------------------------------------------------
 
       void CDataOutput::writeFieldTimeAxis(CField* field)
+      TRY
       {
          CContext* context = CContext::getCurrent() ;
@@ -91,21 +102,26 @@
          this->writeTimeAxis_(field, calendar);
       }
-      
+      CATCH
+
       void CDataOutput::writeField(CField* field)
+      TRY
       {
          this->writeField_(field);
       }
+      CATCH
 
       //----------------------------------------------------------------
 
       void CDataOutput::writeFieldGrid(CField* field)
+      TRY
       {
          this->writeGrid(field->getRelGrid(),
                          !field->indexed_output.isEmpty() && field->indexed_output);
       }
-
+      CATCH
       //----------------------------------------------------------------
 
       void CDataOutput::writeFieldData(CField* field)
+      TRY
       {
 //         CGrid* grid = CGrid::get(field->grid_ref.getValue());
@@ -113,4 +129,5 @@
          this->writeFieldData_(field);
       }
+      CATCH
 
       ///----------------------------------------------------------------
Index: /XIOS/dev/dev_olga/src/exception.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/exception.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/exception.cpp	(revision 1612)
@@ -5,5 +5,4 @@
 #include "client.hpp"
 #include "server.hpp"
-#include "cxios.hpp"
 #include "log.hpp"
 
@@ -12,50 +11,55 @@
   /// ////////////////////// DÃ©finitions ////////////////////// ///
    CException::CException(void)
-      : CObject(), desc_rethrow(true)
+      : CObject(), desc_rethrow(true), stream()
    { /* Ne rien faire de plus */ }
 
-   CException::CException(const StdString & id)
-      : CObject(id), desc_rethrow(true)
+   CException::CException(const std::string & id)
+      : CObject(id), desc_rethrow(true), stream()
    { /* Ne rien faire de plus */ }
 
    CException::CException(const CException & exception)
-      : std::basic_ios<char>()
-      , CObject(exception.getId())
-      , StdOStringStream()
-      , desc_rethrow(false)
+//      : std::basic_ios<char>()
+       : CObject(exception.getId())
+//      , StdOStringStream()
+//      , desc_rethrow(false)
    { (*this) << exception.str(); }
 
    CException::~CException(void)
    {
-      if (desc_rethrow)
-#ifdef __XIOS_NOABORT
-      {
-        throw (*this);
-      }
-#else
-     {
-      error << this->getMessage() << std::endl;
-      MPI_Abort(CXios::globalComm, -1); //abort();
-      }
-#endif
+//      if (desc_rethrow)
+//#ifdef __XIOS_NOABORT
+//      {
+//        throw (*this);
+//      }
+//#else
+//     {
+//      error << this->getMessage() << std::endl;
+//        throw 4;
+//      MPI_Abort(CXios::globalComm, -1); //abort();
+//      }
+//#endif
    }
 
    //---------------------------------------------------------------
 
-   StdString CException::getMessage(void) const
+   std::string CException::getMessage(void) const
    {
-      StdOStringStream oss;
-      oss << "> Error [" << this->getId() << "] : " << this->str();
-      return (oss.str());
+//     StdOStringStream oss;
+//     oss << "> Error [" << this->getId() << "] : " << this->str();
+//     return (oss.str());
+     return (stream.str());
    }
 
    StdOStringStream &  CException::getStream(void)
-   { return (*boost::polymorphic_cast<StdOStringStream*>(this)); }
+//   { return (*boost::polymorphic_cast<StdOStringStream*>(this)); }
+   { return stream; }
 
-   StdString CException::toString(void) const
-   { return (StdString(this->getMessage())); }
+   std::string CException::toString(void) const
+//   { return (std::string(this->getMessage())); }
+   { return stream.str(); }
 
-   void CException::fromString(const StdString & str)
-   { this->str(str); }
+   void CException::fromString(const std::string & str)
+   { }
+//   { this->str(str); }
 
    //---------------------------------------------------------------
Index: /XIOS/dev/dev_olga/src/exception.hpp
===================================================================
--- /XIOS/dev/dev_olga/src/exception.hpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/exception.hpp	(revision 1612)
@@ -5,8 +5,11 @@
 #include "xios_spl.hpp"
 #include "object.hpp"
+#include <iomanip>
+#include <stdexcept>
 
 namespace xios
 {
    /// ////////////////////// DÃ©clarations ////////////////////// ///
+
    class CException
       : private CObject, public StdOStringStream
@@ -33,8 +36,19 @@
          virtual void fromString(const StdString & str);
 
+         struct StackInfo
+         {
+           StdString file;
+           StdString function;
+           int line;
+           StdString info;
+         };
+
+         std::list<StackInfo> stack;
+
       private :
 
          /// PropriÃ©tÃ©s ///
          bool desc_rethrow; // throw destructor
+         StdOStringStream stream;
 
    }; // CException
@@ -43,6 +57,11 @@
 /// //////////////////////////// Macros //////////////////////////// ///
 
+#define FILE_NAME (std::strrchr("/" __FILE__, '/') + 1)
+
+#define FUNCTION_NAME (StdString(BOOST_CURRENT_FUNCTION).length() > 100 ? \
+                       StdString(BOOST_CURRENT_FUNCTION).substr(0,100).append("...)") : BOOST_CURRENT_FUNCTION)
+
 #define INFO(x) \
-   "In file \'" __FILE__ "\', line " << __LINE__ << " -> " x << std::endl;
+   "In file \""<< FILE_NAME <<"\", function \"" << BOOST_CURRENT_FUNCTION <<"\",  line " << __LINE__ << " -> " x << std::endl;
 
 #ifdef __XIOS_DEBUG
@@ -52,5 +71,91 @@
 #endif
 
-#define ERROR(id, x) xios::CException(id).getStream() << INFO(x)
+#define ERROR(id, x)  \
+{                     \
+       xios::CException exc(id);                \
+       exc.getStream() << INFO(x);              \
+       error << exc.getMessage() << std::endl;  \
+       throw exc;                               \
+}
+
+#ifdef __XIOS_EXCEPTION
+  #define TRY                          \
+    {                                  \
+      int funcFirstLine = __LINE__;    \
+      try
+  #define CATCH                              \
+      catch(CException& e)                   \
+      {                                      \
+        CException::StackInfo stk;           \
+        stk.file = FILE_NAME;                \
+        stk.function = FUNCTION_NAME;        \
+        stk.line = funcFirstLine;            \
+        e.stack.push_back(stk);              \
+        if (CXios::xiosStack)                \
+          throw;                             \
+       else                                  \
+         throw 0;                            \
+      }                                      \
+    }
+  #define CATCH_DUMP_ATTR                    \
+      catch(CException& e)                   \
+      {                                      \
+        CException::StackInfo stk;           \
+        stk.info.append(StdString("Object id=\"" + this->getId()) + "\" object type=\"" + this->getName() + "\"\n"); \
+        stk.info.append("*** XIOS attributes as defined in XML file(s) or via Fortran interface:\n");                \
+        stk.info.append("[" + this->dumpXiosAttributes() + "]\n");     \
+        stk.info.append("*** Additional information:\n");              \
+        stk.info.append("[" + this->dumpClassAttributes() + "]\n");    \
+        stk.file = FILE_NAME;                \
+        stk.function = FUNCTION_NAME;        \
+        stk.line = funcFirstLine;            \
+        e.stack.push_back(stk);              \
+        if (CXios::xiosStack)                \
+          throw;                             \
+       else                                  \
+         throw 0;                            \
+      }                                      \
+    }
+  #define CATCH_DUMP_STACK                                           \
+      catch(CException& e)                                           \
+      {                                                              \
+        CException::StackInfo stk;                                   \
+        int i = 1;                                                   \
+        stk.file = FILE_NAME;                                        \
+        stk.function = FUNCTION_NAME;                                \
+        stk.line = funcFirstLine;                                    \
+        e.stack.push_back(stk);                                      \
+        for (auto itr = e.stack.crbegin(); itr!=e.stack.crend(); ++itr) \
+        {                                                            \
+          error << "("<< i <<") **************** ";                  \
+          error << itr->function << std::endl;                       \
+          error << itr->info << std::endl;                           \
+          ++i;                                                       \
+        }                                                            \
+        error << left << "      ";                                   \
+        error << left << std::setw(40) << "File " ;                  \
+        error << left << std::setw(106) << "Function " ;             \
+        error << std::setw(5)   << "Line " << std::endl;             \
+        i = e.stack.size();                                          \
+        for (auto itr = e.stack.begin(); itr!=e.stack.end(); itr++)  \
+        {                                                            \
+          StdOStringStream tmp;                                      \
+          tmp <<  "("<< i <<")";                                     \
+          error << left << std::setw(6) << tmp.str();                \
+          error << left << std::setw(40)  << itr->file;              \
+          error << left << std::setw(106) << itr->function;          \
+          error << left << std::setw(5)   << itr->line << std::endl; \
+          --i;                                                       \
+        }                                                            \
+        throw;                                                       \
+      }                                                              \
+    }
+#else
+  #define TRY
+  #define CATCH
+  #define CATCH_DUMP_ATTR
+  #define CATCH_DUMP_STACK
+#endif
 
 #endif // __XIOS_CException__
+
Index: /XIOS/dev/dev_olga/src/interface/c/icaxis.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/interface/c/icaxis.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/interface/c/icaxis.cpp	(revision 1612)
@@ -28,4 +28,5 @@
    
    void cxios_axis_handle_create (XAxisPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id; 
@@ -35,6 +36,8 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
    
    void cxios_axisgroup_handle_create (XAxisGroupPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id; 
@@ -44,8 +47,10 @@
       CTimer::get("XIOS").suspend() ;
     }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
 
    void cxios_axis_valid_id (bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -56,6 +61,8 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    void cxios_axisgroup_valid_id (bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -67,4 +74,5 @@
 
    }
+   CATCH_DUMP_STACK
    
 } // extern "C"
Index: /XIOS/dev/dev_olga/src/interface/c/iccalendar.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/interface/c/iccalendar.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/interface/c/iccalendar.cpp	(revision 1612)
@@ -10,4 +10,5 @@
 {
   void cxios_update_calendar(int step)
+  TRY
   {
     CTimer::get("XIOS").resume();
@@ -19,6 +20,8 @@
     CTimer::get("XIOS").suspend();
   }
+  CATCH_DUMP_STACK
 
   void cxios_get_current_date(cxios_date* current_date_c)
+  TRY
   {
     CTimer::get("XIOS").resume();
@@ -37,6 +40,8 @@
     CTimer::get("XIOS").suspend();
   }
+  CATCH_DUMP_STACK
 
   int cxios_get_year_length_in_seconds(int year)
+  TRY
   {
     CTimer::get("XIOS").resume();
@@ -50,6 +55,8 @@
     return length;
   }
+  CATCH_DUMP_STACK
 
   int cxios_get_day_length_in_seconds()
+  TRY
   {
     CTimer::get("XIOS").resume();
@@ -63,3 +70,4 @@
     return length;
   }
+  CATCH_DUMP_STACK
 }
Index: /XIOS/dev/dev_olga/src/interface/c/iccalendar_wrapper.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/interface/c/iccalendar_wrapper.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/interface/c/iccalendar_wrapper.cpp	(revision 1612)
@@ -29,4 +29,5 @@
 
   void cxios_calendar_wrapper_handle_create(XCalendarWrapperPtr* _ret, const char* _id, int _id_len)
+  TRY
   {
     std::string id;
@@ -36,6 +37,8 @@
     CTimer::get("XIOS").suspend();
   }
+  CATCH_DUMP_STACK
 
   void cxios_get_current_calendar_wrapper(XCalendarWrapperPtr* _ret)
+  TRY
   {
     CTimer::get("XIOS").resume();
@@ -43,8 +46,10 @@
     CTimer::get("XIOS").suspend();
   }
+  CATCH_DUMP_STACK
 
   // -------------------- VÃ©rification des identifiants -----------------------
 
   void cxios_calendar_wrapper_valid_id(bool* _ret, const char* _id, int _id_len)
+  TRY
   {
     std::string id;
@@ -54,8 +59,10 @@
     CTimer::get("XIOS").suspend();
   }
+  CATCH_DUMP_STACK
 
   // ----------------------- Custom getters and setters -----------------------
 
   void cxios_set_calendar_wrapper_date_start_date(XCalendarWrapperPtr calendarWrapper_hdl, cxios_date start_date_c)
+  TRY
   {
     CTimer::get("XIOS").resume();
@@ -70,6 +77,8 @@
     CTimer::get("XIOS").suspend();
   }
+  CATCH_DUMP_STACK
 
   void cxios_get_calendar_wrapper_date_start_date(XCalendarWrapperPtr calendarWrapper_hdl, cxios_date* start_date_c)
+  TRY
   {
     CTimer::get("XIOS").resume();
@@ -83,6 +92,8 @@
     CTimer::get("XIOS").suspend();
   }
+  CATCH_DUMP_STACK
 
   void cxios_set_calendar_wrapper_date_time_origin(XCalendarWrapperPtr calendarWrapper_hdl, cxios_date time_origin_c)
+  TRY
   {
     CTimer::get("XIOS").resume();
@@ -97,6 +108,8 @@
     CTimer::get("XIOS").suspend();
   }
+  CATCH_DUMP_STACK
 
   void cxios_get_calendar_wrapper_date_time_origin(XCalendarWrapperPtr calendarWrapper_hdl, cxios_date* time_origin_c)
+  TRY
   {
     CTimer::get("XIOS").resume();
@@ -110,8 +123,10 @@
     CTimer::get("XIOS").suspend();
   }
+  CATCH_DUMP_STACK
 
   // ----------------------- Calendar creation and update ----------------------
 
   void cxios_create_calendar(XCalendarWrapperPtr calendarWrapper_hdl)
+  TRY
   {
     CTimer::get("XIOS").resume();
@@ -119,6 +134,8 @@
     CTimer::get("XIOS").suspend();
   }
+  CATCH_DUMP_STACK
 
   void cxios_update_calendar_timestep(XCalendarWrapperPtr calendarWrapper_hdl)
+  TRY
   {
     CTimer::get("XIOS").resume();
@@ -126,3 +143,4 @@
     CTimer::get("XIOS").suspend();
   }
+  CATCH_DUMP_STACK
 } // extern "C"
Index: /XIOS/dev/dev_olga/src/interface/c/iccompute_connectivity_domain.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/interface/c/iccompute_connectivity_domain.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/interface/c/iccompute_connectivity_domain.cpp	(revision 1612)
@@ -25,4 +25,5 @@
    // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_compute_connectivity_domain_handle_create(XComConDomainPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -32,7 +33,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_compute_connectivity_domain_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -43,3 +46,4 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 } // extern "C"
Index: /XIOS/dev/dev_olga/src/interface/c/iccontext.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/interface/c/iccontext.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/interface/c/iccontext.cpp	(revision 1612)
@@ -32,4 +32,5 @@
 
    void cxios_context_handle_create (XContextPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -54,8 +55,10 @@
       // Lever une exeception ici
    }
+   CATCH_DUMP_STACK
 
    // ------------------------ Changements de contextes ------------------------
 
    void cxios_context_get_current(XContextPtr* context)
+   TRY
    {
       CTimer::get("XIOS").resume();
@@ -63,6 +66,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_context_set_current(XContextPtr context, bool withswap)
+   TRY
    {
       CTimer::get("XIOS").resume() ;
@@ -70,8 +75,10 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
 
    void cxios_context_valid_id (bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -93,3 +100,4 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 } // extern "C"
Index: /XIOS/dev/dev_olga/src/interface/c/icdata.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/interface/c/icdata.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/interface/c/icdata.cpp	(revision 1612)
@@ -43,14 +43,19 @@
    // it is only used from the parse_xml.exe standalone test tool.
    void cxios_init(void)
+   TRY
    {
      CXios::initialize();
    }
+   CATCH_DUMP_STACK
 
    void cxios_init_server(void)
+   TRY
    {
      CXios::initServerSide();
    }
+   CATCH_DUMP_STACK
 
    void cxios_init_client(const char* client_id , int len_client_id, MPI_Fint* f_local_comm, MPI_Fint* f_return_comm )
+   TRY
    {
       std::string str;
@@ -69,6 +74,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_context_initialize(const char* context_id , int len_context_id, MPI_Fint* f_comm)
+   TRY
    {
      std::string str;
@@ -83,6 +90,8 @@
      CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_oasis_enddef()
+   TRY
    {
      CTimer::get("XIOS").resume();
@@ -90,6 +99,8 @@
      CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_context_is_initialized(const char* context_id , int len_context_id, bool* initialized)
+   TRY
    {
      std::string str;
@@ -101,6 +112,8 @@
      CTimer::get("XIOS").suspend();
    }
-
-    void cxios_context_close_definition()
+   CATCH_DUMP_STACK
+
+   void cxios_context_close_definition()
+   TRY
    {
      CTimer::get("XIOS").resume();
@@ -111,6 +124,8 @@
      CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_context_finalize()
+   TRY
    {
      CTimer::get("XIOS").resume();
@@ -121,6 +136,8 @@
      CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_finalize()
+   TRY
    {
      CTimer::get("XIOS").resume();
@@ -128,6 +145,8 @@
      CXios::clientFinalize();
    }
+   CATCH_DUMP_STACK
 
    void cxios_solve_inheritance()
+   TRY
    {
      CTimer::get("XIOS").resume();
@@ -136,4 +155,5 @@
      CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    /*! \brief This group of functions retrieve variable information from the configuration file (.xml)
@@ -148,4 +168,5 @@
    */
    void cxios_get_variable_data_k8(const char* varId, int varIdSize, double* data, bool* isVarExisted)
+   TRY
    {
       std::string varIdStr;
@@ -166,6 +187,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_get_variable_data_k4(const char* varId, int varIdSize, float* data, bool* isVarExisted)
+   TRY
    {
       std::string varIdStr;
@@ -186,6 +209,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_get_variable_data_int(const char* varId, int varIdSize, int* data, bool* isVarExisted)
+   TRY
    {
       std::string varIdStr;
@@ -206,6 +231,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_get_variable_data_logic(const char* varId, int varIdSize, bool* data, bool* isVarExisted)
+   TRY
    {
       std::string varIdStr;
@@ -226,6 +253,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_get_variable_data_char(const char* varId, int varIdSize, char* data, int dataSizeIn, bool* isVarExisted)
+   TRY
    {
       std::string varIdStr;
@@ -247,4 +276,5 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    /*! \brief This group of functions write information into existing variable in the configuration file (.xml)
@@ -259,5 +289,6 @@
    */
    void cxios_set_variable_data_k8(const char* varId, int varIdSize, double data, bool* isVarExisted)
-   {
+   TRY
+  {
       std::string varIdStr;
       if (!cstr2string(varId, varIdSize, varIdStr)) return;
@@ -278,6 +309,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_set_variable_data_k4(const char* varId, int varIdSize, float data, bool* isVarExisted)
+   TRY
    {
       std::string varIdStr;
@@ -299,6 +332,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_set_variable_data_int(const char* varId, int varIdSize, int data, bool* isVarExisted)
+   TRY
    {
       std::string varIdStr;
@@ -321,6 +356,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_set_variable_data_logic(const char* varId, int varIdSize, bool data, bool* isVarExisted)
+   TRY
    {
       std::string varIdStr;
@@ -342,7 +379,9 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_set_variable_data_char(const char* varId, int varIdSize, const char* data, int dataSizeIn, bool* isVarExisted)
-   {
+   TRY
+  {
       std::string varIdStr, dataStr;
       if (!cstr2string(varId, varIdSize, varIdStr)) return;
@@ -368,9 +407,10 @@
       CTimer::get("XIOS").suspend();
    }
-
+   CATCH_DUMP_STACK
 
    // ---------------------- Ecriture des donnÃ©es ------------------------------
 
    void cxios_write_data_k80(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize)
+   TRY
    {
       std::string fieldid_str;
@@ -387,6 +427,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_write_data_k81(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize)
+   TRY
    {
       std::string fieldid_str;
@@ -406,6 +448,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_write_data_k82(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize, int data_Ysize)
+   TRY
    {
       std::string fieldid_str;
@@ -425,6 +469,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_write_data_k83(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize, int data_Ysize, int data_Zsize)
+   TRY
    {
       std::string fieldid_str;
@@ -444,6 +490,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_write_data_k84(const char* fieldid, int fieldid_size, double* data_k8, int data_0size, int data_1size, int data_2size, int data_3size)
+   TRY
    {
       std::string fieldid_str;
@@ -463,8 +511,10 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_write_data_k85(const char* fieldid, int fieldid_size, double* data_k8,
                              int data_0size, int data_1size, int data_2size,
                              int data_3size, int data_4size)
+   TRY
    {
       std::string fieldid_str;
@@ -484,8 +534,10 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_write_data_k86(const char* fieldid, int fieldid_size, double* data_k8,
                              int data_0size, int data_1size, int data_2size,
                              int data_3size, int data_4size, int data_5size)
+   TRY
    {
       std::string fieldid_str;
@@ -505,4 +557,5 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_write_data_k87(const char* fieldid, int fieldid_size, double* data_k8,
@@ -510,4 +563,5 @@
                              int data_3size, int data_4size, int data_5size,
                              int data_6size)
+   TRY
    {
       std::string fieldid_str;
@@ -527,6 +581,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_write_data_k40(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize)
+   TRY
    {
       std::string fieldid_str;
@@ -546,6 +602,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_write_data_k41(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize)
+   TRY
    {
       std::string fieldid_str;
@@ -567,6 +625,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_write_data_k42(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize, int data_Ysize)
+   TRY
    {
       std::string fieldid_str;
@@ -588,6 +648,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_write_data_k43(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize, int data_Ysize, int data_Zsize)
+   TRY
    {
       std::string fieldid_str;
@@ -609,8 +671,10 @@
       CTimer::get("XIOS").suspend();
     }
+   CATCH_DUMP_STACK
 
    void cxios_write_data_k44(const char* fieldid, int fieldid_size, float* data_k4,
                              int data_0size, int data_1size, int data_2size,
                              int data_3size)
+   TRY
    {
       std::string fieldid_str;
@@ -632,8 +696,10 @@
       CTimer::get("XIOS").suspend();
     }
+   CATCH_DUMP_STACK
 
    void cxios_write_data_k45(const char* fieldid, int fieldid_size, float* data_k4,
                              int data_0size, int data_1size, int data_2size,
                              int data_3size, int data_4size)
+   TRY
    {
       std::string fieldid_str;
@@ -655,8 +721,10 @@
       CTimer::get("XIOS").suspend();
     }
+   CATCH_DUMP_STACK
 
    void cxios_write_data_k46(const char* fieldid, int fieldid_size, float* data_k4,
                              int data_0size, int data_1size, int data_2size,
                              int data_3size, int data_4size, int data_5size)
+   TRY
    {
       std::string fieldid_str;
@@ -678,4 +746,5 @@
       CTimer::get("XIOS").suspend();
     }
+   CATCH_DUMP_STACK
 
    void cxios_write_data_k47(const char* fieldid, int fieldid_size, float* data_k4,
@@ -683,4 +752,5 @@
                              int data_3size, int data_4size, int data_5size,
                              int data_6size)
+   TRY
    {
       std::string fieldid_str;
@@ -702,8 +772,10 @@
       CTimer::get("XIOS").suspend();
     }
+   CATCH_DUMP_STACK
 
    // ---------------------- Lecture des donnÃ©es ------------------------------
 
    void cxios_read_data_k80(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize)
+   TRY
    {
       std::string fieldid_str;
@@ -723,6 +795,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_read_data_k81(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize)
+   TRY
    {
       std::string fieldid_str;
@@ -742,6 +816,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_read_data_k82(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize, int data_Ysize)
+   TRY
    {
       std::string fieldid_str;
@@ -761,6 +837,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_read_data_k83(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize, int data_Ysize, int data_Zsize)
+   TRY
    {
       std::string fieldid_str;
@@ -780,8 +858,10 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_read_data_k84(const char* fieldid, int fieldid_size, double* data_k8,
                             int data_0size, int data_1size, int data_2size,
                             int data_3size)
+   TRY
    {
       std::string fieldid_str;
@@ -801,8 +881,10 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_read_data_k85(const char* fieldid, int fieldid_size, double* data_k8,
                             int data_0size, int data_1size, int data_2size,
                             int data_3size, int data_4size)
+   TRY
    {
       std::string fieldid_str;
@@ -822,8 +904,10 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_read_data_k86(const char* fieldid, int fieldid_size, double* data_k8,
                             int data_0size, int data_1size, int data_2size,
                             int data_3size, int data_4size, int data_5size)
+   TRY
    {
       std::string fieldid_str;
@@ -843,4 +927,5 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_read_data_k87(const char* fieldid, int fieldid_size, double* data_k8,
@@ -848,4 +933,5 @@
                             int data_3size, int data_4size, int data_5size,
                             int data_6size)
+   TRY
    {
       std::string fieldid_str;
@@ -865,6 +951,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_read_data_k40(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize)
+   TRY
    {
       std::string fieldid_str;
@@ -886,6 +974,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_read_data_k41(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize)
+   TRY
    {
       std::string fieldid_str;
@@ -907,6 +997,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_read_data_k42(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize, int data_Ysize)
+   TRY
    {
       std::string fieldid_str;
@@ -928,6 +1020,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_read_data_k43(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize, int data_Ysize, int data_Zsize)
+   TRY
    {
       std::string fieldid_str;
@@ -949,8 +1043,10 @@
       CTimer::get("XIOS").suspend();
     }
+   CATCH_DUMP_STACK
 
    void cxios_read_data_k44(const char* fieldid, int fieldid_size, float* data_k4,
                             int data_0size, int data_1size, int data_2size,
                             int data_3size)
+   TRY
    {
       std::string fieldid_str;
@@ -972,8 +1068,10 @@
       CTimer::get("XIOS").suspend();
     }
+   CATCH_DUMP_STACK
 
    void cxios_read_data_k45(const char* fieldid, int fieldid_size, float* data_k4,
                             int data_0size, int data_1size, int data_2size,
                             int data_3size, int data_4size)
+   TRY
    {
       std::string fieldid_str;
@@ -995,8 +1093,10 @@
       CTimer::get("XIOS").suspend();
     }
+   CATCH_DUMP_STACK
 
    void cxios_read_data_k46(const char* fieldid, int fieldid_size, float* data_k4,
                             int data_0size, int data_1size, int data_2size,
                             int data_3size, int data_4size, int data_5size)
+   TRY
    {
       std::string fieldid_str;
@@ -1018,4 +1118,5 @@
       CTimer::get("XIOS").suspend();
     }
+   CATCH_DUMP_STACK
 
    void cxios_read_data_k47(const char* fieldid, int fieldid_size, float* data_k4,
@@ -1023,4 +1124,5 @@
                             int data_3size, int data_4size, int data_5size,
                             int data_6size)
+   TRY
    {
       std::string fieldid_str;
@@ -1042,3 +1144,4 @@
       CTimer::get("XIOS").suspend();
     }
+   CATCH_DUMP_STACK
 } // extern "C"
Index: /XIOS/dev/dev_olga/src/interface/c/icdate.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/interface/c/icdate.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/interface/c/icdate.cpp	(revision 1612)
@@ -35,4 +35,5 @@
 {
   long long int cxios_date_convert_to_seconds(cxios_date date_c)
+  TRY
   {
     xios::CDate date = xios::CDate(getCalendar("long long int cxios_date_convert_to_seconds(cxios_date date_c)"),
@@ -41,6 +42,8 @@
     return date;
   }
+  CATCH_DUMP_STACK
 
   void cxios_date_convert_to_string(cxios_date date_c, char* str, int str_size)
+  TRY
   {
     xios::CDate date = xios::CDate(getCalendar("void cxios_date_convert_to_string(cxios_date date_c, char* str, int str_size)"),
@@ -51,6 +54,8 @@
       ERROR("void cxios_date_convert_to_string(cxios_date date_c, char* str, int str_size)", << "Input string is too short");
   }
+  CATCH_DUMP_STACK
 
   cxios_date cxios_date_convert_from_string(const char* str, int str_size)
+  TRY
   {
     std::string date_str;
@@ -63,6 +68,8 @@
     return { date.getYear(), date.getMonth(), date.getDay(), date.getHour(), date.getMinute(), date.getSecond() };
   }
+  CATCH_DUMP_STACK
 
   cxios_date cxios_date_add_duration(cxios_date date_c, cxios_duration dur_c)
+  TRY
   {
     xios::CDate date = xios::CDate(getCalendar("cxios_date cxios_date_add_duration(cxios_date date_c, cxios_duration dur_c)"),
@@ -73,6 +80,8 @@
     return { res.getYear(), res.getMonth(), res.getDay(), res.getHour(), res.getMinute(), res.getSecond() };
   }
+  CATCH_DUMP_STACK
 
   cxios_date cxios_date_sub_duration(cxios_date date_c, cxios_duration dur_c)
+  TRY
   {
     xios::CDate date = xios::CDate(getCalendar("cxios_date cxios_date_sub_duration(cxios_date date_c, cxios_duration dur_c)"),
@@ -84,6 +93,8 @@
     return { res.getYear(), res.getMonth(), res.getDay(), res.getHour(), res.getMinute(), res.getSecond() };
   }
+  CATCH_DUMP_STACK
 
   cxios_duration cxios_date_sub(cxios_date date1_c, cxios_date date2_c)
+  TRY
   {
     xios::CDate date1 = xios::CDate(getCalendar("cxios_duration cxios_date_sub(cxios_date date1_c, cxios_date date2_c)"),
@@ -96,6 +107,8 @@
     return { res.year, res.month, res.day, res.hour, res.minute, res.second, res.timestep };
   }
+  CATCH_DUMP_STACK
 
   bool cxios_date_eq(cxios_date date1_c, cxios_date date2_c)
+  TRY
   {
     xios::CDate date1 = xios::CDate(getCalendar("bool cxios_date_eq(cxios_date date1_c, cxios_date date2_c)"),
@@ -107,6 +120,8 @@
     return (date1 == date2);
   }
+  CATCH_DUMP_STACK
 
   bool cxios_date_neq(cxios_date date1_c, cxios_date date2_c)
+  TRY
   {
     xios::CDate date1 = xios::CDate(getCalendar("bool cxios_date_eq(cxios_date date1_c, cxios_date date2_c)"),
@@ -118,6 +133,8 @@
     return (date1 != date2);
   }
+  CATCH_DUMP_STACK
 
   bool cxios_date_lt(cxios_date date1_c, cxios_date date2_c)
+  TRY
   {
     xios::CDate date1 = xios::CDate(getCalendar("bool cxios_date_eq(cxios_date date1_c, cxios_date date2_c)"),
@@ -129,6 +146,8 @@
     return (date1 < date2);
   }
+  CATCH_DUMP_STACK
 
   bool cxios_date_le(cxios_date date1_c, cxios_date date2_c)
+  TRY
   {
     xios::CDate date1 = xios::CDate(getCalendar("bool cxios_date_eq(cxios_date date1_c, cxios_date date2_c)"),
@@ -140,6 +159,8 @@
     return (date1 <= date2);
   }
+  CATCH_DUMP_STACK
 
   bool cxios_date_gt(cxios_date date1_c, cxios_date date2_c)
+  TRY
   {
     xios::CDate date1 = xios::CDate(getCalendar("bool cxios_date_eq(cxios_date date1_c, cxios_date date2_c)"),
@@ -151,6 +172,8 @@
     return (date1 > date2);
   }
+  CATCH_DUMP_STACK
 
   bool cxios_date_ge(cxios_date date1_c, cxios_date date2_c)
+  TRY
   {
     xios::CDate date1 = xios::CDate(getCalendar("bool cxios_date_eq(cxios_date date1_c, cxios_date date2_c)"),
@@ -162,6 +185,8 @@
     return (date1 >= date2);
   }
+  CATCH_DUMP_STACK
 
   int cxios_date_get_second_of_year(cxios_date date_c)
+  TRY
   {
     xios::CDate date = xios::CDate(getCalendar("int cxios_date_get_second_of_year(cxios_date date_c)"),
@@ -170,6 +195,8 @@
     return date.getSecondOfYear();
   }
+  CATCH_DUMP_STACK
 
   double cxios_date_get_day_of_year(cxios_date date_c)
+  TRY
   {
     xios::CDate date = xios::CDate(getCalendar("int cxios_date_get_day_of_year(cxios_date date_c)"),
@@ -178,6 +205,8 @@
     return date.getDayOfYear();
   }
+  CATCH_DUMP_STACK
 
   double cxios_date_get_fraction_of_year(cxios_date date_c)
+  TRY
   {
     xios::CDate date = xios::CDate(getCalendar("int cxios_date_get_fraction_of_year(cxios_date date_c)"),
@@ -186,6 +215,8 @@
     return date.getFractionOfYear();
   }
+  CATCH_DUMP_STACK
 
   int cxios_date_get_second_of_day(cxios_date date_c)
+  TRY
   {
     xios::CDate date = xios::CDate(getCalendar("int cxios_date_get_second_of_day(cxios_date date_c)"),
@@ -194,6 +225,8 @@
     return date.getSecondOfDay();
   }
+  CATCH_DUMP_STACK
 
   double cxios_date_get_fraction_of_day(cxios_date date_c)
+  TRY
   {
     xios::CDate date = xios::CDate(getCalendar("int cxios_date_get_fraction_of_day(cxios_date date_c)"),
@@ -202,3 +235,4 @@
     return date.getFractionOfDay();
   }
+  CATCH_DUMP_STACK
 } // extern "C"
Index: /XIOS/dev/dev_olga/src/interface/c/icdomain.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/interface/c/icdomain.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/interface/c/icdomain.cpp	(revision 1612)
@@ -29,4 +29,5 @@
    
    void cxios_domain_handle_create (XDomainPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id; 
@@ -36,6 +37,8 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
    
    void cxios_domaingroup_handle_create (XDomainGroupPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id; 
@@ -46,8 +49,10 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
 
    void cxios_domain_valid_id (bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -58,6 +63,8 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    void cxios_domaingroup_valid_id (bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -67,3 +74,4 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 } // extern "C"
Index: /XIOS/dev/dev_olga/src/interface/c/icduplicate_scalar_to_axis.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/interface/c/icduplicate_scalar_to_axis.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/interface/c/icduplicate_scalar_to_axis.cpp	(revision 1612)
@@ -26,4 +26,5 @@
    // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_duplicate_scalar_to_axis_handle_create(XDuplicateScalarToAxisPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -33,7 +34,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_duplicate_scalar_to_axis_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -44,4 +47,5 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
 } // extern "C"
Index: /XIOS/dev/dev_olga/src/interface/c/icduration.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/interface/c/icduration.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/interface/c/icduration.cpp	(revision 1612)
@@ -1,2 +1,4 @@
+#include "xios.hpp"
+
 #include "icutil.hpp"
 #include "icdate.hpp"
@@ -6,4 +8,5 @@
 {
   void cxios_duration_convert_to_string(cxios_duration dur_c, char* str, int str_size)
+  TRY
   {
     xios::CDuration dur( dur_c.year, dur_c.month, dur_c.day, dur_c.hour, dur_c.minute, dur_c.second, dur_c.timestep );
@@ -12,6 +15,8 @@
       ERROR("void cxios_duration_convert_to_string(cxios_duration dur_c, char* str, int str_size)", << "Input string is too short");
   }
+  CATCH_DUMP_STACK
 
   cxios_duration cxios_duration_convert_from_string(const char* str, int str_size)
+  TRY
   {
     std::string dur_str;
@@ -23,6 +28,8 @@
     return { dur.year, dur.month, dur.day, dur.hour, dur.minute, dur.second, dur.timestep };
   }
+  CATCH_DUMP_STACK
 
   cxios_duration cxios_duration_add(cxios_duration dur1_c, cxios_duration dur2_c)
+  TRY
   {
     xios::CDuration dur1( dur1_c.year, dur1_c.month, dur1_c.day, dur1_c.hour, dur1_c.minute, dur1_c.second, dur1_c.timestep );
@@ -32,6 +39,8 @@
     return { res.year, res.month, res.day, res.hour, res.minute, res.second, res.timestep };
   }
+  CATCH_DUMP_STACK
 
   cxios_duration cxios_duration_sub(cxios_duration dur1_c, cxios_duration dur2_c)
+  TRY
   {
     xios::CDuration dur1( dur1_c.year, dur1_c.month, dur1_c.day, dur1_c.hour, dur1_c.minute, dur1_c.second, dur1_c.timestep );
@@ -41,6 +50,8 @@
     return { res.year, res.month, res.day, res.hour, res.minute, res.second, res.timestep };
   }
+  CATCH_DUMP_STACK
 
   cxios_duration cxios_duration_mult(double val, cxios_duration dur_c)
+  TRY
   {
     xios::CDuration dur( dur_c.year, dur_c.month, dur_c.day, dur_c.hour, dur_c.minute, dur_c.second, dur_c.timestep );
@@ -48,6 +59,8 @@
     return { res.year, res.month, res.day, res.hour, res.minute, res.second, res.timestep };
   }
+  CATCH_DUMP_STACK
 
   cxios_duration cxios_duration_neg(cxios_duration dur_c)
+  TRY
   {
     xios::CDuration dur( dur_c.year, dur_c.month, dur_c.day, dur_c.hour, dur_c.minute, dur_c.second, dur_c.timestep );
@@ -55,6 +68,8 @@
     return { res.year, res.month, res.day, res.hour, res.minute, res.second, res.timestep };
   }
+  CATCH_DUMP_STACK
 
   bool cxios_duration_eq(cxios_duration dur1_c, cxios_duration dur2_c)
+  TRY
   {
     xios::CDuration dur1( dur1_c.year, dur1_c.month, dur1_c.day, dur1_c.hour, dur1_c.minute, dur1_c.second, dur1_c.timestep );
@@ -62,6 +77,8 @@
     return (dur1 == dur2);
   }
+  CATCH_DUMP_STACK
 
   bool cxios_duration_neq(cxios_duration dur1_c, cxios_duration dur2_c)
+  TRY
   {
     xios::CDuration dur1( dur1_c.year, dur1_c.month, dur1_c.day, dur1_c.hour, dur1_c.minute, dur1_c.second, dur1_c.timestep );
@@ -69,3 +86,4 @@
     return (dur1 != dur2);
   }
+  CATCH_DUMP_STACK
 }
Index: /XIOS/dev/dev_olga/src/interface/c/icexpand_domain.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/interface/c/icexpand_domain.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/interface/c/icexpand_domain.cpp	(revision 1612)
@@ -27,4 +27,5 @@
    // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_expand_domain_handle_create(XExpandDomainPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -34,7 +35,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_expand_domain_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -45,3 +48,4 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 } // extern "C"
Index: /XIOS/dev/dev_olga/src/interface/c/icextract_to_axis.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/interface/c/icextract_to_axis.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/interface/c/icextract_to_axis.cpp	(revision 1612)
@@ -26,4 +26,5 @@
    // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_extract_domain_to_axis_handle_create(XExtractDomainToAxisPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -33,7 +34,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_extract_domain_to_axis_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -44,4 +47,5 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
 } // extern "C"
Index: /XIOS/dev/dev_olga/src/interface/c/icextract_to_scalar.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/interface/c/icextract_to_scalar.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/interface/c/icextract_to_scalar.cpp	(revision 1612)
@@ -26,4 +26,5 @@
    // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_extract_axis_to_scalar_handle_create(XExtractAxisToScalarPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -33,7 +34,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_extract_axis_to_scalar_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -44,4 +47,5 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
 } // extern "C"
Index: /XIOS/dev/dev_olga/src/interface/c/icfield.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/interface/c/icfield.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/interface/c/icfield.cpp	(revision 1612)
@@ -35,4 +35,5 @@
    
    void cxios_field_handle_create (XFieldPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id; 
@@ -42,6 +43,8 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
    
    void cxios_fieldgroup_handle_create (XFieldGroupPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id; 
@@ -51,9 +54,10 @@
       CTimer::get("XIOS").suspend() ;
    }
-
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
 
    void cxios_field_valid_id (bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -63,6 +67,8 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    void cxios_fieldgroup_valid_id (bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -72,4 +78,5 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
 // -----------------------------------------------------------------------------------------------------   
@@ -78,4 +85,5 @@
 
   void cxios_field_is_active (XFieldPtr field_hdl, bool at_current_timestep, bool* ret)
+  TRY
   {
     CTimer::get("XIOS").resume() ;
@@ -83,4 +91,5 @@
     CTimer::get("XIOS").suspend() ;
   }
+  CATCH_DUMP_STACK
 
 // -----------------------------------------------------------------------------------------------------
@@ -88,4 +97,5 @@
 // -----------------------------------------------------------------------------------------------------
   void cxios_field_get_domain_handle(XDomainPtr * domain_hdl_ret, XFieldPtr field_hdl, int domainIndex)
+  TRY
   {
      CTimer::get("XIOS").resume() ;
@@ -93,6 +103,8 @@
      CTimer::get("XIOS").suspend();
   }
+  CATCH_DUMP_STACK
 
   void cxios_field_get_axis_handle(XAxisPtr * axis_hdl_ret, XFieldPtr field_hdl, int axisIndex)
+  TRY
   {
      CTimer::get("XIOS").resume() ;
@@ -100,6 +112,8 @@
      CTimer::get("XIOS").suspend();
   }
+  CATCH_DUMP_STACK
 
   void cxios_field_get_scalar_handle(XScalarPtr * scalar_hdl_ret, XFieldPtr field_hdl, int scalarIndex)
+  TRY
   {
      CTimer::get("XIOS").resume() ;
@@ -107,3 +121,4 @@
      CTimer::get("XIOS").suspend();
   }
+  CATCH_DUMP_STACK
 } // extern "C"
Index: /XIOS/dev/dev_olga/src/interface/c/icfile.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/interface/c/icfile.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/interface/c/icfile.cpp	(revision 1612)
@@ -28,4 +28,5 @@
    
    void cxios_file_handle_create (XFilePtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id; 
@@ -35,6 +36,8 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
    
    void cxios_filegroup_handle_create (XFileGroupPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id; 
@@ -44,8 +47,10 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
 
    void cxios_file_valid_id (bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -55,6 +60,8 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    void cxios_filegroup_valid_id (bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -64,3 +71,4 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 } // extern "C"
Index: /XIOS/dev/dev_olga/src/interface/c/icgenerate_rectilinear_domain.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/interface/c/icgenerate_rectilinear_domain.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/interface/c/icgenerate_rectilinear_domain.cpp	(revision 1612)
@@ -27,4 +27,5 @@
    // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_generate_rectilinear_domain_handle_create(XGenDomainPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -34,7 +35,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_generate_rectilinear_domain_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -45,3 +48,4 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 } // extern "C"
Index: /XIOS/dev/dev_olga/src/interface/c/icgrid.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/interface/c/icgrid.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/interface/c/icgrid.cpp	(revision 1612)
@@ -27,4 +27,5 @@
   
    void cxios_grid_handle_create (XGridPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id; 
@@ -34,6 +35,8 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
    
    void cxios_gridgroup_handle_create (XGridGroupPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id; 
@@ -43,8 +46,10 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
 
    void cxios_grid_valid_id (bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -54,6 +59,8 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    void cxios_gridgroup_valid_id (bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -63,3 +70,4 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 } // extern "C"
Index: /XIOS/dev/dev_olga/src/interface/c/icinterpolate.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/interface/c/icinterpolate.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/interface/c/icinterpolate.cpp	(revision 1612)
@@ -27,4 +27,5 @@
    // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_interpolate_domain_handle_create(XInterpolateDomainPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -34,7 +35,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_interpolate_domain_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -45,7 +48,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
     // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_interpolate_axis_handle_create(XInterpolateAxisPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -55,7 +60,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_interpolate_axis_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -66,3 +73,4 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 } // extern "C"
Index: /XIOS/dev/dev_olga/src/interface/c/icinverse_axis.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/interface/c/icinverse_axis.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/interface/c/icinverse_axis.cpp	(revision 1612)
@@ -27,4 +27,5 @@
    // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_inverse_axis_handle_create(XInverseAxisPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -34,7 +35,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_inverse_axis_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -45,3 +48,4 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 } // extern "C"
Index: /XIOS/dev/dev_olga/src/interface/c/icreduce_axis_to_axis.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/interface/c/icreduce_axis_to_axis.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/interface/c/icreduce_axis_to_axis.cpp	(revision 1612)
@@ -27,4 +27,5 @@
    // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_reduce_axis_to_axis_handle_create(XReduceAxisToAxisPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -34,7 +35,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_reduce_axis_to_axis_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -45,4 +48,5 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
 } // extern "C"
Index: /XIOS/dev/dev_olga/src/interface/c/icreduce_scalar_to_scalar.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/interface/c/icreduce_scalar_to_scalar.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/interface/c/icreduce_scalar_to_scalar.cpp	(revision 1612)
@@ -27,4 +27,5 @@
    // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_reduce_scalar_to_scalar_handle_create(XReduceScalarToScalarPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -34,7 +35,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_reduce_scalar_to_scalar_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -45,4 +48,5 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
 } // extern "C"
Index: /XIOS/dev/dev_olga/src/interface/c/icreduce_to_axis.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/interface/c/icreduce_to_axis.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/interface/c/icreduce_to_axis.cpp	(revision 1612)
@@ -27,4 +27,5 @@
    // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_reduce_domain_to_axis_handle_create(XReduceDomainToAxisPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -34,7 +35,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_reduce_domain_to_axis_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -45,4 +48,5 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
 } // extern "C"
Index: /XIOS/dev/dev_olga/src/interface/c/icreduce_to_scalar.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/interface/c/icreduce_to_scalar.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/interface/c/icreduce_to_scalar.cpp	(revision 1612)
@@ -27,4 +27,5 @@
    // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_reduce_axis_to_scalar_handle_create(XReduceAxisToScalarPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -34,7 +35,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_reduce_axis_to_scalar_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -45,6 +48,8 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    void cxios_reduce_domain_to_scalar_handle_create(XReduceDomainToScalarPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -54,7 +59,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_reduce_domain_to_scalar_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -65,4 +72,5 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
 } // extern "C"
Index: /XIOS/dev/dev_olga/src/interface/c/icreorder_domain.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/interface/c/icreorder_domain.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/interface/c/icreorder_domain.cpp	(revision 1612)
@@ -27,4 +27,5 @@
    // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_reorder_domain_handle_create(XReorderDomainPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -34,7 +35,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_reorder_domain_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -45,3 +48,4 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 } // extern "C"
Index: /XIOS/dev/dev_olga/src/interface/c/icscalar.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/interface/c/icscalar.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/interface/c/icscalar.cpp	(revision 1612)
@@ -28,4 +28,5 @@
 
    void cxios_scalar_handle_create (XScalarPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -35,6 +36,8 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    void cxios_scalargroup_handle_create (XScalarGroupPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -44,8 +47,10 @@
       CTimer::get("XIOS").suspend() ;
     }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
 
    void cxios_scalar_valid_id (bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -56,6 +61,8 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    void cxios_scalargroup_valid_id (bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -67,4 +74,5 @@
 
    }
+   CATCH_DUMP_STACK
 
 } // extern "C"
Index: /XIOS/dev/dev_olga/src/interface/c/ictemporal_splitting.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/interface/c/ictemporal_splitting.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/interface/c/ictemporal_splitting.cpp	(revision 1612)
@@ -27,4 +27,5 @@
    // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_temporal_splitting_handle_create(XTemporalSplittingPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -34,7 +35,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_temporal_splitting_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -45,4 +48,5 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
 } // extern "C"
Index: /XIOS/dev/dev_olga/src/interface/c/icvariable.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/interface/c/icvariable.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/interface/c/icvariable.cpp	(revision 1612)
@@ -29,4 +29,5 @@
    
    void cxios_variable_handle_create (XVariablePtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id; 
@@ -36,6 +37,8 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
    
    void cxios_variablegroup_handle_create (XVariableGroupPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id; 
@@ -45,8 +48,10 @@
       CTimer::get("XIOS").suspend() ;
     }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
 
    void cxios_variable_valid_id (bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -57,6 +62,8 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    void cxios_variablegroup_valid_id (bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -68,4 +75,5 @@
 
    }
+   CATCH_DUMP_STACK
    
 } // extern "C"
Index: /XIOS/dev/dev_olga/src/interface/c/iczoom.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/interface/c/iczoom.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/interface/c/iczoom.cpp	(revision 1612)
@@ -28,4 +28,5 @@
    // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_zoom_axis_handle_create (XZoomAxisPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -35,7 +36,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_zoom_axis_valid_id (bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -46,7 +49,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_zoom_domain_handle_create(XZoomDomainPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -56,7 +61,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_zoom_domain_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -67,3 +74,4 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 } // extern "C"
Index: /XIOS/dev/dev_olga/src/io/nc4_data_input.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/io/nc4_data_input.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/io/nc4_data_input.cpp	(revision 1612)
@@ -29,4 +29,5 @@
 
   StdSize CNc4DataInput::getFieldNbRecords_(CField* field)
+  TRY
   {
     StdString fieldId = field->getFieldOutputName();
@@ -40,6 +41,8 @@
     return 1;
   }
+  CATCH
 
   void CNc4DataInput::readFieldData_(CField* field)
+  TRY
   {
     CContext* context = CContext::getCurrent();
@@ -121,6 +124,8 @@
     }
   }
+  CATCH
 
   void CNc4DataInput::readFieldAttributes_(CField* field, bool readAttributeValues)
+  TRY
   {
     StdString fieldId = field->getFieldOutputName();
@@ -248,4 +253,5 @@
     }
   }
+  CATCH
 
   /*!
@@ -258,4 +264,5 @@
   void CNc4DataInput::readDomainAttributeValueFromFile(CDomain* domain, std::list<std::pair<StdString, StdSize> >& dimSizeMap,
                                                        int elementPosition, const StdString& fieldId)
+  TRY
   {
     // There are some optional attributes of a domain to retrieve from file    // + lon lat?
@@ -436,4 +443,5 @@
     domain->fillInLonLat();
   }
+  CATCH
 
   /*!
@@ -446,4 +454,5 @@
   void CNc4DataInput::readDomainAttributesFromFile(CDomain* domain, std::list<std::pair<StdString, StdSize> >& dimSizeMap,
                                                    int elementPosition, const StdString& fieldId)
+  TRY
   {
     // There are some mandatory attributes of a domain to retrieve from file
@@ -514,4 +523,5 @@
     }
   }
+  CATCH
 
   /*!
@@ -524,4 +534,5 @@
   void CNc4DataInput::readAxisAttributesFromFile(CAxis* axis, std::list<std::pair<StdString, StdSize> >& dimSizeMap,
                                                  int elementPosition, const StdString& fieldId)
+  TRY
   {
     std::list<std::pair<StdString, StdSize> >::const_iterator itMapN = dimSizeMap.begin(),
@@ -540,4 +551,5 @@
     axis->n_glo.setValue(itMapN->second);
   }
+  CATCH
 
   /*!
@@ -550,4 +562,5 @@
   void CNc4DataInput::readAxisAttributeValueFromFile(CAxis* axis, std::list<std::pair<StdString, StdSize> >& dimSizeMap,
                                                     int elementPosition, const StdString& fieldId)
+  TRY
   {
     std::list<std::pair<StdString, StdSize> >::const_iterator itMapN = dimSizeMap.begin(),
@@ -570,4 +583,5 @@
     }
   }
+  CATCH
 
   /*!
@@ -598,6 +612,8 @@
 
   void CNc4DataInput::closeFile_(void)
+  TRY
   {
     SuperClassWriter::close();
   }
+  CATCH
 } // namespace xios
Index: /XIOS/dev/dev_olga/src/io/nc4_data_output.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/io/nc4_data_output.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/io/nc4_data_output.cpp	(revision 1612)
@@ -54,4 +54,5 @@
 
       void CNc4DataOutput::writeDomain_(CDomain* domain)
+      TRY
       {
         StdString lonName,latName ;
@@ -540,4 +541,5 @@
          domain->addRelFile(this->filename);
       }
+      CATCH
 
     //--------------------------------------------------------------
Index: /XIOS/dev/dev_olga/src/node/axis.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/node/axis.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/node/axis.cpp	(revision 1612)
@@ -48,4 +48,5 @@
    bool CAxis::dummyTransformationMapList_ = CAxis::initializeTransformationMap(CAxis::transformationMapList_);
    bool CAxis::initializeTransformationMap(std::map<StdString, ETranformationType>& m)
+   TRY
    {
      m["zoom_axis"] = TRANS_ZOOM_AXIS;
@@ -60,31 +61,40 @@
 
    }
+   CATCH
 
    ///---------------------------------------------------------------
 
    const std::set<StdString> & CAxis::getRelFiles(void) const
+   TRY
    {
       return (this->relFiles);
    }
+   CATCH
 
    bool CAxis::IsWritten(const StdString & filename) const
+   TRY
    {
       return (this->relFiles.find(filename) != this->relFiles.end());
    }
+   CATCH
 
    bool CAxis::isWrittenCompressed(const StdString& filename) const
+   TRY
    {
       return (this->relFilesCompressed.find(filename) != this->relFilesCompressed.end());
    }
+   CATCH
 
    bool CAxis::isDistributed(void) const
+   TRY
    {
       bool distributed = (!this->begin.isEmpty() && !this->n.isEmpty() && (this->begin + this->n < this->n_glo)) ||
              (!this->n.isEmpty() && (this->n != this->n_glo));
-      // A same stupid condition to make sure that if there is only one client, axis
+      // A condition to make sure that if there is only one client, axis
       // should be considered to be distributed. This should be a temporary solution     
       distributed |= (1 == CContext::getCurrent()->client->clientSize);
       return distributed;
    }
+   CATCH
 
    /*!
@@ -94,17 +104,23 @@
     */
    bool CAxis::isCompressible(void) const
+   TRY
    {
       return isCompressible_;
    }
+   CATCH
 
    void CAxis::addRelFile(const StdString & filename)
+   TRY
    {
       this->relFiles.insert(filename);
    }
+   CATCH_DUMP_ATTR
 
    void CAxis::addRelFileCompressed(const StdString& filename)
+   TRY
    {
       this->relFilesCompressed.insert(filename);
    }
+   CATCH_DUMP_ATTR
 
    //----------------------------------------------------------------
@@ -115,4 +131,5 @@
    */
    int CAxis::getNumberWrittenIndexes(MPI_Comm writtenCom)
+   TRY
    {
      int writtenSize;
@@ -120,4 +137,5 @@
      return numberWrittenIndexes_[writtenSize];
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -126,4 +144,5 @@
    */
    int CAxis::getTotalNumberWrittenIndexes(MPI_Comm writtenCom)
+   TRY
    {
      int writtenSize;
@@ -131,4 +150,5 @@
      return totalNumberWrittenIndexes_[writtenSize];
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -137,4 +157,5 @@
    */
    int CAxis::getOffsetWrittenIndexes(MPI_Comm writtenCom)
+   TRY
    {
      int writtenSize;
@@ -142,6 +163,8 @@
      return offsetWrittenIndexes_[writtenSize];
    }
+   CATCH_DUMP_ATTR
 
    CArray<int, 1>& CAxis::getCompressedIndexToWriteOnServer(MPI_Comm writtenCom)
+   TRY
    {
      int writtenSize;
@@ -149,4 +172,6 @@
      return compressedIndexToWriteOnServer[writtenSize];
    }
+   CATCH_DUMP_ATTR
+
    //----------------------------------------------------------------
 
@@ -158,4 +183,5 @@
    std::map<int, StdSize> CAxis::getAttributesBufferSize(CContextClient* client, const std::vector<int>& globalDim, int orderPositionInGrid,
                                                          CServerDistributionDescription::ServerDistributionType distType)
+   TRY
    {
 
@@ -221,7 +247,7 @@
        }
      }
-
      return attributesSizes;
    }
+   CATCH_DUMP_ATTR
 
    //----------------------------------------------------------------
@@ -234,8 +260,10 @@
 
    CAxis* CAxis::createAxis()
+   TRY
    {
      CAxis* axis = CAxisGroup::get("axis_definition")->createChild();
      return axis;
    }
+   CATCH
 
    /*!
@@ -244,4 +272,5 @@
    */
    void CAxis::checkAttributes(void)
+   TRY
    {
      CContext* context=CContext::getCurrent();
@@ -311,4 +340,5 @@
       }
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -317,4 +347,5 @@
 
    void CAxis::checkData()
+   TRY
    {
       if (data_begin.isEmpty()) data_begin.setValue(0);
@@ -363,4 +394,5 @@
 
    }
+   CATCH_DUMP_ATTR
 
     size_t CAxis::getGlobalWrittenSize(void)
@@ -373,4 +405,5 @@
    */
    void CAxis::checkMask()
+   TRY
    {
       if (!mask.isEmpty())
@@ -391,4 +424,5 @@
       }
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -396,4 +430,5 @@
    */
    void CAxis::checkBounds()
+   TRY
    {
      if (!bounds.isEmpty())
@@ -408,6 +443,8 @@
      else hasBounds = false;
    }
+   CATCH_DUMP_ATTR
 
   void CAxis::checkLabel()
+  TRY
   {
     if (!label.isEmpty())
@@ -422,4 +459,5 @@
     else hasLabel = false;
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -427,8 +465,10 @@
   */
   void CAxis::checkEligibilityForCompressedOutput()
+  TRY
   {
     // We don't check if the mask is valid here, just if a mask has been defined at this point.
     isCompressible_ = !mask.isEmpty();
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -436,4 +476,5 @@
   */
   bool CAxis::dispatchEvent(CEventServer& event)
+  TRY
   {
      if (SuperClass::dispatchEvent(event)) return true;
@@ -461,4 +502,5 @@
      }
   }
+  CATCH
 
    /*!
@@ -466,4 +508,5 @@
    */
    void CAxis::checkAttributesOnClient()
+   TRY
    {
      if (this->areClientAttributesChecked_) return;
@@ -474,4 +517,5 @@
      this->areClientAttributesChecked_ = true;
    }
+   CATCH_DUMP_ATTR
 
    /*
@@ -481,4 +525,5 @@
    void CAxis::checkAttributesOnClientAfterTransformation(const std::vector<int>& globalDim, int orderPositionInGrid,
                                                           CServerDistributionDescription::ServerDistributionType distType)
+   TRY
    {
      CContext* context=CContext::getCurrent() ;
@@ -494,4 +539,5 @@
      this->isClientAfterTransformationChecked = true;
    }
+   CATCH_DUMP_ATTR
 
    /*
@@ -504,4 +550,5 @@
    void CAxis::sendCheckedAttributes(const std::vector<int>& globalDim, int orderPositionInGrid,
                                      CServerDistributionDescription::ServerDistributionType distType)
+   TRY
    {
      if (!this->areClientAttributesChecked_) checkAttributesOnClient();
@@ -514,4 +561,5 @@
      this->isChecked = true;
    }
+   CATCH_DUMP_ATTR
 
   /*!
@@ -522,4 +570,5 @@
   void CAxis::sendAttributes(const std::vector<int>& globalDim, int orderPositionInGrid,
                              CServerDistributionDescription::ServerDistributionType distType)
+  TRY
   {
      sendDistributionAttribute(globalDim, orderPositionInGrid, distType);
@@ -536,4 +585,5 @@
      }     
   }
+  CATCH_DUMP_ATTR
 
   /*
@@ -547,4 +597,5 @@
   void CAxis::computeConnectedClients(const std::vector<int>& globalDim, int orderPositionInGrid,
                                      CServerDistributionDescription::ServerDistributionType distType)
+  TRY
   {
     CContext* context = CContext::getCurrent();
@@ -666,4 +717,5 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   /*
@@ -673,4 +725,5 @@
   */
   void CAxis::computeWrittenIndex()
+  TRY
   {  
     if (computedWrittenIndex_) return;
@@ -714,6 +767,8 @@
 
   }
+  CATCH_DUMP_ATTR
 
   void CAxis::computeWrittenCompressedIndex(MPI_Comm writtenComm)
+  TRY
   {
     int writtenCommSize;
@@ -804,4 +859,5 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -814,4 +870,5 @@
   void CAxis::sendDistributionAttribute(const std::vector<int>& globalDim, int orderPositionInGrid,
                                         CServerDistributionDescription::ServerDistributionType distType)
+  TRY
   {
     std::list<CContextClient*>::iterator it;
@@ -852,4 +909,5 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   /*
@@ -858,4 +916,5 @@
   */
   void CAxis::recvDistributionAttribute(CEventServer& event)
+  TRY
   {
     CBufferIn* buffer = event.subEvents.begin()->buffer;
@@ -864,4 +923,5 @@
     get(axisId)->recvDistributionAttribute(*buffer);
   }
+  CATCH
 
   /*
@@ -870,4 +930,5 @@
   */
   void CAxis::recvDistributionAttribute(CBufferIn& buffer)
+  TRY
   {
     int ni_srv, begin_srv;
@@ -879,4 +940,5 @@
     begin.setValue(begin_srv);
   }
+  CATCH_DUMP_ATTR
 
   /*
@@ -886,4 +948,5 @@
   */
   void CAxis::sendNonDistributedAttributes()
+  TRY
   {
     std::list<CContextClient*>::iterator it;
@@ -939,4 +1002,5 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   /*
@@ -945,4 +1009,5 @@
   */
   void CAxis::recvNonDistributedAttributes(CEventServer& event)
+  TRY
   {
     list<CEventServer::SSubEvent>::iterator it;
@@ -955,4 +1020,5 @@
     }
   }
+  CATCH
 
   /*
@@ -962,4 +1028,5 @@
   */
   void CAxis::recvNonDistributedAttributes(int rank, CBufferIn& buffer)
+  TRY
   { 
     CArray<int,1> tmp_index, tmp_data_index;
@@ -1003,4 +1070,5 @@
     for (int idx = 0; idx < index.numElements(); ++idx) globalLocalIndexMap_[index(idx)] = idx;
   }
+  CATCH_DUMP_ATTR
 
   /*
@@ -1010,4 +1078,5 @@
   */
   void CAxis::sendDistributedAttributes(void)
+  TRY
   {
     int ind, idx;
@@ -1113,4 +1182,5 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   /*
@@ -1119,4 +1189,5 @@
   */
   void CAxis::recvDistributedAttributes(CEventServer& event)
+  TRY
   {
     string axisId;
@@ -1134,4 +1205,5 @@
     get(axisId)->recvDistributedAttributes(ranks, buffers);
   }
+  CATCH
 
   /*
@@ -1141,4 +1213,5 @@
   */
   void CAxis::recvDistributedAttributes(vector<int>& ranks, vector<CBufferIn*> buffers)
+  TRY
   {
     int nbReceived = ranks.size(), idx, ind, gloInd, locInd;
@@ -1259,4 +1332,5 @@
     data_n.setValue(data_index.numElements());
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -1268,4 +1342,5 @@
   */
   bool CAxis::isEqual(CAxis* obj)
+  TRY
   {
     vector<StdString> excludedAttr;
@@ -1291,4 +1366,5 @@
     return objEqual;
   }
+  CATCH_DUMP_ATTR
 
   /*
@@ -1298,8 +1374,10 @@
   */
   CTransformation<CAxis>* CAxis::addTransformation(ETranformationType transType, const StdString& id)
+  TRY
   {
     transformationMap_.push_back(std::make_pair(transType, CTransformation<CAxis>::createTransformation(transType,id)));
     return transformationMap_.back().second;
   }
+  CATCH_DUMP_ATTR
 
   /*
@@ -1307,7 +1385,9 @@
   */
   bool CAxis::hasTransformation()
+  TRY
   {
     return (!transformationMap_.empty());
   }
+  CATCH_DUMP_ATTR
 
   /*
@@ -1316,7 +1396,9 @@
   */
   void CAxis::setTransformations(const TransMapTypes& axisTrans)
+  TRY
   {
     transformationMap_ = axisTrans;
   }
+  CATCH_DUMP_ATTR
 
   /*
@@ -1325,7 +1407,9 @@
   */
   CAxis::TransMapTypes CAxis::getAllTransformations(void)
+  TRY
   {
     return transformationMap_;
   }
+  CATCH_DUMP_ATTR
 
   /*
@@ -1334,4 +1418,5 @@
   */
   void CAxis::duplicateTransformation(CAxis* src)
+  TRY
   {
     if (src->hasTransformation())
@@ -1340,4 +1425,5 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -1345,4 +1431,5 @@
    */
   void CAxis::solveInheritanceTransformation()
+  TRY
   {
     if (hasTransformation() || !hasDirectAxisReference())
@@ -1361,6 +1448,8 @@
         refAxis[i]->setTransformations(axis->getAllTransformations());
   }
+  CATCH_DUMP_ATTR
 
   void CAxis::setContextClient(CContextClient* contextClient)
+  TRY
   {
     if (clientsSet.find(contextClient)==clientsSet.end())
@@ -1370,6 +1459,8 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   void CAxis::parse(xml::CXMLNode & node)
+  TRY
   {
     SuperClass::parse(node);
@@ -1402,4 +1493,5 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   DEFINE_REF_FUNC(Axis,axis)
Index: /XIOS/dev/dev_olga/src/node/context.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/node/context.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/node/context.cpp	(revision 1612)
@@ -33,4 +33,5 @@
       , idServer_(), client(0), server(0)
       , allProcessed(false), countChildCtx_(0)
+
    { /* Ne rien faire de plus */ }
 
@@ -65,8 +66,10 @@
    */
    CContextGroup* CContext::getRoot(void)
+   TRY
    {
       if (root.get()==NULL) root=std::shared_ptr<CContextGroup>(new CContextGroup(xml::CXMLNode::GetRootName()));
       return root.get();
    }
+   CATCH
 
    //----------------------------------------------------------------
@@ -77,7 +80,9 @@
    */
    std::shared_ptr<CCalendar> CContext::getCalendar(void) const
+   TRY
    {
       return (this->calendar);
    }
+   CATCH
 
    //----------------------------------------------------------------
@@ -88,7 +93,9 @@
    */
    void CContext::setCalendar(std::shared_ptr<CCalendar> newCalendar)
+   TRY
    {
       this->calendar = newCalendar;
    }
+   CATCH_DUMP_ATTR
 
    //----------------------------------------------------------------
@@ -98,4 +105,5 @@
    */
    void CContext::parse(xml::CXMLNode & node)
+   TRY
    {
       CContext::SuperClass::parse(node);
@@ -152,8 +160,10 @@
       }
    }
+   CATCH_DUMP_ATTR
 
    //----------------------------------------------------------------
    //! Show tree structure of context
    void CContext::ShowTree(StdOStream & out)
+   TRY
    {
       StdString currentContextId = CContext::getCurrent() -> getId();
@@ -176,5 +186,5 @@
       CContext::setCurrent(currentContextId);
    }
-
+   CATCH
 
    //----------------------------------------------------------------
@@ -182,4 +192,5 @@
    //! Convert context object into string (to print)
    StdString CContext::toString(void) const
+   TRY
    {
       StdOStringStream oss;
@@ -201,9 +212,8 @@
 
       }
-
       oss << "</" << CContext::GetName() << " >";
-
       return (oss.str());
    }
+   CATCH
 
    //----------------------------------------------------------------
@@ -216,4 +226,5 @@
    */
    void CContext::solveDescInheritance(bool apply, const CAttributeMap * const UNUSED(parent))
+   TRY
    {
 #define DECLARE_NODE(Name_, name_)    \
@@ -223,4 +234,5 @@
 #include "node_type.conf"
    }
+   CATCH_DUMP_ATTR
 
    //----------------------------------------------------------------
@@ -228,4 +240,5 @@
    //! Verify if all root definition in the context have child.
    bool CContext::hasChild(void) const
+   TRY
    {
       return (
@@ -236,8 +249,10 @@
       false);
 }
+   CATCH
 
    //----------------------------------------------------------------
 
    void CContext::CleanTree(void)
+   TRY
    {
 #define DECLARE_NODE(Name_, name_) C##Name_##Definition::ClearAllAttributes();
@@ -245,8 +260,11 @@
 #include "node_type.conf"
    }
+   CATCH
+
    ///---------------------------------------------------------------
 
    //! Initialize client side
    void CContext::initClient(MPI_Comm intraComm, MPI_Comm interComm, CContext* cxtServer /*= 0*/)
+   TRY
    {
 
@@ -298,4 +316,5 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -306,4 +325,5 @@
   */
    void CContext::setClientServerBuffer(CContextClient* contextClient, bool bufferForWriting)
+   TRY
    {
       // Estimated minimum event size for small events (10 is an arbitrary constant just for safety)
@@ -352,14 +372,17 @@
      }
      contextClient->setBufferSize(bufferSize, maxEventSize);
-
-   }
+   }
+   CATCH_DUMP_ATTR
 
    //! Verify whether a context is initialized
    bool CContext::isInitialized(void)
+   TRY
    {
      return hasClient;
    }
+   CATCH_DUMP_ATTR
 
    void CContext::initServer(MPI_Comm intraComm, MPI_Comm interComm, CContext* cxtClient /*= 0*/)
+   TRY
    {
      hasServer=true;
@@ -394,7 +417,9 @@
      client = new CContextClient(this,intraCommClient,interCommClient, cxtClient);
    }
+   CATCH_DUMP_ATTR
 
    //! Try to send the buffers and receive possible answers
   bool CContext::checkBuffersAndListen(bool enableEventsProcessing /*= true*/)
+  TRY
   {
     bool clientReady, serverFinished;
@@ -434,7 +459,9 @@
     }
   }
+   CATCH_DUMP_ATTR
 
    //! Terminate a context
    void CContext::finalize(void)
+   TRY
    {
       if (hasClient && !hasServer) // For now we only use server level 1 to read data
@@ -527,7 +554,9 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    //! Free internally allocated communicators
    void CContext::freeComms(void)
+   TRY
    {
      for (std::list<MPI_Comm>::iterator it = comms.begin(); it != comms.end(); ++it)
@@ -535,7 +564,9 @@
      comms.clear();
    }
+   CATCH_DUMP_ATTR
 
    //! Deallocate buffers allocated by clientContexts
    void CContext::releaseClientBuffers(void)
+   TRY
    {
      client->releaseBuffers();
@@ -543,6 +574,8 @@
        clientPrimServer[i]->releaseBuffers();
    }
+   CATCH_DUMP_ATTR
 
    void CContext::postProcessingGlobalAttributes()
+   TRY
    {
      if (allProcessed) return;  
@@ -608,6 +641,8 @@
      allProcessed = true;
    }
+   CATCH_DUMP_ATTR
 
    void CContext::sendPostProcessingGlobalAttributes()
+   TRY
    {
       // Use correct context client to send message
@@ -634,6 +669,8 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    void CContext::recvPostProcessingGlobalAttributes(CEventServer& event)
+   TRY
    {
       CBufferIn* buffer=event.subEvents.begin()->buffer;
@@ -642,9 +679,12 @@
       get(id)->recvPostProcessingGlobalAttributes(*buffer);
    }
+   CATCH
 
    void CContext::recvPostProcessingGlobalAttributes(CBufferIn& buffer)
+   TRY
    {      
       postProcessingGlobalAttributes();
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -657,5 +697,7 @@
    and the active fields (fields will be written onto active files)
    */
+
    void CContext::closeDefinition(void)
+   TRY
    {
     CTimer::get("Context : close definition").resume() ;
@@ -688,18 +730,24 @@
     CTimer::get("Context : close definition").suspend() ;
    }
+   CATCH_DUMP_ATTR
 
    void CContext::findAllEnabledFieldsInFiles(const std::vector<CFile*>& activeFiles)
+   TRY
    {
      for (unsigned int i = 0; i < activeFiles.size(); i++)
      (void)activeFiles[i]->getEnabledFields();
    }
+   CATCH_DUMP_ATTR
 
    void CContext::readAttributesOfEnabledFieldsInReadModeFiles()
+   TRY
    {
       for (unsigned int i = 0; i < this->enabledReadModeFiles.size(); ++i)
         (void)this->enabledReadModeFiles[i]->readAttributesOfEnabledFieldsInReadMode();
    }
+   CATCH_DUMP_ATTR
 
    void CContext::sendGridComponentEnabledFieldsInFiles(const std::vector<CFile*>& activeFiles)
+   TRY
    {
      int size = activeFiles.size();
@@ -709,4 +757,5 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -715,4 +764,5 @@
    */
    void CContext::sendGridEnabledFieldsInFiles(const std::vector<CFile*>& activeFiles)
+   TRY
    {
      int size = activeFiles.size();
@@ -722,6 +772,8 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    void CContext::checkGridEnabledFields()
+   TRY
    {
      int size = enabledFiles.size();
@@ -731,4 +783,5 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -737,4 +790,5 @@
    */
    void CContext::checkGridEnabledFieldsInFiles(const std::vector<CFile*>& activeFiles)
+   TRY
    {
      int size = activeFiles.size();
@@ -744,4 +798,5 @@
      }
    }
+   CATCH_DUMP_ATTR
 
     /*!
@@ -751,4 +806,5 @@
    */
    void CContext::solveOnlyRefOfEnabledFields(bool sendToServer)
+   TRY
    {
      int size = this->enabledFiles.size();
@@ -763,4 +819,5 @@
      }
    }
+   CATCH_DUMP_ATTR
 
     /*!
@@ -771,4 +828,5 @@
    */
    void CContext::solveAllRefOfEnabledFieldsAndTransform(bool sendToServer)
+   TRY
    {
      int size = this->enabledFiles.size();
@@ -778,6 +836,8 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    void CContext::buildFilterGraphOfEnabledFields()
+   TRY
    {
      int size = this->enabledFiles.size();
@@ -787,6 +847,8 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    void CContext::postProcessFilterGraph()
+   TRY
    {
      int size = enabledFiles.size();
@@ -796,6 +858,8 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    void CContext::startPrefetchingOfEnabledReadModeFiles()
+   TRY
    {
      int size = enabledReadModeFiles.size();
@@ -805,6 +869,8 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    void CContext::doPreTimestepOperationsForEnabledReadModeFiles()
+   TRY
    {
      int size = enabledReadModeFiles.size();
@@ -814,6 +880,8 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    void CContext::doPostTimestepOperationsForEnabledReadModeFiles()
+   TRY
    {
      int size = enabledReadModeFiles.size();
@@ -823,6 +891,8 @@
      }
    }
+   CATCH_DUMP_ATTR
 
   void CContext::findFieldsWithReadAccess(void)
+  TRY
   {
     fieldsWithReadAccess.clear();
@@ -838,18 +908,24 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   void CContext::solveAllRefOfFieldsWithReadAccess()
+  TRY
   {
     for (size_t i = 0; i < fieldsWithReadAccess.size(); ++i)
       fieldsWithReadAccess[i]->solveAllReferenceEnabledField(false);
   }
+  CATCH_DUMP_ATTR
 
   void CContext::buildFilterGraphOfFieldsWithReadAccess()
+  TRY
   {
     for (size_t i = 0; i < fieldsWithReadAccess.size(); ++i)
       fieldsWithReadAccess[i]->buildFilterGraph(garbageCollector, true);
   }
+  CATCH_DUMP_ATTR
 
    void CContext::solveAllInheritance(bool apply)
+   TRY
    {
      // RÃ©solution des hÃ©ritages descendants (cÃ d des hÃ©ritages de groupes)
@@ -874,6 +950,8 @@
 
    }
+  CATCH_DUMP_ATTR
 
    void CContext::findEnabledFiles(void)
+   TRY
    {
       const std::vector<CFile*> allFiles = CFile::getAll();
@@ -924,6 +1002,8 @@
 
    }
+   CATCH_DUMP_ATTR
 
    void CContext::distributeFiles(void)
+   TRY
    {
      bool distFileMemory=false ;
@@ -933,7 +1013,8 @@
      else distributeFileOverBandwith() ;
    }
-
+   CATCH_DUMP_ATTR
 
    void CContext::distributeFileOverBandwith(void)
+   TRY
    {
      double eps=std::numeric_limits<double>::epsilon()*10 ;
@@ -1015,6 +1096,8 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    void CContext::distributeFileOverMemoryBandwith(void)
+   TRY
    {
      // If primary server
@@ -1107,6 +1190,5 @@
    }
 }
-
-
+   CATCH_DUMP_ATTR
 
    /*!
@@ -1114,4 +1196,5 @@
    */
    void CContext::findEnabledWriteModeFiles(void)
+   TRY
    {
      int size = this->enabledFiles.size();
@@ -1123,4 +1206,5 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -1128,4 +1212,5 @@
    */
    void CContext::findEnabledReadModeFiles(void)
+   TRY
    {
      int size = this->enabledFiles.size();
@@ -1136,6 +1221,8 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    void CContext::closeAllFile(void)
+   TRY
    {
      std::vector<CFile*>::const_iterator
@@ -1148,4 +1235,5 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -1157,4 +1245,5 @@
    */
    bool CContext::dispatchEvent(CEventServer& event)
+   TRY
    {
 
@@ -1198,7 +1287,9 @@
       }
    }
+   CATCH
 
    //! Client side: Send a message to server to make it close
    void CContext::sendCloseDefinition(void)
+   TRY
    {
      // Use correct context client to send message
@@ -1223,7 +1314,9 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    //! Server side: Receive a message of client announcing a context close
    void CContext::recvCloseDefinition(CEventServer& event)
+   TRY
    {
       CBufferIn* buffer=event.subEvents.begin()->buffer;
@@ -1232,7 +1325,9 @@
       get(id)->closeDefinition();
    }
+   CATCH
 
    //! Client side: Send a message to update calendar in each time step
    void CContext::sendUpdateCalendar(int step)
+   TRY
    {
      // Use correct context client to send message
@@ -1258,7 +1353,9 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    //! Server side: Receive a message of client annoucing calendar update
    void CContext::recvUpdateCalendar(CEventServer& event)
+   TRY
    {
       CBufferIn* buffer=event.subEvents.begin()->buffer;
@@ -1267,7 +1364,9 @@
       get(id)->recvUpdateCalendar(*buffer);
    }
+   CATCH
 
    //! Server side: Receive a message of client annoucing calendar update
    void CContext::recvUpdateCalendar(CBufferIn& buffer)
+   TRY
    {
       int step;
@@ -1279,7 +1378,9 @@
       }
    }
+   CATCH_DUMP_ATTR
 
    //! Client side: Send a message to create header part of netcdf file
    void CContext::sendCreateFileHeader(void)
+   TRY
    {
      // Use correct context client to send message
@@ -1306,7 +1407,9 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    //! Server side: Receive a message of client annoucing the creation of header part of netcdf file
    void CContext::recvCreateFileHeader(CEventServer& event)
+   TRY
    {
       CBufferIn* buffer=event.subEvents.begin()->buffer;
@@ -1315,14 +1418,18 @@
       get(id)->recvCreateFileHeader(*buffer);
    }
+   CATCH
 
    //! Server side: Receive a message of client annoucing the creation of header part of netcdf file
    void CContext::recvCreateFileHeader(CBufferIn& buffer)
+   TRY
    {
       if (!hasClient && hasServer) 
         createFileHeader();
    }
+   CATCH_DUMP_ATTR
 
    //! Client side: Send a message to do some post processing on server
    void CContext::sendProcessingGridOfEnabledFields()
+   TRY
    {
       // Use correct context client to send message
@@ -1348,7 +1455,9 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    //! Server side: Receive a message to do some post processing
    void CContext::recvProcessingGridOfEnabledFields(CEventServer& event)
+   TRY
    {
       CBufferIn* buffer=event.subEvents.begin()->buffer;
@@ -1356,7 +1465,9 @@
       *buffer>>id;      
    }
+   CATCH
 
    //! Client side: Send a message to do some post processing on server
    void CContext::sendPostProcessing()
+   TRY
    {
       // Use correct context client to send message
@@ -1382,7 +1493,9 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    //! Server side: Receive a message to do some post processing
    void CContext::recvPostProcessing(CEventServer& event)
+   TRY
    {
       CBufferIn* buffer=event.subEvents.begin()->buffer;
@@ -1391,13 +1504,17 @@
       get(id)->recvPostProcessing(*buffer);
    }
+   CATCH
 
    //! Server side: Receive a message to do some post processing
    void CContext::recvPostProcessing(CBufferIn& buffer)
+   TRY
    {
       CCalendarWrapper::get(CCalendarWrapper::GetDefName())->createCalendar();
       postProcessing();
    }
+   CATCH_DUMP_ATTR
 
    const StdString& CContext::getIdServer()
+   TRY
    {
       if (hasClient)
@@ -1409,6 +1526,8 @@
       if (hasServer) return (this->getId());
    }
+   CATCH_DUMP_ATTR
 
    const StdString& CContext::getIdServer(const int i)
+   TRY
    {
      idServer_ = this->getId();
@@ -1417,5 +1536,5 @@
      return idServer_;
    }
-
+   CATCH_DUMP_ATTR
 
    /*!
@@ -1426,4 +1545,5 @@
    */
    void CContext::postProcessing()
+   TRY
    {
      if (isPostProcessed) return;
@@ -1488,4 +1608,5 @@
       isPostProcessed = true;
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -1498,4 +1619,5 @@
    std::map<int, StdSize> CContext::getAttributesBufferSize(std::map<int, StdSize>& maxEventSize,
                                                            CContextClient* contextClient, bool bufferForWriting /*= "false"*/)
+   TRY
    {
 	 // As calendar attributes are sent even if there are no active files or fields, maps are initialized according the size of calendar attributes
@@ -1529,4 +1651,5 @@
      return attributesSize;
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -1539,4 +1662,5 @@
    std::map<int, StdSize> CContext::getDataBufferSize(std::map<int, StdSize>& maxEventSize,
                                                       CContextClient* contextClient, bool bufferForWriting /*= "false"*/)
+   TRY
    {
      std::map<int, StdSize> dataSize;
@@ -1547,5 +1671,4 @@
      for (size_t i = 0; i < numEnabledFiles; ++i)
      {
-//       CFile* file = this->enabledFiles[i];
        CFile* file = fileList[i];
        if (file->getContextClient() == contextClient)
@@ -1575,7 +1698,9 @@
      return dataSize;
    }
+   CATCH_DUMP_ATTR
 
    //! Client side: Send infomation of active files (files are enabled to write out)
    void CContext::sendEnabledFiles(const std::vector<CFile*>& activeFiles)
+   TRY
    {
      int size = activeFiles.size();
@@ -1595,7 +1720,9 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    //! Client side: Send information of active fields (ones are written onto files)
    void CContext::sendEnabledFieldsInFiles(const std::vector<CFile*>& activeFiles)
+   TRY
    {
      int size = activeFiles.size();
@@ -1605,7 +1732,9 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    //! Client side: Check if the defined axis, domains and grids are eligible for compressed indexed output
    void CContext::checkAxisDomainsGridsEligibilityForCompressedOutput()
+   TRY
    {
      if (!hasClient) return;
@@ -1623,7 +1752,9 @@
        (*it)->checkEligibilityForCompressedOutput();
    }
+   CATCH_DUMP_ATTR
 
    //! Client side: Prepare the timeseries by adding the necessary files
    void CContext::prepareTimeseries()
+   TRY
    {
      if (!hasClient) return;
@@ -1723,7 +1854,9 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    //! Client side: Send information of reference grid of active fields
    void CContext::sendRefGrid(const std::vector<CFile*>& activeFiles)
+   TRY
    {
      std::set<StdString> gridIds;
@@ -1757,7 +1890,9 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    //! Client side: Send information of reference domain, axis and scalar of active fields
    void CContext::sendRefDomainsAxisScalars(const std::vector<CFile*>& activeFiles)
+   TRY
    {
      std::set<StdString> domainIds, axisIds, scalarIds;
@@ -1818,7 +1953,9 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    //! Update calendar in each time step
    void CContext::updateCalendar(int step)
+   TRY
    {
       int prevStep = calendar->getStep();
@@ -1850,6 +1987,8 @@
               << "Illegal calendar update: previous step was " << prevStep << ", new step " << step << "is in the past!")
    }
+   CATCH_DUMP_ATTR
 
    void CContext::initReadFiles(void)
+   TRY
    {
       vector<CFile*>::const_iterator it;
@@ -1860,7 +1999,9 @@
       }
    }
+   CATCH_DUMP_ATTR
 
    //! Server side: Create header of netcdf file
    void CContext::createFileHeader(void)
+   TRY
    {
       vector<CFile*>::const_iterator it;
@@ -1872,10 +2013,13 @@
       }
    }
+   CATCH_DUMP_ATTR
 
    //! Get current context
    CContext* CContext::getCurrent(void)
+   TRY
    {
      return CObjectFactory::GetObject<CContext>(CObjectFactory::GetCurrentContextId()).get();
    }
+   CATCH
 
    /*!
@@ -1884,8 +2028,10 @@
    */
    void CContext::setCurrent(const string& id)
+   TRY
    {
      CObjectFactory::SetCurrentContextId(id);
      CGroupFactory::SetCurrentContextId(id);
    }
+   CATCH
 
   /*!
@@ -1895,4 +2041,5 @@
   */
   CContext* CContext::create(const StdString& id)
+  TRY
   {
     CContext::setCurrent(id);
@@ -1910,8 +2057,9 @@
     return (context);
   }
-
+  CATCH
 
      //! Server side: Receive a message to do some post processing
   void CContext::recvRegistry(CEventServer& event)
+  TRY
   {
     CBufferIn* buffer=event.subEvents.begin()->buffer;
@@ -1920,6 +2068,8 @@
     get(id)->recvRegistry(*buffer);
   }
+  CATCH
 
   void CContext::recvRegistry(CBufferIn& buffer)
+  TRY
   {
     if (server->intraCommRank==0)
@@ -1930,6 +2080,8 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   void CContext::sendRegistry(void)
+  TRY
   {
     registryOut->hierarchicalGatherRegistry() ;
@@ -1957,4 +2109,5 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -1963,7 +2116,23 @@
   */
   bool CContext::isFinalized(void)
+  TRY
   {
     return finalized;
   }
+  CATCH_DUMP_ATTR
+  ///--------------------------------------------------------------
+  StdString CContext::dumpClassAttributes(void)
+  {
+    StdString str;
+    str.append("enabled files=\"");
+    int size = this->enabledFiles.size();
+    for (int i = 0; i < size; ++i)
+    {
+      str.append(enabledFiles[i]->getId());
+      str.append(" ");
+    }
+    str.append("\"");
+    return str;
+  }
 
 } // namespace xios
Index: /XIOS/dev/dev_olga/src/node/context.hpp
===================================================================
--- /XIOS/dev/dev_olga/src/node/context.hpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/node/context.hpp	(revision 1612)
@@ -91,4 +91,6 @@
          void initServer(MPI_Comm intraComm, MPI_Comm interComm, CContext* cxtClient = 0);
          bool isInitialized(void);
+
+         StdString dumpClassAttributes(void);
 
          // Put sever or client into loop state
@@ -143,5 +145,4 @@
          void distributeFileOverMemoryBandwith() ;
          
-
          // Send context close definition
          void sendCloseDefinition(void);
Index: /XIOS/dev/dev_olga/src/node/domain.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/node/domain.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/node/domain.cpp	(revision 1612)
@@ -58,13 +58,17 @@
 
    void CDomain::assignMesh(const StdString meshName, const int nvertex)
+   TRY
    {
      mesh = CMesh::getMesh(meshName, nvertex);
    }
+   CATCH_DUMP_ATTR
 
    CDomain* CDomain::createDomain()
+   TRY
    {
      CDomain* domain = CDomainGroup::get("domain_definition")->createChild();
      return domain;
    }
+   CATCH
 
    std::map<StdString, ETranformationType> CDomain::transformationMapList_ = std::map<StdString, ETranformationType>();
@@ -72,4 +76,5 @@
 
    bool CDomain::initializeTransformationMap(std::map<StdString, ETranformationType>& m)
+   TRY
    {
      m["zoom_domain"] = TRANS_ZOOM_DOMAIN;
@@ -81,10 +86,12 @@
      m["extract_domain"] = TRANS_EXTRACT_DOMAIN;
    }
+   CATCH
 
    const std::set<StdString> & CDomain::getRelFiles(void) const
+   TRY
    {
       return (this->relFiles);
    }
-
+   CATCH
 
    /*!
@@ -93,4 +100,5 @@
    */
    int CDomain::getNumberWrittenIndexes(MPI_Comm writtenCom)
+   TRY
    {
      int writtenSize;
@@ -98,4 +106,5 @@
      return numberWrittenIndexes_[writtenSize];
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -104,4 +113,5 @@
    */
    int CDomain::getTotalNumberWrittenIndexes(MPI_Comm writtenCom)
+   TRY
    {
      int writtenSize;
@@ -109,4 +119,5 @@
      return totalNumberWrittenIndexes_[writtenSize];
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -115,4 +126,5 @@
    */
    int CDomain::getOffsetWrittenIndexes(MPI_Comm writtenCom)
+   TRY
    {
      int writtenSize;
@@ -120,6 +132,8 @@
      return offsetWrittenIndexes_[writtenSize];
    }
+   CATCH_DUMP_ATTR
 
    CArray<int, 1>& CDomain::getCompressedIndexToWriteOnServer(MPI_Comm writtenCom)
+   TRY
    {
      int writtenSize;
@@ -127,4 +141,5 @@
      return compressedIndexToWriteOnServer[writtenSize];
    }
+   CATCH_DUMP_ATTR
 
    //----------------------------------------------------------------
@@ -136,4 +151,5 @@
     */
    std::map<int, StdSize> CDomain::getAttributesBufferSize(CContextClient* client, bool bufferForWriting /*= false*/)
+   TRY
    {
 
@@ -176,27 +192,35 @@
      return attributesSizes;
    }
+   CATCH_DUMP_ATTR
 
    //----------------------------------------------------------------
 
    bool CDomain::isEmpty(void) const
+   TRY
    {
      return ((this->i_index.isEmpty()) || (0 == this->i_index.numElements()));
    }
+   CATCH
 
    //----------------------------------------------------------------
 
    bool CDomain::IsWritten(const StdString & filename) const
+   TRY
    {
       return (this->relFiles.find(filename) != this->relFiles.end());
    }
+   CATCH
 
    bool CDomain::isWrittenCompressed(const StdString& filename) const
+   TRY
    {
       return (this->relFilesCompressed.find(filename) != this->relFilesCompressed.end());
    }
+   CATCH
 
    //----------------------------------------------------------------
 
    bool CDomain::isDistributed(void) const
+   TRY
    {
       bool distributed =  !((!ni.isEmpty() && (ni == ni_glo) && !nj.isEmpty() && (nj == nj_glo)) ||
@@ -206,4 +230,5 @@
       return distributed;
    }
+   CATCH
 
    //----------------------------------------------------------------
@@ -215,17 +240,23 @@
     */
    bool CDomain::isCompressible(void) const
+   TRY
    {
       return isCompressible_;
    }
+   CATCH
 
    void CDomain::addRelFile(const StdString & filename)
+   TRY
    {
       this->relFiles.insert(filename);
    }
+   CATCH_DUMP_ATTR
 
    void CDomain::addRelFileCompressed(const StdString& filename)
+   TRY
    {
       this->relFilesCompressed.insert(filename);
    }
+   CATCH_DUMP_ATTR
 
    StdString CDomain::GetName(void)   { return (StdString("domain")); }
@@ -240,4 +271,5 @@
    */
    bool CDomain::distributionAttributesHaveValue() const
+   TRY
    {
       bool hasValues = true;
@@ -251,4 +283,5 @@
       return hasValues;
    }
+   CATCH
 
    /*!
@@ -260,4 +293,5 @@
    */
    void CDomain::redistribute(int nbLocalDomain)
+   TRY
    {
      if (this->isRedistributed_) return;
@@ -422,4 +456,5 @@
      checkDomain();
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -427,4 +462,5 @@
    */
    void CDomain::fillInLonLat()
+   TRY
    {
      switch (type)
@@ -444,6 +480,6 @@
      }
      completeLonLatClient() ;
-
-   }
+   }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -453,4 +489,5 @@
    */
    void CDomain::fillInRectilinearLonLat()
+   TRY
    {
      if (!lonvalue_rectilinear_read_from_file.isEmpty() && lonvalue_2d.isEmpty() && lonvalue_1d.isEmpty())
@@ -462,5 +499,5 @@
        lon_end.setValue(lonvalue_rectilinear_read_from_file(ni_glo-1));
      }
-     else
+     else if (!hasLonInReadFile_)
      {
        if (!lonvalue_2d.isEmpty()) lonvalue_2d.free();
@@ -496,5 +533,5 @@
        lat_end.setValue(latvalue_rectilinear_read_from_file(nj_glo-1));
      }
-     else
+     else if (!hasLatInReadFile_)
      {
        if (!latvalue_2d.isEmpty()) latvalue_1d.free();
@@ -521,4 +558,5 @@
      }
    }
+   CATCH_DUMP_ATTR
 
     /*
@@ -527,4 +565,5 @@
     */
    void CDomain::fillInCurvilinearLonLat()
+   TRY
    {
      if (!lonvalue_curvilinear_read_from_file.isEmpty() && lonvalue_2d.isEmpty() && lonvalue_1d.isEmpty())
@@ -569,6 +608,6 @@
        bounds_latvalue_curvilinear_read_from_file.free();
      }
-
-   }
+   }
+   CATCH_DUMP_ATTR
 
     /*
@@ -577,4 +616,5 @@
     */
    void CDomain::fillInUnstructuredLonLat()
+   TRY
    {
      if (i_index.isEmpty())
@@ -628,4 +668,5 @@
      }
    }
+   CATCH_DUMP_ATTR
 
   /*
@@ -633,4 +674,5 @@
   */
    void CDomain::AllgatherRectilinearLonLat(CArray<double,1>& lon, CArray<double,1>& lat, CArray<double,1>& lon_g, CArray<double,1>& lat_g)
+   TRY
    {
      CContext* context = CContext::getCurrent();
@@ -664,8 +706,10 @@
       delete[] nj_g ;
    }
+   CATCH_DUMP_ATTR
 
    void CDomain::fillInRectilinearBoundLonLat(CArray<double,1>& lon, CArray<double,1>& lat,
                                               CArray<double,2>& boundsLon, CArray<double,2>& boundsLat)
-   {
+   TRY
+  {
      int i,j,k;
 
@@ -766,4 +810,5 @@
       }
    }
+   CATCH_DUMP_ATTR
 
    /*
@@ -771,4 +816,5 @@
    */
    void CDomain::checkDomain(void)
+   TRY
    {
      if (type.isEmpty())
@@ -862,4 +908,5 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    size_t CDomain::getGlobalWrittenSize(void)
@@ -871,4 +918,5 @@
    // Check validity of local domain on using the combination of 3 parameters: ibegin, ni and i_index
    void CDomain::checkLocalIDomain(void)
+   TRY
    {
       // If ibegin and ni are provided then we use them to check the validity of local domain
@@ -929,7 +977,9 @@
       }
    }
+   CATCH_DUMP_ATTR
 
    // Check validity of local domain on using the combination of 3 parameters: jbegin, nj and j_index
    void CDomain::checkLocalJDomain(void)
+   TRY
    {
     // If jbegin and nj are provided then we use them to check the validity of local domain
@@ -980,8 +1030,10 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    //----------------------------------------------------------------
 
    void CDomain::checkMask(void)
+   TRY
    {
       if (!mask_1d.isEmpty() && !mask_2d.isEmpty())
@@ -1029,8 +1081,10 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    //----------------------------------------------------------------
 
    void CDomain::checkDomainData(void)
+   TRY
    {
       if (data_dim.isEmpty())
@@ -1072,8 +1126,10 @@
       }
    }
+   CATCH_DUMP_ATTR
 
    //----------------------------------------------------------------
 
    void CDomain::checkCompression(void)
+   TRY
    {
      int i,j,ind;
@@ -1202,7 +1258,9 @@
       }
    }
+   CATCH_DUMP_ATTR
 
    //----------------------------------------------------------------
    void CDomain::computeLocalMask(void)
+   TRY
    {
      localMask.resize(i_index.numElements()) ;
@@ -1236,10 +1294,13 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    void CDomain::checkEligibilityForCompressedOutput(void)
+   TRY
    {
      // We don't check if the mask or the indexes are valid here, just if they have been defined at this point.
      isCompressible_ = !mask_1d.isEmpty() || !mask_2d.isEmpty() || !data_i_index.isEmpty();
    }
+   CATCH_DUMP_ATTR
 
    //----------------------------------------------------------------
@@ -1250,4 +1311,5 @@
    */
    void CDomain::completeLonLatClient(void)
+   TRY
    {
      bool lonlatValueExisted = (0 != lonvalue.numElements()) || (0 != latvalue.numElements());
@@ -1363,4 +1425,5 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    /*
@@ -1368,4 +1431,5 @@
    */
    void CDomain::convertLonLatValue(void)
+   TRY
    {
      bool lonlatValueExisted = (0 != lonvalue.numElements()) || (0 != latvalue.numElements());
@@ -1465,7 +1529,8 @@
      }
    }
-
+   CATCH_DUMP_ATTR
 
    void CDomain::checkBounds(void)
+   TRY
    {
      bool hasBoundValues = (0 != bounds_lonvalue.numElements()) || (0 != bounds_latvalue.numElements());
@@ -1559,6 +1624,8 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    void CDomain::checkArea(void)
+   TRY
    {
      bool hasAreaValue = (!areavalue.isEmpty() && 0 != areavalue.numElements());
@@ -1588,6 +1655,8 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    void CDomain::checkLonLat()
+   TRY
    {
      if (!hasLonLat) hasLonLat = (!latvalue_1d.isEmpty() && !lonvalue_1d.isEmpty()) ||
@@ -1649,6 +1718,8 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    void CDomain::checkAttributesOnClientAfterTransformation()
+   TRY
    {
      CContext* context=CContext::getCurrent() ;
@@ -1665,4 +1736,5 @@
      this->isClientAfterTransformationChecked = true;
    }
+   CATCH_DUMP_ATTR
 
    //----------------------------------------------------------------
@@ -1670,4 +1742,5 @@
    // This function only checks all attributes of current domain
    void CDomain::checkAttributesOnClient()
+   TRY
    {
      if (this->isClientChecked) return;
@@ -1695,7 +1768,9 @@
       this->isClientChecked = true;
    }
+   CATCH_DUMP_ATTR
 
    // Send all checked attributes to server
    void CDomain::sendCheckedAttributes()
+   TRY
    {
      if (!this->isClientChecked) checkAttributesOnClient();
@@ -1710,6 +1785,8 @@
      this->isChecked = true;
    }
+   CATCH_DUMP_ATTR
 
    void CDomain::checkAttributes(void)
+   TRY
    {
       if (this->isChecked) return;
@@ -1741,4 +1818,5 @@
       this->isChecked = true;
    }
+   CATCH_DUMP_ATTR
 
   /*!
@@ -1749,4 +1827,5 @@
   */
   void CDomain::computeConnectedClients()
+  TRY
   {
     CContext* context=CContext::getCurrent() ;
@@ -1876,4 +1955,5 @@
     }
   }
+  CATCH_DUMP_ATTR
 
    /*!
@@ -1883,4 +1963,5 @@
    */
    void CDomain::computeWrittenIndex()
+   TRY
    {  
       if (computedWrittenIndex_) return;
@@ -1920,6 +2001,8 @@
       }
    }
+   CATCH_DUMP_ATTR
 
   void CDomain::computeWrittenCompressedIndex(MPI_Comm writtenComm)
+  TRY
   {
     int writtenCommSize;
@@ -1989,4 +2072,5 @@
       }
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -1995,4 +2079,5 @@
   */
   void CDomain::sendAttributes()
+  TRY
   {
     sendDistributionAttributes();
@@ -2002,9 +2087,10 @@
     sendDataIndex();
   }
-
+  CATCH
   /*!
     Send global index from client to connected client(s)
   */
   void CDomain::sendIndex()
+  TRY
   {
     int ns, n, i, j, ind, nv, idx;
@@ -2049,4 +2135,5 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -2056,4 +2143,5 @@
   */
   void CDomain::sendDistributionAttributes(void)
+  TRY
   {
     std::list<CContextClient*>::iterator it;
@@ -2102,4 +2190,5 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -2107,4 +2196,5 @@
   */
   void CDomain::sendArea()
+  TRY
   {
     if (!hasArea) return;
@@ -2150,4 +2240,5 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -2157,4 +2248,5 @@
   */
   void CDomain::sendLonLat()
+  TRY
   {
     if (!hasLonLat) return;
@@ -2245,4 +2337,5 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -2253,4 +2346,5 @@
   */
   void CDomain::sendDataIndex()
+  TRY
   {
     int ns, n, i, j, ind, nv, idx;
@@ -2321,6 +2415,8 @@
     }
   }
+  CATCH
   
   bool CDomain::dispatchEvent(CEventServer& event)
+  TRY
   {
     if (SuperClass::dispatchEvent(event)) return true;
@@ -2360,4 +2456,5 @@
     }
   }
+  CATCH
 
   /*!
@@ -2366,4 +2463,5 @@
   */
   void CDomain::recvIndex(CEventServer& event)
+  TRY
   {
     string domainId;
@@ -2379,4 +2477,5 @@
     get(domainId)->recvIndex(rankBuffers);
   }
+  CATCH
 
   /*!
@@ -2386,4 +2485,5 @@
   */
   void CDomain::recvIndex(std::map<int, CBufferIn*>& rankBuffers)
+  TRY
   {
     int nbReceived = rankBuffers.size(), i, ind, index, type_int, iIndex, jIndex;
@@ -2445,4 +2545,5 @@
     domainMask.resize(0); // Mask is not defined anymore on servers
   }
+  CATCH
 
   /*!
@@ -2451,4 +2552,5 @@
   */
   void CDomain::recvDistributionAttributes(CEventServer& event)
+  TRY
   {
     CBufferIn* buffer=event.subEvents.begin()->buffer;
@@ -2457,4 +2559,5 @@
     get(domainId)->recvDistributionAttributes(*buffer);
   }
+  CATCH
 
   /*!
@@ -2464,4 +2567,5 @@
   */
   void CDomain::recvDistributionAttributes(CBufferIn& buffer)
+  TRY
   {
     int ni_tmp, ibegin_tmp, nj_tmp, jbegin_tmp;
@@ -2479,5 +2583,5 @@
 
   }
-
+ CATCH_DUMP_ATTR
   /*!
     Receive longitude event from clients(s)
@@ -2485,4 +2589,5 @@
   */
   void CDomain::recvLon(CEventServer& event)
+  TRY
   {
     string domainId;
@@ -2498,4 +2603,5 @@
     get(domainId)->recvLon(rankBuffers);
   }
+  CATCH
 
   /*!
@@ -2504,4 +2610,5 @@
   */
   void CDomain::recvLon(std::map<int, CBufferIn*>& rankBuffers)
+  TRY
   {
     int nbReceived = rankBuffers.size(), i, ind, index, iindex, jindex, lInd;
@@ -2563,4 +2670,5 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -2569,4 +2677,5 @@
   */
   void CDomain::recvLat(CEventServer& event)
+  TRY
   {
     string domainId;
@@ -2582,4 +2691,5 @@
     get(domainId)->recvLat(rankBuffers);
   }
+  CATCH
 
   /*!
@@ -2588,4 +2698,5 @@
   */
   void CDomain::recvLat(std::map<int, CBufferIn*>& rankBuffers)
+  TRY
   {
     int nbReceived = rankBuffers.size(), i, ind, index, iindex, jindex, lInd;
@@ -2649,4 +2760,5 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -2655,4 +2767,5 @@
   */
   void CDomain::recvArea(CEventServer& event)
+  TRY
   {
     string domainId;
@@ -2668,4 +2781,5 @@
     get(domainId)->recvArea(rankBuffers);
   }
+  CATCH
 
   /*!
@@ -2674,4 +2788,5 @@
   */
   void CDomain::recvArea(std::map<int, CBufferIn*>& rankBuffers)
+  TRY
   {
     int nbReceived = rankBuffers.size(), i, ind, index, lInd;
@@ -2719,4 +2834,5 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -2728,4 +2844,5 @@
   */
   bool CDomain::isEqual(CDomain* obj)
+  TRY
   {
     vector<StdString> excludedAttr;
@@ -2750,4 +2867,5 @@
     return objEqual;
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -2756,4 +2874,5 @@
   */
   void CDomain::recvDataIndex(CEventServer& event)
+  TRY
   {
     string domainId;
@@ -2769,4 +2888,5 @@
     get(domainId)->recvDataIndex(rankBuffers);
   }
+  CATCH
 
   /*!
@@ -2780,4 +2900,5 @@
   */
   void CDomain::recvDataIndex(std::map<int, CBufferIn*>& rankBuffers)
+  TRY
   {
     int nbReceived = rankBuffers.size(), i, ind, index, indexI, indexJ, type_int, lInd;    
@@ -2846,10 +2967,13 @@
     data_jbegin.setValue(0);
   }
+  CATCH_DUMP_ATTR
 
   CTransformation<CDomain>* CDomain::addTransformation(ETranformationType transType, const StdString& id)
+  TRY
   {
     transformationMap_.push_back(std::make_pair(transType, CTransformation<CDomain>::createTransformation(transType,id)));
     return transformationMap_.back().second;
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -2858,7 +2982,9 @@
   */
   bool CDomain::hasTransformation()
+  TRY
   {
     return (!transformationMap_.empty());
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -2867,7 +2993,9 @@
   */
   void CDomain::setTransformations(const TransMapTypes& domTrans)
+  TRY
   {
     transformationMap_ = domTrans;
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -2876,9 +3004,12 @@
   */
   CDomain::TransMapTypes CDomain::getAllTransformations(void)
+  TRY
   {
     return transformationMap_;
   }
+  CATCH_DUMP_ATTR
 
   void CDomain::duplicateTransformation(CDomain* src)
+  TRY
   {
     if (src->hasTransformation())
@@ -2887,4 +3018,5 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -2892,4 +3024,5 @@
    */
   void CDomain::solveInheritanceTransformation()
+  TRY
   {
     if (hasTransformation() || !hasDirectDomainReference())
@@ -2908,6 +3041,8 @@
         refDomains[i]->setTransformations(domain->getAllTransformations());
   }
+  CATCH_DUMP_ATTR
 
   void CDomain::setContextClient(CContextClient* contextClient)
+  TRY
   {
     if (clientsSet.find(contextClient)==clientsSet.end())
@@ -2917,4 +3052,5 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -2924,4 +3060,5 @@
   */
   void CDomain::parse(xml::CXMLNode & node)
+  TRY
   {
     SuperClass::parse(node);
@@ -2954,4 +3091,5 @@
     }
   }
+  CATCH_DUMP_ATTR
    //----------------------------------------------------------------
 
Index: /XIOS/dev/dev_olga/src/node/field.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/node/field.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/node/field.cpp	(revision 1612)
@@ -71,27 +71,36 @@
 
    void CField::setVirtualVariableGroup(CVariableGroup* newVVariableGroup)
+   TRY
    {
       this->vVariableGroup = newVVariableGroup;
    }
+   CATCH
 
    CVariableGroup* CField::getVirtualVariableGroup(void) const
+   TRY
    {
       return this->vVariableGroup;
    }
+   CATCH
 
    std::vector<CVariable*> CField::getAllVariables(void) const
+   TRY
    {
       return this->vVariableGroup->getAllChildren();
    }
+   CATCH
 
    void CField::solveDescInheritance(bool apply, const CAttributeMap* const parent)
+   TRY
    {
       SuperClassAttribute::setAttributes(parent, apply);
       this->getVirtualVariableGroup()->solveDescInheritance(apply, NULL);
    }
+   CATCH_DUMP_ATTR
 
   //----------------------------------------------------------------
 
   bool CField::dispatchEvent(CEventServer& event)
+  TRY
   {
     if (SuperClass::dispatchEvent(event)) return true;
@@ -131,6 +140,8 @@
     }
   }
+  CATCH
 
   void CField::sendUpdateData(const CArray<double,1>& data)
+  TRY
   {
     CTimer::get("Field : send data").resume();
@@ -189,6 +200,8 @@
     CTimer::get("Field : send data").suspend();
   }
+  CATCH_DUMP_ATTR
 
   void CField::recvUpdateData(CEventServer& event)
+  TRY
   {
     std::map<int,CBufferIn*> rankBuffers;
@@ -207,6 +220,8 @@
     CTimer::get("Field : recv data").suspend();
   }
+  CATCH
 
   void  CField::recvUpdateData(std::map<int,CBufferIn*>& rankBuffers)
+  TRY
   {
     CContext* context = CContext::getCurrent();
@@ -249,6 +264,8 @@
     recvDataSrv.reset() ;
   }
+  CATCH_DUMP_ATTR
 
   void CField::writeUpdateData(const CArray<double,1>& data)
+  TRY
   {
     CContext* context = CContext::getCurrent();
@@ -277,6 +294,8 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   void CField::writeField(void)
+  TRY
   {
     if (!getRelFile()->isEmptyZone())
@@ -290,4 +309,5 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   /*
@@ -299,4 +319,5 @@
   */
   bool CField::sendReadDataRequest(const CDate& tsDataRequested)
+  TRY
   {
     CContext* context = CContext::getCurrent();
@@ -330,4 +351,5 @@
     return !isEOF;
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -336,4 +358,5 @@
   */
   bool CField::sendReadDataRequestIfNeeded(void)
+  TRY
   {
     const CDate& currentDate = CContext::getCurrent()->getCalendar()->getCurrentDate();
@@ -353,6 +376,8 @@
     return dataRequested;
   }
+  CATCH_DUMP_ATTR
 
   void CField::recvReadDataRequest(CEventServer& event)
+  TRY
   {
     CBufferIn* buffer = event.subEvents.begin()->buffer;
@@ -361,4 +386,5 @@
     get(fieldId)->recvReadDataRequest();
   }
+  CATCH
 
   /*!
@@ -369,4 +395,5 @@
   */
   void CField::recvReadDataRequest(void)
+  TRY
   {
     CContext* context = CContext::getCurrent();
@@ -449,4 +476,5 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -456,4 +484,5 @@
   */
   CField::EReadField CField::readField(void)
+  TRY
   {
     CContext* context = CContext::getCurrent();
@@ -508,4 +537,5 @@
     return readState;
   }
+  CATCH_DUMP_ATTR
 
   /*
@@ -516,4 +546,5 @@
   */
   void CField::recvReadDataReady(CEventServer& event)
+  TRY
   {
     string fieldId;
@@ -531,4 +562,5 @@
     get(fieldId)->recvReadDataReady(ranks, buffers);
   }
+  CATCH
 
   /*!
@@ -538,4 +570,5 @@
   */
   void CField::recvReadDataReady(vector<int> ranks, vector<CBufferIn*> buffers)
+  TRY
   {
     CContext* context = CContext::getCurrent();
@@ -574,6 +607,8 @@
       serverSourceFilter->streamDataFromServer(lastDataReceivedFromServer, data);
   }
+  CATCH_DUMP_ATTR
 
   void CField::checkForLateDataFromServer(void)
+  TRY
   {
     CContext* context = CContext::getCurrent();
@@ -607,23 +642,30 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   void CField::checkIfMustAutoTrigger(void)
+  TRY
   {
     mustAutoTrigger = serverSourceFilter ? serverSourceFilter->mustAutoTrigger() : false;
   }
+  CATCH_DUMP_ATTR
 
   void CField::autoTriggerIfNeeded(void)
+  TRY
   {
     if (mustAutoTrigger)
       serverSourceFilter->trigger(CContext::getCurrent()->getCalendar()->getCurrentDate());
   }
+  CATCH_DUMP_ATTR
 
    //----------------------------------------------------------------
 
    void CField::setRelFile(CFile* _file)
+   TRY
    {
       this->file = _file;
       hasOutputFile = true;
    }
+   CATCH_DUMP_ATTR
 
    //----------------------------------------------------------------
@@ -636,46 +678,61 @@
 
    CGrid* CField::getRelGrid(void) const
+   TRY
    {
       return this->grid;
    }
+   CATCH
 
    //----------------------------------------------------------------
 
    CFile* CField::getRelFile(void) const
+   TRY
    {
       return this->file;
    }
+   CATCH
 
    int CField::getNStep(void) const
+   TRY
    {
       return this->nstep;
    }
+   CATCH
 
    func::CFunctor::ETimeType CField::getOperationTimeType() const
+   TRY
    {
      return operationTimeType;
    }
+   CATCH
 
    //----------------------------------------------------------------
 
    void CField::incrementNStep(void)
+   TRY
    {
       this->nstep++;
    }
+   CATCH_DUMP_ATTR
 
    void CField::resetNStep(int nstep /*= 0*/)
+   TRY
    {
       this->nstep = nstep;
    }
+   CATCH_DUMP_ATTR
 
    void CField::resetNStepMax(void)
+   TRY
    {
       this->nstepMax = 0;
       nstepMaxRead = false;
    }
+   CATCH_DUMP_ATTR
 
    //----------------------------------------------------------------
 
    bool CField::isActive(bool atCurrentTimestep /*= false*/) const
+   TRY
    {
       if (clientSourceFilter)
@@ -689,35 +746,46 @@
       return false;
    }
+   CATCH
 
    //----------------------------------------------------------------
 
    bool CField::wasWritten() const
+   TRY
    {
      return written;
    }
+   CATCH
 
    void CField::setWritten()
+   TRY
    {
      written = true;
    }
+   CATCH_DUMP_ATTR
 
    //----------------------------------------------------------------
 
    bool CField::getUseCompressedOutput() const
+   TRY
    {
      return useCompressedOutput;
    }
+   CATCH
 
    void CField::setUseCompressedOutput()
+   TRY
    {
      useCompressedOutput = true;
    }
+   CATCH_DUMP_ATTR
 
    //----------------------------------------------------------------
 
    std::shared_ptr<COutputPin> CField::getInstantDataFilter()
+   TRY
    {
      return instantDataFilter;
    }
+   CATCH_DUMP_ATTR
 
    //----------------------------------------------------------------
@@ -728,4 +796,5 @@
    */
    void CField::buildGridTransformationGraph()
+   TRY
    {
      CContext* context = CContext::getCurrent();
@@ -738,4 +807,5 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -743,4 +813,5 @@
    */
    void CField::generateNewTransformationGridDest()
+   TRY
    {
      CContext* context = CContext::getCurrent();
@@ -797,6 +868,8 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    void CField::updateRef(CGrid* grid)
+   TRY
    {
      if (!grid_ref.isEmpty()) grid_ref.setValue(grid->getId());
@@ -820,4 +893,5 @@
      }
    }
+   CATCH_DUMP_ATTR
    
    /*!
@@ -826,4 +900,5 @@
    */
    void CField::solveAllEnabledFieldsAndTransform()
+   TRY
    {
      CContext* context = CContext::getCurrent();
@@ -862,6 +937,8 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    void CField::checkGridOfEnabledFields()
+   TRY
    {
      if (!isGridChecked)
@@ -871,18 +948,24 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    void CField::sendGridComponentOfEnabledFields()
+   TRY
    {
       solveGridDomainAxisRef(true);
       // solveCheckMaskIndex(true);
    }
+   CATCH_DUMP_ATTR
 
    void CField::sendGridOfEnabledFields()
+   TRY
    {
       // solveGridDomainAxisRef(true);
       solveCheckMaskIndex(true);
    }   
+   CATCH_DUMP_ATTR
 
    void CField::solveOnlyReferenceEnabledField(bool doSending2Server)
+   TRY
    {
      CContext* context = CContext::getCurrent();
@@ -910,6 +993,8 @@
      }
    }
-     
+   CATCH_DUMP_ATTR
+
    void CField::solveAllReferenceEnabledField(bool doSending2Server)
+   TRY
    {
      CContext* context = CContext::getCurrent();
@@ -940,23 +1025,31 @@
      solveCheckMaskIndex(doSending2Server);
    }
+   CATCH_DUMP_ATTR
 
    std::map<int, StdSize> CField::getGridAttributesBufferSize(CContextClient* client, bool bufferForWriting /*= "false"*/)
+   TRY
    {
      return grid->getAttributesBufferSize(client, bufferForWriting);
    }
+   CATCH_DUMP_ATTR
 
    std::map<int, StdSize> CField::getGridDataBufferSize(CContextClient* client, bool bufferForWriting /*= "false"*/)
+   TRY
    {
      return grid->getDataBufferSize(client, getId(), bufferForWriting);
    }
+   CATCH_DUMP_ATTR
 
    size_t CField::getGlobalWrittenSize()
+   TRY
    {
      return grid->getGlobalWrittenSize();
    }
+   CATCH_DUMP_ATTR
 
    //----------------------------------------------------------------
 
    void CField::solveServerOperation(void)
+   TRY
    {
       CContext* context = CContext::getCurrent();
@@ -1001,4 +1094,5 @@
       operationTimeType = functor->timeType();
    }
+   CATCH_DUMP_ATTR
 
    //----------------------------------------------------------------
@@ -1013,4 +1107,5 @@
     */
    void CField::buildFilterGraph(CGarbageCollector& gc, bool enableOutput)
+   TRY
    {     
     if (!isReferenceSolvedAndTransformed) solveAllEnabledFieldsAndTransform();
@@ -1118,4 +1213,5 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -1127,4 +1223,5 @@
     */
    std::shared_ptr<COutputPin> CField::getFieldReference(CGarbageCollector& gc)
+   TRY
    {
      if (instantDataFilter || field_ref.isEmpty())
@@ -1150,4 +1247,5 @@
      return filters.second;
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -1161,4 +1259,5 @@
     */
    std::shared_ptr<COutputPin> CField::getSelfReference(CGarbageCollector& gc)
+   TRY
    {
      if (instantDataFilter || !hasExpression())
@@ -1203,4 +1302,5 @@
      return selfReferenceFilter;
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -1214,4 +1314,5 @@
     */
    std::shared_ptr<COutputPin> CField::getTemporalDataFilter(CGarbageCollector& gc, CDuration outFreq)
+   TRY
    {
      std::map<CDuration, std::shared_ptr<COutputPin> >::iterator it = temporalDataFilters.find(outFreq);
@@ -1237,4 +1338,5 @@
      return it->second;
    }
+   CATCH_DUMP_ATTR
 
   /*!
@@ -1248,4 +1350,5 @@
    
    std::shared_ptr<COutputPin> CField::getSelfTemporalDataFilter(CGarbageCollector& gc, CDuration outFreq)
+   TRY
    {
      if (instantDataFilter || !hasExpression())
@@ -1278,4 +1381,5 @@
      }
   }
+   CATCH_DUMP_ATTR
 
    //----------------------------------------------------------------
@@ -1296,4 +1400,5 @@
 
    void CField::solveGridReference(void)
+   TRY
    {
       if (grid_ref.isEmpty() && domain_ref.isEmpty() && axis_ref.isEmpty() && scalar_ref.isEmpty())
@@ -1379,16 +1484,22 @@
       }
    }
+   CATCH_DUMP_ATTR
 
    void CField::solveGridDomainAxisRef(bool checkAtt)
+   TRY
    {
      grid->solveDomainAxisRef(checkAtt);
    }
+   CATCH_DUMP_ATTR
 
    void CField::solveCheckMaskIndex(bool doSendingIndex)
+   TRY
    {
      grid->checkMaskIndex(doSendingIndex);
    }
+   CATCH_DUMP_ATTR
 
    void CField::solveTransformedGrid()
+   TRY
    {
      if (grid && !grid->isTransformed() && hasDirectFieldReference() && grid != getDirectFieldReference()->grid)
@@ -1439,6 +1550,8 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    void CField::solveGenerateGrid()
+   TRY
    {
      if (grid && !grid->isTransformed() && hasDirectFieldReference() && grid != getDirectFieldReference()->grid)
@@ -1447,10 +1560,13 @@
        grid->completeGrid();
    }
+   CATCH_DUMP_ATTR
 
    void CField::solveGridDomainAxisBaseRef()
+   TRY
    {
      grid->solveDomainAxisRef(false);
      grid->solveDomainAxisBaseRef();
    }
+   CATCH_DUMP_ATTR
 
    ///-------------------------------------------------------------------
@@ -1458,4 +1574,5 @@
    template <>
    void CGroupTemplate<CField, CFieldGroup, CFieldAttributes>::solveRefInheritance(void)
+   TRY
    {
       if (this->group_ref.isEmpty()) return;
@@ -1481,16 +1598,22 @@
       }
    }
+   CATCH_DUMP_ATTR
 
    void CField::scaleFactorAddOffset(double scaleFactor, double addOffset)
+   TRY
    {
      recvDataSrv = (recvDataSrv - addOffset) / scaleFactor;
    }
+   CATCH_DUMP_ATTR
 
    void CField::invertScaleFactorAddOffset(double scaleFactor, double addOffset)
+   TRY
    {
      recvDataSrv = recvDataSrv * scaleFactor + addOffset;
    }
+   CATCH_DUMP_ATTR
 
    void CField::outputField(CArray<double,1>& fieldOut)
+   TRY
    { 
       CArray<size_t,1>& outIndexClient = grid->localIndexToWriteOnClient;
@@ -1501,6 +1624,8 @@
       }
    }
+   CATCH_DUMP_ATTR
 
    void CField::inputField(CArray<double,1>& fieldIn)
+   TRY
    {
       CArray<size_t,1>& outIndexClient = grid->localIndexToWriteOnClient;
@@ -1510,8 +1635,9 @@
         recvDataSrv(outIndexClient(idx)) = fieldIn(outIndexServer(idx));
       }
-
-   }
+   }
+   CATCH_DUMP_ATTR
 
    void CField::outputCompressedField(CArray<double,1>& fieldOut)
+   TRY
    {
       CArray<size_t,1>& outIndexClient = grid->localIndexToWriteOnClient;
@@ -1522,8 +1648,10 @@
       }
    }
+   CATCH_DUMP_ATTR
 
    ///-------------------------------------------------------------------
 
    void CField::parse(xml::CXMLNode& node)
+   TRY
    {
       string newContent ;
@@ -1540,4 +1668,5 @@
       if (node.getContent(newContent)) content=newContent ;
     }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -1547,4 +1676,5 @@
    */
    const std::vector<StdString>& CField::getRefDomainAxisIds()
+   TRY
    {
      CGrid* cgPtr = getRelGrid();
@@ -1575,16 +1705,22 @@
      return (domAxisScalarIds_);
    }
+   CATCH_DUMP_ATTR
 
    CVariable* CField::addVariable(const string& id)
+   TRY
    {
      return vVariableGroup->createChild(id);
    }
+   CATCH
 
    CVariableGroup* CField::addVariableGroup(const string& id)
+   TRY
    {
      return vVariableGroup->createChildGroup(id);
    }
+   CATCH
 
    void CField::setContextClient(CContextClient* contextClient)
+   TRY
    {
      CContext* context = CContext::getCurrent();
@@ -1602,11 +1738,15 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    CContextClient* CField::getContextClient()
+   TRY
    {
      return client;
    }
+   CATCH
 
    void CField::sendAddAllVariables(CContextClient* client)
+   TRY
    {
      std::vector<CVariable*> allVar = getAllVariables();
@@ -1621,5 +1761,5 @@
      }
    }
-
+   CATCH_DUMP_ATTR
 
    /*!
@@ -1629,4 +1769,5 @@
     
    void CField::sendAllAttributesToServer(CContextClient* client)
+   TRY
    {
      if (grid_ref.isEmpty())
@@ -1638,16 +1779,22 @@
      else SuperClass::sendAllAttributesToServer(client) ;
    }
+   CATCH_DUMP_ATTR
     
    void CField::sendAddVariable(const string& id, CContextClient* client)
+   TRY
    {
       sendAddItem(id, (int)EVENT_ID_ADD_VARIABLE, client);
    }
+   CATCH_DUMP_ATTR
 
    void CField::sendAddVariableGroup(const string& id, CContextClient* client)
+   TRY
    {
       sendAddItem(id, (int)EVENT_ID_ADD_VARIABLE_GROUP, client);
    }
+   CATCH_DUMP_ATTR
 
    void CField::recvAddVariable(CEventServer& event)
+   TRY
    {
 
@@ -1657,6 +1804,8 @@
       get(id)->recvAddVariable(*buffer);
    }
+   CATCH
 
    void CField::recvAddVariable(CBufferIn& buffer)
+   TRY
    {
       string id;
@@ -1664,6 +1813,8 @@
       addVariable(id);
    }
+   CATCH_DUMP_ATTR
 
    void CField::recvAddVariableGroup(CEventServer& event)
+   TRY
    {
 
@@ -1673,6 +1824,8 @@
       get(id)->recvAddVariableGroup(*buffer);
    }
+   CATCH
 
    void CField::recvAddVariableGroup(CBufferIn& buffer)
+   TRY
    {
       string id;
@@ -1680,4 +1833,5 @@
       addVariableGroup(id);
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -1685,4 +1839,5 @@
     */
    void CField::checkTimeAttributes(CDuration* freqOp)
+   TRY
    {
      bool isFieldRead  = file && !file->mode.isEmpty() && file->mode == CFile::mode_attr::read;
@@ -1706,4 +1861,5 @@
        freq_offset.setValue(isFieldRead ? NoneDu : (freq_op.getValue() - TimeStep));
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -1712,4 +1868,5 @@
     */
    const string& CField::getExpression(void)
+   TRY
    {
      if (!expr.isEmpty() && content.empty())
@@ -1721,14 +1878,19 @@
      return content;
    }
+   CATCH_DUMP_ATTR
 
    bool CField::hasExpression(void) const
+   TRY
    {
      return (!expr.isEmpty() || !content.empty());
    }
+   CATCH
 
    bool CField::hasGridMask(void) const
+   TRY
    {
      return (this->grid->hasMask());
    }
+   CATCH
 
    DEFINE_REF_FUNC(Field,field)
Index: /XIOS/dev/dev_olga/src/node/file.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/node/file.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/node/file.cpp	(revision 1612)
@@ -53,7 +53,9 @@
 
    const StdString CFile::getFileOutputName(void) const
+   TRY
    {
      return (name.isEmpty() ? getId() : name) + (name_suffix.isEmpty() ? StdString("") :  name_suffix.getValue());
    }
+   CATCH
 
    //----------------------------------------------------------------
@@ -65,7 +67,9 @@
    */
    std::shared_ptr<CDataOutput> CFile::getDataOutput(void) const
+   TRY
    {
       return data_out;
    }
+   CATCH
 
    /*!
@@ -76,7 +80,9 @@
    */
    std::shared_ptr<CDataInput> CFile::getDataInput(void) const
+   TRY
    {
       return data_in;
    }
+   CATCH
 
    /*!
@@ -88,7 +94,9 @@
    */
    CFieldGroup* CFile::getVirtualFieldGroup(void) const
+   TRY
    {
       return (this->vFieldGroup);
    }
+   CATCH
 
    /*!
@@ -100,19 +108,25 @@
    */
    CVariableGroup* CFile::getVirtualVariableGroup(void) const
+   TRY
    {
       return (this->vVariableGroup);
    }
+   CATCH
 
    //! Get all fields of a file
    std::vector<CField*> CFile::getAllFields(void) const
+   TRY
    {
       return (this->vFieldGroup->getAllChildren());
    }
+   CATCH
 
    //! Get all variables of a file
    std::vector<CVariable*> CFile::getAllVariables(void) const
+   TRY
    {
       return (this->vVariableGroup->getAllChildren());
    }
+   CATCH
 
    //----------------------------------------------------------------
@@ -129,4 +143,5 @@
                                                 int default_level,
                                                 bool default_enabled)
+   TRY
    {
       if (!this->enabledFields.empty())
@@ -145,10 +160,8 @@
          {
             if (! (*it)->enabled.getValue()) continue;
-//            { it--; this->enabledFields.erase(it+1); continue; }
          }
          else // Si l'attribut 'enabled' n'est pas dfini ...
          {
             if (!default_enabled) continue;
-//            { it--; this->enabledFields.erase(it+1); continue; }
          }
 
@@ -156,18 +169,11 @@
          {
             if ((*it)->level.getValue() > _outputlevel) continue;
-//            { it--; this->enabledFields.erase(it+1); continue; }
          }
          else // Si l'attribut 'level' n'est pas dfini ...
          {
             if (default_level > _outputlevel) continue;
-//            { it--; this->enabledFields.erase(it+1); continue; }
          }
 
-//         CField* field_tmp=(*it).get();
-//         shared_ptr<CField> sptfield=*it;
-//         field_tmp->refObject.push_back(sptfield);
          newEnabledFields.push_back(*it);
-         // Le champ est finalement actif, on y ajoute sa propre reference.
-//         (*it)->refObject.push_back(*it);
          // Le champ est finalement actif, on y ajoute la rfrence au champ de base.
          (*it)->setRelFile(CFile::get(this));
@@ -177,20 +183,26 @@
       return (this->enabledFields);
    }
+   CATCH_DUMP_ATTR
 
    //----------------------------------------------------------------
    //! Change virtual field group to a new one
    void CFile::setVirtualFieldGroup(CFieldGroup* newVFieldGroup)
+   TRY
    {
       this->vFieldGroup = newVFieldGroup;
    }
+   CATCH_DUMP_ATTR
 
    //! Change virtual variable group to new one
    void CFile::setVirtualVariableGroup(CVariableGroup* newVVariableGroup)
+   TRY
    {
       this->vVariableGroup = newVVariableGroup;
    }
+   CATCH_DUMP_ATTR
 
    //----------------------------------------------------------------
    bool CFile::isSyncTime(void)
+   TRY
    {
      CContext* context = CContext::getCurrent();
@@ -206,7 +218,9 @@
       return false;
     }
+    CATCH_DUMP_ATTR
 
    //! Initialize a file in order to write into it
    void CFile::initWrite(void)
+   TRY
    {
       CContext* context = CContext::getCurrent();
@@ -261,7 +275,9 @@
       if (time_counter_name.isEmpty()) time_counter_name = "time_counter";
     }
+    CATCH_DUMP_ATTR
 
     //! Initialize a file in order to write into it
     void CFile::initRead(void)
+    TRY
     {
       if (checkRead) return;
@@ -269,4 +285,5 @@
       checkRead = true;
     }
+    CATCH_DUMP_ATTR
 
     /*!
@@ -274,4 +291,5 @@
     */
     void CFile::createSubComFile()
+    TRY
     {
       CContext* context = CContext::getCurrent();
@@ -292,4 +310,5 @@
       if (allZoneEmpty) MPI_Comm_free(&fileComm);
     }
+    CATCH_DUMP_ATTR
 
     /*
@@ -299,4 +318,5 @@
     */
     void CFile::checkWriteFile(void)
+    TRY
     {
       CContext* context = CContext::getCurrent();
@@ -315,4 +335,5 @@
       }
     }
+    CATCH_DUMP_ATTR
 
     /*
@@ -323,4 +344,5 @@
     */
     void CFile::checkReadFile(void)
+    TRY
     {
       CContext* context = CContext::getCurrent();
@@ -340,4 +362,5 @@
       }
     }
+    CATCH_DUMP_ATTR
 
     /*!
@@ -346,7 +369,9 @@
     */
     bool CFile::isEmptyZone()
+    TRY
     {
       return allZoneEmpty;
     }
+    CATCH_DUMP_ATTR
 
     /*!
@@ -357,4 +382,5 @@
     */
    bool CFile::checkSync(void)
+   TRY
    {
      CContext* context = CContext::getCurrent();
@@ -371,4 +397,5 @@
       return false;
     }
+   CATCH_DUMP_ATTR
 
     /*!
@@ -379,4 +406,5 @@
     */
     bool CFile::checkSplit(void)
+    TRY
     {
       CContext* context = CContext::getCurrent();
@@ -402,4 +430,5 @@
       return false;
     }
+    CATCH_DUMP_ATTR
 
    /*!
@@ -408,4 +437,5 @@
    */
    void CFile::createHeader(void)
+   TRY
    {
       CContext* context = CContext::getCurrent();
@@ -594,4 +624,5 @@
       }
    }
+   CATCH_DUMP_ATTR
 
   /*!
@@ -599,4 +630,5 @@
   */
   void CFile::openInReadMode()
+  TRY
   {
     CContext* context = CContext::getCurrent();
@@ -675,7 +707,9 @@
     }
   }
+  CATCH_DUMP_ATTR
 
    //! Close file
    void CFile::close(void)
+   TRY
    {
      if (!allZoneEmpty)
@@ -690,7 +724,10 @@
       if (fileComm != MPI_COMM_NULL) MPI_Comm_free(&fileComm);
    }
+   CATCH_DUMP_ATTR
+
    //----------------------------------------------------------------
 
    void CFile::readAttributesOfEnabledFieldsInReadMode()
+   TRY
    {
      if (enabledFields.empty()) return;
@@ -722,5 +759,5 @@
      close();
    }
-
+   CATCH_DUMP_ATTR
 
    /*!
@@ -729,4 +766,5 @@
    */
    void CFile::parse(xml::CXMLNode & node)
+   TRY
    {
       SuperClass::parse(node);
@@ -741,6 +779,7 @@
         node.goToParentElement();
       }
-
-   }
+   }
+   CATCH_DUMP_ATTR
+
    //----------------------------------------------------------------
 
@@ -750,4 +789,5 @@
    */
    StdString CFile::toString(void) const
+   TRY
    {
       StdOStringStream oss;
@@ -762,4 +802,5 @@
       return (oss.str());
    }
+   CATCH
 
    //----------------------------------------------------------------
@@ -772,4 +813,5 @@
    */
    void CFile::solveDescInheritance(bool apply, const CAttributeMap * const parent)
+   TRY
    {
       SuperClassAttribute::setAttributes(parent,apply);
@@ -777,4 +819,5 @@
       this->getVirtualVariableGroup()->solveDescInheritance(apply, NULL);
    }
+   CATCH_DUMP_ATTR
 
    //----------------------------------------------------------------
@@ -789,4 +832,5 @@
    */
    void CFile::solveOnlyRefOfEnabledFields(bool sendToServer)
+   TRY
    {
      int size = this->enabledFields.size();
@@ -796,6 +840,8 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    void CFile::checkGridOfEnabledFields()
+   TRY
    { 
      int size = this->enabledFields.size();
@@ -805,6 +851,8 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    void CFile::sendGridComponentOfEnabledFields()
+   TRY
    { 
      int size = this->enabledFields.size();
@@ -814,4 +862,5 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -820,4 +869,5 @@
    */
    void CFile::sortEnabledFieldsForUgrid()
+   TRY
    {
      int size = this->enabledFields.size();
@@ -868,6 +918,8 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    void CFile::sendGridOfEnabledFields()
+   TRY
    { 
      int size = this->enabledFields.size();
@@ -877,6 +929,8 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    void CFile::generateNewTransformationGridDest()
+   TRY
    {
      int size = this->enabledFields.size();
@@ -886,4 +940,5 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -896,4 +951,5 @@
    */
    void CFile::solveAllRefOfEnabledFieldsAndTransform(bool sendToServer)
+   TRY
    {
      int size = this->enabledFields.size();
@@ -903,4 +959,5 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -910,4 +967,5 @@
     */
    void CFile::buildFilterGraphOfEnabledFields(CGarbageCollector& gc)
+   TRY
    {
      int size = this->enabledFields.size();
@@ -917,4 +975,5 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -922,4 +981,5 @@
     */
    void CFile::postProcessFilterGraph()
+   TRY
    {
      int size = this->enabledFields.size();
@@ -929,4 +989,5 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -934,4 +995,5 @@
    */
    void CFile::prefetchEnabledReadModeFields(void)
+   TRY
    {
      if (mode.isEmpty() || mode.getValue() != mode_attr::read)
@@ -942,4 +1004,5 @@
        this->enabledFields[i]->sendReadDataRequest(CContext::getCurrent()->getCalendar()->getCurrentDate());
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -949,4 +1012,5 @@
    */
    void CFile::doPreTimestepOperationsForEnabledReadModeFields(void)
+   TRY
    {
      if (mode.isEmpty() || mode.getValue() != mode_attr::read)
@@ -960,4 +1024,5 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -966,4 +1031,5 @@
    */
    void CFile::doPostTimestepOperationsForEnabledReadModeFields(void)
+   TRY
    {
      if (mode.isEmpty() || mode.getValue() != mode_attr::read)
@@ -976,6 +1042,8 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    void CFile::solveFieldRefInheritance(bool apply)
+   TRY
    {
       // Rsolution des hritages par rfrence de chacun des champs contenus dans le fichier.
@@ -984,4 +1052,5 @@
          allF[i]->solveRefInheritance(apply);
    }
+   CATCH_DUMP_ATTR
 
    //----------------------------------------------------------------
@@ -996,7 +1065,9 @@
    */
    CField* CFile::addField(const string& id)
+   TRY
    {
      return vFieldGroup->createChild(id);
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -1008,7 +1079,9 @@
    */
    CFieldGroup* CFile::addFieldGroup(const string& id)
+   TRY
    {
      return vFieldGroup->createChildGroup(id);
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -1023,7 +1096,9 @@
    */
    CVariable* CFile::addVariable(const string& id)
+   TRY
    {
      return vVariableGroup->createChild(id);
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -1035,9 +1110,12 @@
    */
    CVariableGroup* CFile::addVariableGroup(const string& id)
+   TRY
    {
      return vVariableGroup->createChildGroup(id);
    }
+   CATCH_DUMP_ATTR
 
    void CFile::setContextClient(CContextClient* newContextClient)
+   TRY
    {
      client = newContextClient;
@@ -1048,19 +1126,26 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    CContextClient* CFile::getContextClient()
+   TRY
    {
      return client;
    }
+   CATCH_DUMP_ATTR
 
    void CFile::setReadContextClient(CContextClient* readContextclient)
+   TRY
    {
      read_client = readContextclient;
    }
+   CATCH_DUMP_ATTR
 
    CContextClient* CFile::getReadContextClient()
+   TRY
    {
      return read_client;
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -1069,7 +1154,9 @@
    */
    void CFile::sendAddField(const string& id, CContextClient* client)
+   TRY
    {
       sendAddItem(id, EVENT_ID_ADD_FIELD, client);
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -1078,7 +1165,9 @@
    */
    void CFile::sendAddFieldGroup(const string& id, CContextClient* client)
+   TRY
    {
       sendAddItem(id, (int)EVENT_ID_ADD_FIELD_GROUP, client);
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -1087,4 +1176,5 @@
    */
    void CFile::recvAddField(CEventServer& event)
+   TRY
    {
 
@@ -1094,4 +1184,5 @@
       get(id)->recvAddField(*buffer);
    }
+   CATCH
 
    /*!
@@ -1100,4 +1191,5 @@
    */
    void CFile::recvAddField(CBufferIn& buffer)
+   TRY
    {
       string id;
@@ -1105,4 +1197,5 @@
       addField(id);
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -1111,4 +1204,5 @@
    */
    void CFile::recvAddFieldGroup(CEventServer& event)
+   TRY
    {
 
@@ -1118,4 +1212,5 @@
       get(id)->recvAddFieldGroup(*buffer);
    }
+   CATCH
 
    /*!
@@ -1124,4 +1219,5 @@
    */
    void CFile::recvAddFieldGroup(CBufferIn& buffer)
+   TRY
    {
       string id;
@@ -1129,4 +1225,5 @@
       addFieldGroup(id);
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -1137,4 +1234,5 @@
    */
    void CFile::sendAddAllVariables(CContextClient* client)
+   TRY
    {
      std::vector<CVariable*> allVar = getAllVariables();
@@ -1149,4 +1247,5 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -1156,7 +1255,9 @@
    */
    void CFile::sendAddVariableGroup(const string& id, CContextClient* client)
+   TRY
    {
       sendAddItem(id, (int)EVENT_ID_ADD_VARIABLE_GROUP, client);
    }
+   CATCH_DUMP_ATTR
 
    /*
@@ -1166,7 +1267,9 @@
    */
    void CFile::sendAddVariable(const string& id, CContextClient* client)
+   TRY
    {
       sendAddItem(id, (int)EVENT_ID_ADD_VARIABLE, client);
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -1175,6 +1278,6 @@
    */
    void CFile::recvAddVariable(CEventServer& event)
-   {
-
+   TRY
+   {
       CBufferIn* buffer = event.subEvents.begin()->buffer;
       string id;
@@ -1182,4 +1285,5 @@
       get(id)->recvAddVariable(*buffer);
    }
+   CATCH
 
    /*!
@@ -1188,4 +1292,5 @@
    */
    void CFile::recvAddVariable(CBufferIn& buffer)
+   TRY
    {
       string id;
@@ -1193,4 +1298,5 @@
       addVariable(id);
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -1199,4 +1305,5 @@
    */
    void CFile::recvAddVariableGroup(CEventServer& event)
+   TRY
    {
 
@@ -1206,4 +1313,5 @@
       get(id)->recvAddVariableGroup(*buffer);
    }
+   CATCH
 
    /*!
@@ -1212,4 +1320,5 @@
    */
    void CFile::recvAddVariableGroup(CBufferIn& buffer)
+   TRY
    {
       string id;
@@ -1217,4 +1326,5 @@
       addVariableGroup(id);
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -1226,4 +1336,5 @@
    */
    void CFile::sendEnabledFields(CContextClient* client)
+   TRY
    {
      size_t size = this->enabledFields.size();
@@ -1237,5 +1348,5 @@
      }
    }
-
+   CATCH_DUMP_ATTR
 
    /*!
@@ -1247,4 +1358,5 @@
    */
    bool CFile::dispatchEvent(CEventServer& event)
+   TRY
    {
       if (SuperClass::dispatchEvent(event)) return true;
@@ -1278,7 +1390,26 @@
       }
    }
-
-
-
+   CATCH
+
+   ///--------------------------------------------------------------
+   /*!
+   */
+   StdString CFile::dumpClassAttributes(void)
+   {
+     StdString str;
+     CContext* context = CContext::getCurrent();
+     str.append("context=\"");
+     str.append(context->getId());
+     str.append("\"");
+     str.append(" enabled fields=\"");
+     int size = this->enabledFields.size();
+     for (int i = 0; i < size; ++i)
+     {
+       str.append(this->enabledFields[i]->getId());
+       str.append(" ");
+     }
+     str.append("\"");
+     return str;
+   }
 
    ///---------------------------------------------------------------
Index: /XIOS/dev/dev_olga/src/node/file.hpp
===================================================================
--- /XIOS/dev/dev_olga/src/node/file.hpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/node/file.hpp	(revision 1612)
@@ -81,4 +81,6 @@
                                                 int default_level = 1,
                                                 bool default_enabled = true);
+
+         StdString dumpClassAttributes(void);
 
       public :
Index: /XIOS/dev/dev_olga/src/node/grid.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/node/grid.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/node/grid.cpp	(revision 1612)
@@ -82,11 +82,14 @@
 
    StdSize CGrid::getDimension(void)
+   TRY
    {
       return getGlobalDimension().size();
    }
+   CATCH_DUMP_ATTR
 
    //---------------------------------------------------------------
 
    StdSize CGrid::getDataSize(void) const
+   TRY
    {
      StdSize retvalue = 1;
@@ -98,4 +101,5 @@
      return retvalue;
    }
+   CATCH
 
    /*!
@@ -106,4 +110,5 @@
     */
    std::map<int, StdSize> CGrid::getAttributesBufferSize(CContextClient* client, bool bufferForWriting)
+   TRY
    {
      std::map<int, StdSize> attributesSizes = getMinimumBufferSizeForAttributes(client);
@@ -147,4 +152,5 @@
      return attributesSizes;
   }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -156,4 +162,5 @@
     */
    std::map<int, StdSize> CGrid::getDataBufferSize(CContextClient* client, const std::string& id /*= ""*/, bool bufferForWriting /*= "false"*/)
+   TRY
    {     
      // The record index is sometimes sent along with the data but we always
@@ -180,6 +187,8 @@
      return dataSizes;
    }
+   CATCH_DUMP_ATTR
 
    size_t CGrid::getGlobalWrittenSize(void)
+   TRY
    {
 	 std::vector<CDomain*> domainP = this->getDomains();
@@ -191,7 +200,8 @@
      return globalGridSize ;
    }
-   
+   CATCH_DUMP_ATTR
    
    void CGrid::checkAttributesAfterTransformation()
+   TRY
    {
       setAxisList();
@@ -228,4 +238,5 @@
       }
    }
+   CATCH_DUMP_ATTR
 
    //---------------------------------------------------------------
@@ -237,19 +248,25 @@
     */
    bool CGrid::isCompressible(void) const
+   TRY
    {
       return isCompressible_;
    }
+   CATCH
 
    //---------------------------------------------------------------
 
    void CGrid::addRelFileCompressed(const StdString& filename)
+   TRY
    {
       this->relFilesCompressed.insert(filename);
    }
+   CATCH_DUMP_ATTR
 
    bool CGrid::isWrittenCompressed(const StdString& filename) const
+   TRY
    {
       return (this->relFilesCompressed.find(filename) != this->relFilesCompressed.end());
    }
+   CATCH
 
    //---------------------------------------------------------------
@@ -258,4 +275,5 @@
    */
    void CGrid::solveDomainAxisRef(bool areAttributesChecked)
+   TRY
    {
      if (this->isDomainAxisChecked) return;
@@ -266,4 +284,5 @@
      this->isDomainAxisChecked = areAttributesChecked;
    }
+   CATCH_DUMP_ATTR
 
    /*
@@ -272,4 +291,5 @@
    */
    void CGrid::solveDomainAxisBaseRef()
+   TRY
    {
      if (this->hasDomainAxisBaseRef_) return;
@@ -297,12 +317,16 @@
      this->hasDomainAxisBaseRef_ = true;
    }
+   CATCH_DUMP_ATTR
 
    void CGrid::checkEligibilityForCompressedOutput()
+   TRY
    {
      // We don't check if the mask is valid here, just if a mask has been defined at this point.
      isCompressible_ = !mask_1d.isEmpty() || !mask_2d.isEmpty() || !mask_3d.isEmpty();
    }
+   CATCH_DUMP_ATTR
 
    void CGrid::checkMaskIndex(bool doSendingIndex)
+   TRY
    {
      CContext* context = CContext::getCurrent();
@@ -339,10 +363,12 @@
       this->isChecked = true;
    }
-
+   CATCH_DUMP_ATTR
    bool CGrid::hasMask() const
+   TRY
    {
      return (!mask_1d.isEmpty() || !mask_2d.isEmpty() || !mask_3d.isEmpty() ||
              !mask_4d.isEmpty() || !mask_5d.isEmpty() || !mask_6d.isEmpty() || !mask_7d.isEmpty());
    }
+   CATCH
 
    /*
@@ -350,4 +376,5 @@
    */
    void CGrid::createMask(void)
+   TRY
    {
       using namespace std;
@@ -387,4 +414,5 @@
       }
    }
+   CATCH_DUMP_ATTR
 
    /*
@@ -392,4 +420,5 @@
    */
    void CGrid::checkMask(void)
+   TRY
    {
       using namespace std;
@@ -429,5 +458,6 @@
       }
    }
-      
+   CATCH_DUMP_ATTR
+
    /*
      Modify value of mask in a certain index
@@ -437,4 +467,5 @@
    */
    void CGrid::modifyMask(const CArray<int,1>& indexToModify, bool modifyValue)
+   TRY
    {
       using namespace std;
@@ -472,4 +503,5 @@
       }
    }
+   CATCH_DUMP_ATTR
 
    /*
@@ -479,4 +511,5 @@
    */
    void CGrid::modifyMaskSize(const std::vector<int>& newDimensionSize, bool newValue)
+   TRY
    {      
       std::vector<CDomain*> domainP = this->getDomains();
@@ -513,8 +546,10 @@
       }
    }
+   CATCH_DUMP_ATTR
 
    //---------------------------------------------------------------
 
    void CGrid::solveDomainRef(bool sendAtt)
+   TRY
    {
       setDomainList();
@@ -529,8 +564,10 @@
       }
    }
+   CATCH_DUMP_ATTR
 
    //---------------------------------------------------------------
 
    void CGrid::solveAxisRef(bool sendAtt)
+   TRY
    {
       setAxisList();
@@ -560,8 +597,10 @@
       }
    }
+   CATCH_DUMP_ATTR
 
    //---------------------------------------------------------------
 
    void CGrid::solveScalarRef(bool sendAtt)
+   TRY
    {
       setScalarList();
@@ -577,4 +616,5 @@
       }
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -582,4 +622,5 @@
    */
    void CGrid::computeWrittenIndex()
+   TRY
    {      
       if (computedWrittenIndex_) return;
@@ -641,4 +682,5 @@
       }
    }
+   CATCH_DUMP_ATTR
 
    //---------------------------------------------------------------
@@ -651,4 +693,5 @@
    */
    void CGrid::computeClientIndex()
+   TRY
    {
      CContext* context = CContext::getCurrent();
@@ -711,4 +754,5 @@
       }
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -716,4 +760,5 @@
    */
    void CGrid::computeConnectedClients()
+   TRY
    {
      CContext* context = CContext::getCurrent();
@@ -833,4 +878,5 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -842,4 +888,5 @@
    */
    void CGrid::computeIndex(void)
+   TRY
    {
      CContext* context = CContext::getCurrent();
@@ -868,4 +915,5 @@
      }
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -881,4 +929,5 @@
                                      const CContextClient* client,
                                      CClientServerMapping::GlobalIndexMap& globalIndexOnServer)
+   TRY
    {
      int serverSize = client->serverSize;
@@ -1047,7 +1096,9 @@
     }
    }
-   //----------------------------------------------------------------
+   CATCH_DUMP_ATTR
+//----------------------------------------------------------------
 
    CGrid* CGrid::createGrid(CDomain* domain)
+   TRY
    {
       std::vector<CDomain*> vecDom(1, domain);
@@ -1056,7 +1107,9 @@
       return createGrid(vecDom, vecAxis);
    }
+   CATCH
 
    CGrid* CGrid::createGrid(CDomain* domain, CAxis* axis)
-   {
+   TRY
+  {
       std::vector<CDomain*> vecDom(1, domain);
       std::vector<CAxis*> vecAxis(1, axis);
@@ -1064,20 +1117,26 @@
       return createGrid(vecDom, vecAxis);
    }
+   CATCH
 
    CGrid* CGrid::createGrid(const std::vector<CDomain*>& domains, const std::vector<CAxis*>& axis,
                             const CArray<int,1>& axisDomainOrder)
+   TRY
    {
      std::vector<CScalar*> vecScalar;
      return createGrid(generateId(domains, axis, vecScalar, axisDomainOrder), domains, axis, vecScalar, axisDomainOrder);
    }
+   CATCH
 
    CGrid* CGrid::createGrid(const std::vector<CDomain*>& domains, const std::vector<CAxis*>& axis,
                             const std::vector<CScalar*>& scalars, const CArray<int,1>& axisDomainOrder)
+   TRY
    {
      return createGrid(generateId(domains, axis, scalars, axisDomainOrder), domains, axis, scalars, axisDomainOrder);
    }
+   CATCH
 
    CGrid* CGrid::createGrid(StdString id, const std::vector<CDomain*>& domains, const std::vector<CAxis*>& axis,
                             const std::vector<CScalar*>& scalars, const CArray<int,1>& axisDomainOrder)
+   TRY
    {
       if (axisDomainOrder.numElements() > 0 && axisDomainOrder.numElements() != (domains.size() + axis.size() + scalars.size()))
@@ -1121,6 +1180,8 @@
       return grid;
    }
+   CATCH
 
    CGrid* CGrid::cloneGrid(const StdString& idNewGrid, CGrid* gridSrc)
+   TRY
    {
      std::vector<CDomain*> domainSrcTmp = gridSrc->getDomains(), domainSrc;
@@ -1162,7 +1223,9 @@
       return grid;
    }
+   CATCH
 
    StdString CGrid::generateId(const std::vector<CDomain*>& domains, const std::vector<CAxis*>& axis,
                                const std::vector<CScalar*>& scalars, const CArray<int,1>& axisDomainOrder)
+   TRY
    {
       if (axisDomainOrder.numElements() > 0 && axisDomainOrder.numElements() != (domains.size() + axis.size() + scalars.size()))
@@ -1205,6 +1268,8 @@
       return id.str();
    }
+   CATCH
 
    StdString CGrid::generateId(const CGrid* gridSrc, const CGrid* gridDest)
+   TRY
    {
      StdString idSrc  = gridSrc->getId();
@@ -1216,21 +1281,28 @@
      return id.str();
    }
+   CATCH
 
    //----------------------------------------------------------------
 
    CDomainGroup* CGrid::getVirtualDomainGroup() const
+   TRY
    {
      return this->vDomainGroup_;
    }
+   CATCH
 
    CAxisGroup* CGrid::getVirtualAxisGroup() const
+   TRY
    {
      return this->vAxisGroup_;
    }
+   CATCH
 
    CScalarGroup* CGrid::getVirtualScalarGroup() const
+   TRY
    {
      return this->vScalarGroup_;
    }
+   CATCH
 
 /*
@@ -1268,4 +1340,5 @@
 
    void CGrid::storeField_arr(const double* const data, CArray<double, 1>& stored) const
+   TRY
    {
       const StdSize size = storeIndex_client.numElements();
@@ -1274,6 +1347,8 @@
       for(StdSize i = 0; i < size; i++) stored(i) = data[storeIndex_client(i)];
    }
+   CATCH
 
    void CGrid::restoreField_arr(const CArray<double, 1>& stored, double* const data) const
+   TRY
    {
       const StdSize size = storeIndex_client.numElements();
@@ -1281,4 +1356,5 @@
       for(StdSize i = 0; i < size; i++) data[storeIndex_client(i)] = stored(i);
    }
+   CATCH
 
    void CGrid::maskField_arr(const double* const data, CArray<double, 1>& stored) const
@@ -1295,4 +1371,5 @@
 
    void CGrid::uncompressField_arr(const double* const data, CArray<double, 1>& out) const
+   TRY
    {
       const std::vector<int>& localMaskedDataIndex = clientDistribution_->getLocalMaskedDataIndexOnClient();
@@ -1300,7 +1377,8 @@
       for(int i = 0; i < size; ++i) out(localMaskedDataIndex[i]) = data[i];
    }
-
+   CATCH
 
   void CGrid::computeClientIndexScalarGrid()
+  TRY
   {
     CContext* context = CContext::getCurrent();    
@@ -1336,6 +1414,8 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   void CGrid::computeConnectedClientsScalarGrid()
+  TRY
   {
     CContext* context = CContext::getCurrent();    
@@ -1382,6 +1462,8 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   void CGrid::sendIndexScalarGrid()
+  TRY
   {
     CContext* context = CContext::getCurrent();
@@ -1447,6 +1529,8 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   void CGrid::sendIndex(void)
+  TRY
   {
     CContext* context = CContext::getCurrent();
@@ -1568,6 +1652,8 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   void CGrid::recvIndex(CEventServer& event)
+  TRY
   {
     string gridId;
@@ -1585,6 +1671,8 @@
     get(gridId)->recvIndex(ranks, buffers);
   }
+  CATCH
 
   void CGrid::recvIndex(vector<int> ranks, vector<CBufferIn*> buffers)
+  TRY
   {
     CContext* context = CContext::getCurrent();
@@ -1756,4 +1844,5 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   /*
@@ -1771,5 +1860,6 @@
                                         const std::vector<CScalar*> scalars,
                                         const CArray<int,1>& axisDomainOrder)
-  {
+  TRY
+ {
  //   globalDim.resize(domains.size()*2+axis.size()+scalars.size());
     globalDim.resize(domains.size()*2+axis.size());
@@ -1811,7 +1901,9 @@
     return positionDimensionDistributed;
   }
+  CATCH_DUMP_ATTR
 
   // Retrieve the global dimension of grid
   std::vector<int> CGrid::getGlobalDimension()
+  TRY
   {
     std::vector<int> globalDim;
@@ -1820,16 +1912,21 @@
     return globalDim;
   }
+  CATCH_DUMP_ATTR
 
   // Retrieve dimension on which we do distribution (Very often, it should be 2nd dimension)
   int CGrid::getDistributedDimension()
+  TRY
   {
     std::vector<int> globalDim;
     return computeGridGlobalDimension(globalDim, getDomains(), getAxis(), getScalars(), axis_domain_order);    
   }
+  CATCH_DUMP_ATTR
 
   bool CGrid::isScalarGrid() const
+  TRY
   {
     return (axisList_.empty() && domList_.empty());
   }
+  CATCH
 
   /*!
@@ -1839,7 +1936,9 @@
   */
   bool CGrid::doGridHaveDataToWrite()
+  TRY
   {
      return (0 != writtenDataSize_);
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -1850,7 +1949,9 @@
   */
   size_t CGrid::getWrittenDataSize() const
+  TRY
   {
     return writtenDataSize_;
   }
+  CATCH
 
   /*!
@@ -1859,7 +1960,9 @@
   */
   int CGrid::getNumberWrittenIndexes() const
+  TRY
   {
     return numberWrittenIndexes_;
   }
+  CATCH
 
   /*!
@@ -1868,7 +1971,9 @@
   */
   int CGrid::getTotalNumberWrittenIndexes() const
+  TRY
   {
     return totalNumberWrittenIndexes_;
   }
+  CATCH
 
   /*!
@@ -1877,19 +1982,26 @@
   */
   int CGrid::getOffsetWrittenIndexes() const
+  TRY
   {
     return offsetWrittenIndexes_;
   }
+  CATCH
 
   CDistributionServer* CGrid::getDistributionServer()
+  TRY
   {
     return serverDistribution_;
   }
+  CATCH_DUMP_ATTR
 
   CDistributionClient* CGrid::getDistributionClient()
+  TRY
   {
     return clientDistribution_;
   }
+  CATCH_DUMP_ATTR
 
   bool CGrid::doGridHaveDataDistributed(CContextClient* client)
+  TRY
   {
     if (isScalarGrid()) return false;
@@ -1901,4 +2013,5 @@
       return isDataDistributed_;    
   }
+  CATCH_DUMP_ATTR
 
    /*!
@@ -1910,4 +2023,5 @@
    */
   bool CGrid::dispatchEvent(CEventServer& event)
+  TRY
   {
 
@@ -1943,8 +2057,10 @@
     }
   }
+  CATCH
 
    ///---------------------------------------------------------------
 
    CDomain* CGrid::addDomain(const std::string& id)
+   TRY
    {
      order_.push_back(2);
@@ -1953,6 +2069,8 @@
      return vDomainGroup_->createChild(id);
    }
+   CATCH_DUMP_ATTR
 
    CAxis* CGrid::addAxis(const std::string& id)
+   TRY
    {
      order_.push_back(1);
@@ -1961,6 +2079,8 @@
      return vAxisGroup_->createChild(id);
    }
+   CATCH_DUMP_ATTR
 
    CScalar* CGrid::addScalar(const std::string& id)
+   TRY
    {
      order_.push_back(0);
@@ -1969,22 +2089,29 @@
      return vScalarGroup_->createChild(id);
    }
+   CATCH_DUMP_ATTR
 
    //! Change virtual field group to a new one
    void CGrid::setVirtualDomainGroup(CDomainGroup* newVDomainGroup)
+   TRY
    {
       this->vDomainGroup_ = newVDomainGroup;
    }
+   CATCH_DUMP_ATTR
 
    //! Change virtual variable group to new one
    void CGrid::setVirtualAxisGroup(CAxisGroup* newVAxisGroup)
+   TRY
    {
       this->vAxisGroup_ = newVAxisGroup;
    }
+   CATCH_DUMP_ATTR
 
    //! Change virtual variable group to new one
    void CGrid::setVirtualScalarGroup(CScalarGroup* newVScalarGroup)
+   TRY
    {
       this->vScalarGroup_ = newVScalarGroup;
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -1993,7 +2120,9 @@
    */
    void CGrid::sendAddDomain(const string& id)
-   {
+   TRY
+  {
       sendAddItem(id, (int)EVENT_ID_ADD_DOMAIN);
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -2002,7 +2131,9 @@
    */
    void CGrid::sendAddAxis(const string& id)
+   TRY
    {
       sendAddItem(id, (int)EVENT_ID_ADD_AXIS);
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -2011,7 +2142,9 @@
    */
    void CGrid::sendAddScalar(const string& id)
+   TRY
    {
       sendAddItem(id, (int)EVENT_ID_ADD_SCALAR);
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -2020,4 +2153,5 @@
    */
    void CGrid::recvAddDomain(CEventServer& event)
+   TRY
    {
 
@@ -2027,4 +2161,5 @@
       get(id)->recvAddDomain(*buffer);
    }
+   CATCH
 
    /*!
@@ -2033,4 +2168,5 @@
    */
    void CGrid::recvAddDomain(CBufferIn& buffer)
+   TRY
    {
       string id;
@@ -2038,4 +2174,5 @@
       addDomain(id);
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -2044,4 +2181,5 @@
    */
    void CGrid::recvAddAxis(CEventServer& event)
+   TRY
    {
 
@@ -2051,4 +2189,5 @@
       get(id)->recvAddAxis(*buffer);
    }
+   CATCH
 
    /*!
@@ -2057,4 +2196,5 @@
    */
    void CGrid::recvAddAxis(CBufferIn& buffer)
+   TRY
    {
       string id;
@@ -2062,4 +2202,5 @@
       addAxis(id);
    }
+   CATCH_DUMP_ATTR
 
    /*!
@@ -2068,4 +2209,5 @@
    */
    void CGrid::recvAddScalar(CEventServer& event)
+   TRY
    {
 
@@ -2075,4 +2217,5 @@
       get(id)->recvAddScalar(*buffer);
    }
+   CATCH
 
    /*!
@@ -2081,4 +2224,5 @@
    */
    void CGrid::recvAddScalar(CBufferIn& buffer)
+   TRY
    {
       string id;
@@ -2086,4 +2230,5 @@
       addScalar(id);
    }
+   CATCH_DUMP_ATTR
 
   /*!
@@ -2094,4 +2239,5 @@
   */
   void CGrid::solveDomainAxisRefInheritance(bool apply)
+  TRY
   {
     CContext* context = CContext::getCurrent();
@@ -2134,30 +2280,41 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   bool CGrid::isTransformed()
+  TRY
   {
     return isTransformed_;
   }
+  CATCH_DUMP_ATTR
 
   void CGrid::setTransformed()
+  TRY
   {
     isTransformed_ = true;
   }
+  CATCH_DUMP_ATTR
 
   CGridTransformation* CGrid::getTransformations()
+  TRY
   {
     return transformations_;
   }
+  CATCH_DUMP_ATTR
 
   void CGrid::addTransGridSource(CGrid* gridSrc)
+  TRY
   {
     if (gridSrc_.end() == gridSrc_.find(gridSrc))
       gridSrc_.insert(make_pair(gridSrc,make_pair(false,"")));
   }
+  CATCH_DUMP_ATTR
 
   std::map<CGrid*,std::pair<bool,StdString> >& CGrid::getTransGridSource()
+  TRY
   {
     return gridSrc_;
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -2166,4 +2323,5 @@
   */
   void CGrid::completeGrid(CGrid* transformGridSrc)
+  TRY
   {
     if (0 != transformGridSrc)
@@ -2184,16 +2342,22 @@
     gridGenerate.completeGrid();
   }
+  CATCH_DUMP_ATTR
 
   bool CGrid::isGenerated()
+  TRY
   {
     return isGenerated_;
   }
+  CATCH
 
   void CGrid::setGenerated()
+  TRY
   {
     isGenerated_ = true;
   }
+  CATCH_DUMP_ATTR
 
   void CGrid::transformGrid(CGrid* transformGridSrc)
+  TRY
   {
     if (!transformGridSrc)
@@ -2221,6 +2385,8 @@
     transformGridSrc->checkMaskIndex(false);
   }
+  CATCH_DUMP_ATTR
 
   bool CGrid::hasTransform()
+  TRY
   {
     if (hasTransform_) return hasTransform_;
@@ -2236,4 +2402,5 @@
     return hasTransform_;
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -2242,4 +2409,5 @@
   */
   std::vector<CDomain*> CGrid::getDomains()
+  TRY
   {
     std::vector<CDomain*> domList;
@@ -2250,4 +2418,5 @@
     return domList;
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -2256,4 +2425,5 @@
   */
   std::vector<CAxis*> CGrid::getAxis()
+  TRY
   {
     std::vector<CAxis*> aList;
@@ -2263,4 +2433,5 @@
     return aList;
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -2269,4 +2440,5 @@
   */
   std::vector<CScalar*> CGrid::getScalars()
+  TRY
   {
     std::vector<CScalar*> sList;
@@ -2276,4 +2448,5 @@
     return sList;
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -2282,4 +2455,5 @@
   */
   CDomain* CGrid::getDomain(int domainIndex)
+  TRY
   {
     std::vector<CDomain*> domainListP = this->getDomains();
@@ -2299,4 +2473,5 @@
     return domainListP[domainIndex];
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -2305,4 +2480,5 @@
   */
   CAxis* CGrid::getAxis(int axisIndex)
+  TRY
   {
     std::vector<CAxis*> axisListP = this->getAxis();
@@ -2322,4 +2498,5 @@
     return axisListP[axisIndex];
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -2328,4 +2505,5 @@
   */
   CScalar* CGrid::getScalar(int scalarIndex)
+  TRY
   {
     std::vector<CScalar*> scalarListP = this->getScalars();
@@ -2345,4 +2523,5 @@
     return scalarListP[scalarIndex];
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -2351,4 +2530,5 @@
   */
   void CGrid::setDomainList(const std::vector<CDomain*> domains)
+  TRY
   {
     if (isDomListSet) return;
@@ -2371,6 +2551,6 @@
       isDomListSet = true;
     }
-
-  }
+  }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -2379,4 +2559,5 @@
   */
   void CGrid::setAxisList(const std::vector<CAxis*> axis)
+  TRY
   {
     if (isAxisListSet) return;
@@ -2400,4 +2581,5 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -2406,4 +2588,5 @@
   */
   void CGrid::setScalarList(const std::vector<CScalar*> scalars)
+  TRY
   {
     if (isScalarListSet) return;
@@ -2427,4 +2610,5 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -2433,8 +2617,10 @@
   */
   std::vector<StdString> CGrid::getDomainList()
+  TRY
   {
     setDomainList();
     return domList_;
   }
+  CATCH
 
   /*!
@@ -2443,8 +2629,10 @@
   */
   std::vector<StdString> CGrid::getAxisList()
+  TRY
   {
     setAxisList();
     return axisList_;
   }
+  CATCH
 
   /*!
@@ -2453,8 +2641,10 @@
   */
   std::vector<StdString> CGrid::getScalarList()
+  TRY
   {
     setScalarList();
     return scalarList_;
   }
+  CATCH
 
   /*!
@@ -2462,4 +2652,5 @@
   */
   void CGrid::sendAllDomains()
+  TRY
   {
     std::vector<CDomain*> domList = this->getVirtualDomainGroup()->getAllChildren();
@@ -2471,4 +2662,5 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -2476,4 +2668,5 @@
   */
   void CGrid::sendAllAxis()
+  TRY
   {
     std::vector<CAxis*> aList = this->getVirtualAxisGroup()->getAllChildren();
@@ -2486,4 +2679,5 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -2491,4 +2685,5 @@
   */
   void CGrid::sendAllScalars()
+  TRY
   {
     std::vector<CScalar*> sList = this->getVirtualScalarGroup()->getAllChildren();
@@ -2501,6 +2696,8 @@
     }
   }
+  CATCH_DUMP_ATTR
 
   void CGrid::setContextClient(CContextClient* contextClient)
+  TRY
   {
     if (clientsSet.find(contextClient)==clientsSet.end())
@@ -2514,4 +2711,5 @@
     	this->getAxis()[i]->setContextClient(contextClient);
   }
+  CATCH_DUMP_ATTR
 
   /*!
@@ -2519,4 +2717,5 @@
   */
   void CGrid::parse(xml::CXMLNode& node)
+  TRY
   {
     SuperClass::parse(node);
@@ -2559,3 +2758,5 @@
     setScalarList();
    }
+  CATCH_DUMP_ATTR
+
 } // namespace xios
Index: /XIOS/dev/dev_olga/src/object.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/object.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/object.cpp	(revision 1612)
@@ -32,4 +32,9 @@
   {
     return this->id;
+  }
+
+  StdString CObject::dumpClassAttributes(void)
+  {
+    return "";
   }
 
Index: /XIOS/dev/dev_olga/src/object.hpp
===================================================================
--- /XIOS/dev/dev_olga/src/object.hpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/object.hpp	(revision 1612)
@@ -17,6 +17,7 @@
       /// Accesseurs ///
       const StdString& getId(void) const;
+      virtual const StdString& getIdServer() const;
 
-      virtual const StdString& getIdServer() const;
+      virtual StdString dumpClassAttributes(void);
 
       /// Mutateurs ///
Index: /XIOS/dev/dev_olga/src/object_template_impl.hpp
===================================================================
--- /XIOS/dev/dev_olga/src/object_template_impl.hpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/object_template_impl.hpp	(revision 1612)
@@ -109,8 +109,10 @@
    template <class T>
       void CObjectTemplate<T>::parse(xml::CXMLNode & node)
+   TRY
    {
       xml::THashAttributes attributes = node.getAttributes();
       CAttributeMap::setAttributes(attributes);
    }
+   CATCH
 
    //---------------------------------------------------------------
Index: /XIOS/dev/dev_olga/src/transformation/axis_algorithm_duplicate_scalar.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/transformation/axis_algorithm_duplicate_scalar.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/transformation/axis_algorithm_duplicate_scalar.cpp	(revision 1612)
@@ -21,4 +21,5 @@
                                                                      std::map<int, int>& elementPositionInGridDst2AxisPosition,
                                                                      std::map<int, int>& elementPositionInGridDst2DomainPosition)
+TRY
 {
   std::vector<CAxis*> axisListDestP = gridDst->getAxis();
@@ -31,9 +32,12 @@
   return (new CAxisAlgorithmDuplicateScalar(axisListDestP[axisDstIndex], scalarListSrcP[scalarSrcIndex], duplicateScalar));
 }
+CATCH
 
 bool CAxisAlgorithmDuplicateScalar::registerTrans()
+TRY
 {
   CGridTransformationFactory<CAxis>::registerTransformation(TRANS_DUPLICATE_SCALAR_TO_AXIS, create);
 }
+CATCH
 
 
@@ -50,4 +54,5 @@
 
 void CAxisAlgorithmDuplicateScalar::computeIndexSourceMapping_(const std::vector<CArray<double,1>* >& dataAuxInputs)
+TRY
 {
   this->transformationMapping_.resize(1);
@@ -69,4 +74,4 @@
   }
 }
-
+CATCH
 }
Index: /XIOS/dev/dev_olga/src/transformation/axis_algorithm_extract.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/transformation/axis_algorithm_extract.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/transformation/axis_algorithm_extract.cpp	(revision 1612)
@@ -19,4 +19,5 @@
                                                            std::map<int, int>& elementPositionInGridDst2AxisPosition,
                                                            std::map<int, int>& elementPositionInGridDst2DomainPosition)
+TRY
 {
   std::vector<CAxis*> axisListDestP = gridDst->getAxis();
@@ -29,11 +30,16 @@
   return (new CAxisAlgorithmExtract(axisListDestP[axisDstIndex], axisListSrcP[axisSrcIndex], extractAxis));
 }
+CATCH
+
 bool CAxisAlgorithmExtract::registerTrans()
+TRY
 {
   CGridTransformationFactory<CAxis>::registerTransformation(TRANS_EXTRACT_AXIS, create);
 }
+CATCH
 
 CAxisAlgorithmExtract::CAxisAlgorithmExtract(CAxis* axisDestination, CAxis* axisSource, CExtractAxis* extractAxis)
 : CAxisAlgorithmTransformation(axisDestination, axisSource)
+TRY
 {
   extractAxis->checkValid(axisSource);
@@ -104,4 +110,5 @@
   }
 }
+CATCH
 
 /*!
Index: /XIOS/dev/dev_olga/src/transformation/axis_algorithm_extract_domain.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/transformation/axis_algorithm_extract_domain.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/transformation/axis_algorithm_extract_domain.cpp	(revision 1612)
@@ -25,4 +25,5 @@
                                                                      std::map<int, int>& elementPositionInGridDst2AxisPosition,
                                                                      std::map<int, int>& elementPositionInGridDst2DomainPosition)
+TRY
 {
   std::vector<CAxis*> axisListDestP = gridDst->getAxis();
@@ -35,14 +36,18 @@
   return (new CAxisAlgorithmExtractDomain(axisListDestP[axisDstIndex], domainListSrcP[domainSrcIndex], extractDomain));
 }
+CATCH
 
 //bool CAxisAlgorithmExtractDomain::_dummyRegistered = CAxisAlgorithmExtractDomain::registerTrans();
 bool CAxisAlgorithmExtractDomain::registerTrans()
+TRY
 {
   CGridTransformationFactory<CAxis>::registerTransformation(TRANS_EXTRACT_DOMAIN_TO_AXIS, create);
 }
+CATCH
 
 
 CAxisAlgorithmExtractDomain::CAxisAlgorithmExtractDomain(CAxis* axisDestination, CDomain* domainSource, CExtractDomainToAxis* algo)
  : CAxisAlgorithmTransformation(axisDestination, domainSource), pos_(-1), reduction_(0)
+TRY
 {
   algo->checkValid(axisDestination, domainSource);
@@ -64,4 +69,5 @@
   reduction_ = CReductionAlgorithm::createOperation(CReductionAlgorithm::ReductionOperations[op]);
 }
+CATCH
 
 void CAxisAlgorithmExtractDomain::apply(const std::vector<std::pair<int,double> >& localIndex,
@@ -70,14 +76,19 @@
                                         std::vector<bool>& flagInitial,                     
                                         bool ignoreMissingValue, bool firstPass)
+TRY
 {
   reduction_->apply(localIndex, dataInput, dataOut, flagInitial, ignoreMissingValue, firstPass);
 }
+CATCH
 
 CAxisAlgorithmExtractDomain::~CAxisAlgorithmExtractDomain()
+TRY
 {
   if (0 != reduction_) delete reduction_;
 }
+CATCH
 
 void CAxisAlgorithmExtractDomain::computeIndexSourceMapping_(const std::vector<CArray<double,1>* >& dataAuxInputs)
+TRY
 {
   this->transformationMapping_.resize(1);
@@ -117,4 +128,4 @@
   {}
 }
-
+CATCH
 }
Index: /XIOS/dev/dev_olga/src/transformation/axis_algorithm_interpolate.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/transformation/axis_algorithm_interpolate.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/transformation/axis_algorithm_interpolate.cpp	(revision 1612)
@@ -29,4 +29,5 @@
                                                                    std::map<int, int>& elementPositionInGridDst2AxisPosition,
                                                                    std::map<int, int>& elementPositionInGridDst2DomainPosition)
+TRY
 {
   std::vector<CAxis*> axisListDestP = gridDst->getAxis();
@@ -39,13 +40,16 @@
   return (new CAxisAlgorithmInterpolate(axisListDestP[axisDstIndex], axisListSrcP[axisSrcIndex], interpolateAxis));
 }
+CATCH
 
 bool CAxisAlgorithmInterpolate::registerTrans()
+TRY
 {
   CGridTransformationFactory<CAxis>::registerTransformation(TRANS_INTERPOLATE_AXIS, create);
 }
-
+CATCH
 
 CAxisAlgorithmInterpolate::CAxisAlgorithmInterpolate(CAxis* axisDestination, CAxis* axisSource, CInterpolateAxis* interpAxis)
 : CAxisAlgorithmTransformation(axisDestination, axisSource), coordinate_(), transPosition_()
+TRY
 {
   interpAxis->checkValid(axisSource);
@@ -58,4 +62,5 @@
   }
 }
+CATCH
 
 /*!
@@ -63,4 +68,5 @@
 */
 void CAxisAlgorithmInterpolate::computeIndexSourceMapping_(const std::vector<CArray<double,1>* >& dataAuxInputs)
+TRY
 {
   CTimer::get("CAxisAlgorithmInterpolate::computeIndexSourceMapping_").resume() ;
@@ -88,4 +94,5 @@
   CTimer::get("CAxisAlgorithmInterpolate::computeIndexSourceMapping_").suspend() ;
 }
+CATCH
 
 /*!
@@ -98,4 +105,5 @@
                                                         const std::vector<int>& indexVec,
                                                         int transPos)
+TRY
 {
   std::vector<double>::const_iterator itb = axisValue.begin(), ite = axisValue.end();
@@ -162,4 +170,5 @@
   computeWeightedValueAndMapping(interpolatingIndexValues, transPos);
 }
+CATCH
 
 /*!
@@ -168,4 +177,5 @@
 */
 void CAxisAlgorithmInterpolate::computeWeightedValueAndMapping(const std::map<int, std::vector<std::pair<int,double> > >& interpolatingIndexValues, int transPos)
+TRY
 {
   TransformationIndexMap& transMap = this->transformationMapping_[transPos];
@@ -205,4 +215,5 @@
 
 }
+CATCH
 
 /*!
@@ -213,4 +224,5 @@
 void CAxisAlgorithmInterpolate::retrieveAllAxisValue(const CArray<double,1>& axisValue, const CArray<bool,1>& axisMask,
                                                      std::vector<double>& recvBuff, std::vector<int>& indexVec)
+TRY
 {
   CContext* context = CContext::getCurrent();
@@ -282,4 +294,5 @@
   }
 }
+CATCH
 
 /*!
@@ -289,4 +302,5 @@
 void CAxisAlgorithmInterpolate::fillInAxisValue(std::vector<CArray<double,1> >& vecAxisValue,
                                                 const std::vector<CArray<double,1>* >& dataAuxInputs)
+TRY
 {
   if (coordinate_.empty())
@@ -377,4 +391,5 @@
   }
 }
-
-}
+CATCH
+
+}
Index: /XIOS/dev/dev_olga/src/transformation/axis_algorithm_inverse.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/transformation/axis_algorithm_inverse.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/transformation/axis_algorithm_inverse.cpp	(revision 1612)
@@ -27,4 +27,5 @@
                                                                std::map<int, int>& elementPositionInGridDst2AxisPosition,
                                                                std::map<int, int>& elementPositionInGridDst2DomainPosition)
+TRY
 {
   std::vector<CAxis*> axisListDestP = gridDst->getAxis();
@@ -37,13 +38,16 @@
   return (new CAxisAlgorithmInverse(axisListDestP[axisDstIndex], axisListSrcP[axisSrcIndex], inverseAxis));
 }
+CATCH
 
 bool CAxisAlgorithmInverse::registerTrans()
+TRY
 {
   CGridTransformationFactory<CAxis>::registerTransformation(TRANS_INVERSE_AXIS, create);
 }
-
+CATCH
 
 CAxisAlgorithmInverse::CAxisAlgorithmInverse(CAxis* axisDestination, CAxis* axisSource, CInverseAxis* inverseAxis)
  : CAxisAlgorithmTransformation(axisDestination, axisSource)
+TRY
 {
   if (axisDestination->n_glo.getValue() != axisSource->n_glo.getValue())
@@ -55,6 +59,8 @@
   }
 }
+CATCH
 
 void CAxisAlgorithmInverse::computeIndexSourceMapping_(const std::vector<CArray<double,1>* >& dataAuxInputs)
+TRY
 {
   this->transformationMapping_.resize(1);
@@ -82,4 +88,5 @@
   }
 }
+CATCH
 
 /*!
@@ -88,4 +95,5 @@
 */
 void CAxisAlgorithmInverse::updateAxisValue()
+TRY
 {
   CContext* context = CContext::getCurrent();
@@ -282,4 +290,5 @@
     delete [] itLong->second;
 }
-
-}
+CATCH
+
+}
Index: /XIOS/dev/dev_olga/src/transformation/axis_algorithm_reduce_axis.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/transformation/axis_algorithm_reduce_axis.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/transformation/axis_algorithm_reduce_axis.cpp	(revision 1612)
@@ -24,4 +24,5 @@
                                                                    std::map<int, int>& elementPositionInGridDst2AxisPosition,
                                                                    std::map<int, int>& elementPositionInGridDst2DomainPosition)
+TRY
 {
   std::vector<CAxis*> axisListDestP = gridDst->getAxis();
@@ -34,13 +35,17 @@
   return (new CAxisAlgorithmReduceAxis(axisListDestP[axisDstIndex], axisListSrcP[axisSrcIndex], reduceAxis));
 }
+CATCH
 
 bool CAxisAlgorithmReduceAxis::registerTrans()
+TRY
 {
   CGridTransformationFactory<CAxis>::registerTransformation(TRANS_REDUCE_AXIS_TO_AXIS, create);
 }
+CATCH
 
 
 CAxisAlgorithmReduceAxis::CAxisAlgorithmReduceAxis(CAxis* axisDestination, CAxis* axisSource, CReduceAxisToAxis* algo)
  : CAxisAlgorithmTransformation(axisDestination, axisSource), reduction_(0)
+TRY
 {
   eliminateRedondantSrc_= false ;
@@ -71,4 +76,5 @@
   reduction_ = CReductionAlgorithm::createOperation(CReductionAlgorithm::ReductionOperations[op]);
 }
+CATCH
 
 void CAxisAlgorithmReduceAxis::apply(const std::vector<std::pair<int,double> >& localIndex,
@@ -77,19 +83,26 @@
                                        std::vector<bool>& flagInitial,                     
                                        bool ignoreMissingValue, bool firstPass)
+TRY
 {
   reduction_->apply(localIndex, dataInput, dataOut, flagInitial, ignoreMissingValue, firstPass);
 }
+CATCH
 
 void CAxisAlgorithmReduceAxis::updateData(CArray<double,1>& dataOut)
+TRY
 {
   reduction_->updateData(dataOut);
 }
+CATCH
 
 CAxisAlgorithmReduceAxis::~CAxisAlgorithmReduceAxis()
+TRY
 {
   if (0 != reduction_) delete reduction_;
 }
+CATCH
 
 void CAxisAlgorithmReduceAxis::computeIndexSourceMapping_(const std::vector<CArray<double,1>* >& dataAuxInputs)
+TRY
 {
   this->transformationMapping_.resize(1);
@@ -109,4 +122,5 @@
   }
 }
+CATCH
 
 }
Index: /XIOS/dev/dev_olga/src/transformation/axis_algorithm_reduce_domain.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/transformation/axis_algorithm_reduce_domain.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/transformation/axis_algorithm_reduce_domain.cpp	(revision 1612)
@@ -25,4 +25,5 @@
                                                                    std::map<int, int>& elementPositionInGridDst2AxisPosition,
                                                                    std::map<int, int>& elementPositionInGridDst2DomainPosition)
+TRY
 {
   std::vector<CAxis*> axisListDestP = gridDst->getAxis();
@@ -35,13 +36,17 @@
   return (new CAxisAlgorithmReduceDomain(axisListDestP[axisDstIndex], domainListSrcP[domainSrcIndex], reduceDomain));
 }
+CATCH
 
 bool CAxisAlgorithmReduceDomain::registerTrans()
+TRY
 {
   CGridTransformationFactory<CAxis>::registerTransformation(TRANS_REDUCE_DOMAIN_TO_AXIS, create);
 }
+CATCH
 
 
 CAxisAlgorithmReduceDomain::CAxisAlgorithmReduceDomain(CAxis* axisDestination, CDomain* domainSource, CReduceDomainToAxis* algo)
  : CAxisAlgorithmTransformation(axisDestination, domainSource), reduction_(0)
+TRY
 {
   algo->checkValid(axisDestination, domainSource);
@@ -73,4 +78,5 @@
   local = algo->local ;
 }
+CATCH
 
 void CAxisAlgorithmReduceDomain::apply(const std::vector<std::pair<int,double> >& localIndex,
@@ -79,19 +85,26 @@
                                        std::vector<bool>& flagInitial,                     
                                        bool ignoreMissingValue, bool firstPass)
+TRY
 {
   reduction_->apply(localIndex, dataInput, dataOut, flagInitial, ignoreMissingValue, firstPass);
 }
+CATCH
 
 void CAxisAlgorithmReduceDomain::updateData(CArray<double,1>& dataOut)
+TRY
 {
   reduction_->updateData(dataOut);
 }
+CATCH
 
 CAxisAlgorithmReduceDomain::~CAxisAlgorithmReduceDomain()
+TRY
 {
   if (0 != reduction_) delete reduction_;
 }
+CATCH
 
 void CAxisAlgorithmReduceDomain::computeIndexSourceMapping_(const std::vector<CArray<double,1>* >& dataAuxInputs)
+TRY
 {
   this->transformationMapping_.resize(1);
@@ -174,4 +187,5 @@
   {}
 }
+CATCH
 
 }
Index: /XIOS/dev/dev_olga/src/transformation/axis_algorithm_temporal_splitting.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/transformation/axis_algorithm_temporal_splitting.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/transformation/axis_algorithm_temporal_splitting.cpp	(revision 1612)
@@ -21,4 +21,5 @@
                                                                      std::map<int, int>& elementPositionInGridDst2AxisPosition,
                                                                      std::map<int, int>& elementPositionInGridDst2DomainPosition)
+TRY
 {
   std::vector<CAxis*> axisListDestP = gridDst->getAxis();
@@ -31,10 +32,12 @@
   return (new CAxisAlgorithmTemporalSplitting(axisListDestP[axisDstIndex], scalarListSrcP[scalarSrcIndex], temporalSplitting));
 }
+CATCH
 
 bool CAxisAlgorithmTemporalSplitting::registerTrans()
+TRY
 {
   CGridTransformationFactory<CAxis>::registerTransformation(TRANS_TEMPORAL_SPLITTING, create);
 }
-
+CATCH
 
 CAxisAlgorithmTemporalSplitting::CAxisAlgorithmTemporalSplitting(CAxis* axisDestination, CScalar* scalarSource, CTemporalSplitting* algo)
@@ -50,4 +53,5 @@
 
 void CAxisAlgorithmTemporalSplitting::computeIndexSourceMapping_(const std::vector<CArray<double,1>* >& dataAuxInputs)
+TRY
 {
   this->transformationMapping_.resize(1);
@@ -72,4 +76,5 @@
   }
 }
+CATCH
 
 }
Index: /XIOS/dev/dev_olga/src/transformation/axis_algorithm_transformation.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/transformation/axis_algorithm_transformation.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/transformation/axis_algorithm_transformation.cpp	(revision 1612)
@@ -20,4 +20,5 @@
 CAxisAlgorithmTransformation::CAxisAlgorithmTransformation(CAxis* axisDestination, CAxis* axisSource)
  : CGenericAlgorithmTransformation(), axisDest_(axisDestination), axisSrc_(axisSource), domainSrc_(0),scalarSrc_(0)
+TRY
 {
   axisDestGlobalSize_ = axisDestination->n_glo.getValue();
@@ -28,7 +29,9 @@
     if ((axisDestination->mask)(idx)) axisDestGlobalIndex_.push_back(ibeginDest+idx);
 }
+CATCH
 
 CAxisAlgorithmTransformation::CAxisAlgorithmTransformation(CAxis* axisDestination, CDomain* domainSource)
  : CGenericAlgorithmTransformation(), axisDest_(axisDestination), axisSrc_(0), domainSrc_(domainSource),scalarSrc_(0)
+TRY
 {
   axisDestGlobalSize_ = axisDestination->n_glo.getValue();
@@ -39,7 +42,9 @@
     if ((axisDestination->mask)(idx)) axisDestGlobalIndex_.push_back(ibeginDest+idx);
 }
+CATCH
 
 CAxisAlgorithmTransformation::CAxisAlgorithmTransformation(CAxis* axisDestination, CScalar* scalarSource)
  : CGenericAlgorithmTransformation(), axisDest_(axisDestination), axisSrc_(0), domainSrc_(0), scalarSrc_(scalarSource)
+TRY
 {
   axisDestGlobalSize_ = axisDestination->n_glo.getValue();
@@ -50,4 +55,6 @@
     if ((axisDestination->mask)(idx)) axisDestGlobalIndex_.push_back(ibeginDest+idx);
 }
+CATCH
+
 CAxisAlgorithmTransformation::~CAxisAlgorithmTransformation()
 {
@@ -66,4 +73,5 @@
                                                               int elementType,
                                                               CClientClientDHTInt::Index2VectorInfoTypeMap& globalAxisIndexOnProc)
+TRY
 {
   CContext* context = CContext::getCurrent();
@@ -124,4 +132,5 @@
   globalAxisIndexOnProc = dhtIndexProcRank.getInfoIndexMap();
 }
+CATCH
 
 }
Index: /XIOS/dev/dev_olga/src/transformation/axis_algorithm_zoom.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/transformation/axis_algorithm_zoom.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/transformation/axis_algorithm_zoom.cpp	(revision 1612)
@@ -19,4 +19,5 @@
                                                            std::map<int, int>& elementPositionInGridDst2AxisPosition,
                                                            std::map<int, int>& elementPositionInGridDst2DomainPosition)
+TRY
 {
   std::vector<CAxis*> axisListDestP = gridDst->getAxis();
@@ -29,11 +30,16 @@
   return (new CAxisAlgorithmZoom(axisListDestP[axisDstIndex], axisListSrcP[axisSrcIndex], zoomAxis));
 }
+CATCH
+
 bool CAxisAlgorithmZoom::registerTrans()
+TRY
 {
   CGridTransformationFactory<CAxis>::registerTransformation(TRANS_ZOOM_AXIS, create);
 }
+CATCH
 
 CAxisAlgorithmZoom::CAxisAlgorithmZoom(CAxis* axisDestination, CAxis* axisSource, CZoomAxis* zoomAxis)
 : CAxisAlgorithmTransformation(axisDestination, axisSource)
+TRY
 {
   zoomAxis->checkValid(axisSource);
@@ -104,4 +110,5 @@
   }
 }
+CATCH
 
 /*!
Index: /XIOS/dev/dev_olga/src/transformation/domain_algorithm_compute_connectivity.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/transformation/domain_algorithm_compute_connectivity.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/transformation/domain_algorithm_compute_connectivity.cpp	(revision 1612)
@@ -24,4 +24,5 @@
                                                                      std::map<int, int>& elementPositionInGridDst2AxisPosition,
                                                                      std::map<int, int>& elementPositionInGridDst2DomainPosition)
+TRY
 {
   std::vector<CDomain*> domainListDestP = gridDst->getDomains();
@@ -34,13 +35,17 @@
   return (new CDomainAlgorithmComputeConnectivity(domainListDestP[domainDstIndex], domainListSrcP[domainSrcIndex], compute_connectivityDomain));
 }
+CATCH
 
 bool CDomainAlgorithmComputeConnectivity::registerTrans()
+TRY
 {
   CGridTransformationFactory<CDomain>::registerTransformation(TRANS_COMPUTE_CONNECTIVITY_DOMAIN, create);
 }
+CATCH
 
 CDomainAlgorithmComputeConnectivity::CDomainAlgorithmComputeConnectivity(CDomain* domainDestination, CDomain* domainSource,
                                                                          CComputeConnectivityDomain* compute_connectivityDomain)
 : CDomainAlgorithmTransformation(domainDestination, domainSource)
+TRY
 {
   this->type_ = (ELEMENT_NO_MODIFICATION_WITHOUT_DATA);
@@ -64,4 +69,5 @@
   computeLocalConnectivity(type, domainDestination, nbNeighborMax, nbNeighbor, localNeighbors);
 }
+CATCH
 
 /*!
@@ -78,4 +84,5 @@
                                                                   CArray<int,1>& nbConnectivity,
                                                                   CArray<int,2>& localConnectivity)
+TRY
 {
 
@@ -93,6 +100,5 @@
     if (nbConnectivityMax < nbConnectivity(idx)) nbConnectivityMax = nbConnectivity(idx);
 }
-
-
+CATCH
 
 /*!
Index: /XIOS/dev/dev_olga/src/transformation/domain_algorithm_expand.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/transformation/domain_algorithm_expand.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/transformation/domain_algorithm_expand.cpp	(revision 1612)
@@ -26,4 +26,5 @@
                                                                std::map<int, int>& elementPositionInGridDst2AxisPosition,
                                                                std::map<int, int>& elementPositionInGridDst2DomainPosition)
+TRY
 {
   std::vector<CDomain*> domainListDestP = gridDst->getDomains();
@@ -36,9 +37,12 @@
   return (new CDomainAlgorithmExpand(domainListDestP[domainDstIndex], domainListSrcP[domainSrcIndex], expandDomain));
 }
+CATCH
 
 bool CDomainAlgorithmExpand::registerTrans()
+TRY
 {
   CGridTransformationFactory<CDomain>::registerTransformation(TRANS_EXPAND_DOMAIN, create);
 }
+CATCH
 
 CDomainAlgorithmExpand::CDomainAlgorithmExpand(CDomain* domainDestination,
@@ -47,4 +51,5 @@
 : CDomainAlgorithmTransformation(domainDestination, domainSource),
   isXPeriodic_(false), isYPeriodic_(false)
+TRY
 {
   if (domainDestination == domainSource)
@@ -77,4 +82,5 @@
   }
 }
+CATCH
 
 /*!
@@ -85,4 +91,5 @@
 void CDomainAlgorithmExpand::expandDomainEdgeConnectivity(CDomain* domainDestination,
                                                           CDomain* domainSource)
+TRY
 {
   CContext* context = CContext::getCurrent();
@@ -104,4 +111,5 @@
   }  
 }
+CATCH
 
 /*!
@@ -112,4 +120,5 @@
 void CDomainAlgorithmExpand::expandDomainNodeConnectivity(CDomain* domainDestination,
                                                           CDomain* domainSource)
+TRY
 {
   CContext* context = CContext::getCurrent();
@@ -131,4 +140,5 @@
   }  
 }
+CATCH
 
 /*!
@@ -142,4 +152,5 @@
                                                                CDomain* domainSource,
                                                                CArray<int,2>& neighborsDomainSrc)
+TRY
 {
   int index, globalIndex, idx;
@@ -455,4 +466,5 @@
    domainDestination->computeLocalMask() ;
 }
+CATCH
 
 /*!
@@ -466,4 +478,5 @@
                                                                 CDomain* domainSource,
                                                                 CArray<int,2>& neighborsDomainSrc)
+TRY
 {
 
@@ -669,5 +682,5 @@
   domainDestination->computeLocalMask() ;
 }
-
+CATCH
 
 /*!
Index: /XIOS/dev/dev_olga/src/transformation/domain_algorithm_extract.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/transformation/domain_algorithm_extract.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/transformation/domain_algorithm_extract.cpp	(revision 1612)
@@ -16,4 +16,5 @@
                                                              std::map<int, int>& elementPositionInGridDst2AxisPosition,
                                                              std::map<int, int>& elementPositionInGridDst2DomainPosition)
+TRY
 {
   std::vector<CDomain*> domainListDestP = gridDst->getDomains();
@@ -26,12 +27,16 @@
   return (new CDomainAlgorithmExtract(domainListDestP[domainDstIndex], domainListSrcP[domainSrcIndex], extractDomain));
 }
+CATCH
 
 bool CDomainAlgorithmExtract::registerTrans()
+TRY
 {
   CGridTransformationFactory<CDomain>::registerTransformation(TRANS_EXTRACT_DOMAIN, create);
 }
+CATCH
 
 CDomainAlgorithmExtract::CDomainAlgorithmExtract(CDomain* domainDestination, CDomain* domainSource, CExtractDomain* extractDomain)
 : CDomainAlgorithmTransformation(domainDestination, domainSource)
+TRY
 {
   extractDomain->checkValid(domainSource);
@@ -220,4 +225,5 @@
 
 }
+CATCH
 
 /*!
Index: /XIOS/dev/dev_olga/src/transformation/domain_algorithm_generate_rectilinear.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/transformation/domain_algorithm_generate_rectilinear.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/transformation/domain_algorithm_generate_rectilinear.cpp	(revision 1612)
@@ -20,4 +20,5 @@
                                                                          CGenerateRectilinearDomain* genRectDomain)
 : CDomainAlgorithmTransformation(domainDestination, domainSource), nbDomainDistributedPart_(0)
+TRY
 {
   type_ = ELEMENT_GENERATION;
@@ -30,4 +31,5 @@
   fillInAttributesDomainDestination();
 }
+CATCH
 
 /*!
@@ -43,4 +45,5 @@
 */
 void CDomainAlgorithmGenerateRectilinear::computeDistributionGridSource(CGrid* gridSrc)
+TRY
 {
   CContext* context = CContext::getCurrent();
@@ -94,4 +97,5 @@
   }
 }
+CATCH
 
 /*!
@@ -99,4 +103,5 @@
 */
 void CDomainAlgorithmGenerateRectilinear::computeDistributionGridDestination(CGrid* gridDest)
+TRY
 {
   // For now, just suppose that the grid contains only one domain
@@ -121,4 +126,5 @@
 
 }
+CATCH
 
 /*!
@@ -126,4 +132,5 @@
 */
 void CDomainAlgorithmGenerateRectilinear::fillInAttributesDomainDestination()
+TRY
 {
   if (!domainDest_->distributionAttributesHaveValue())
@@ -131,4 +138,4 @@
   domainDest_->fillInLonLat();
 }
-
+CATCH
 }
Index: /XIOS/dev/dev_olga/src/transformation/domain_algorithm_interpolate.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/transformation/domain_algorithm_interpolate.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/transformation/domain_algorithm_interpolate.cpp	(revision 1612)
@@ -31,4 +31,5 @@
                                                                      std::map<int, int>& elementPositionInGridDst2AxisPosition,
                                                                      std::map<int, int>& elementPositionInGridDst2DomainPosition)
+TRY
 {
   std::vector<CDomain*> domainListDestP = gridDst->getDomains();
@@ -41,12 +42,16 @@
   return (new CDomainAlgorithmInterpolate(domainListDestP[domainDstIndex], domainListSrcP[domainSrcIndex], interpolateDomain));
 }
+CATCH
 
 bool CDomainAlgorithmInterpolate::registerTrans()
+TRY
 {
   CGridTransformationFactory<CDomain>::registerTransformation(TRANS_INTERPOLATE_DOMAIN, create);
 }
+CATCH
 
 CDomainAlgorithmInterpolate::CDomainAlgorithmInterpolate(CDomain* domainDestination, CDomain* domainSource, CInterpolateDomain* interpDomain)
 : CDomainAlgorithmTransformation(domainDestination, domainSource), interpDomain_(interpDomain), writeToFile_(false), readFromFile_(false)
+TRY
 {
   CContext* context = CContext::getCurrent();
@@ -93,4 +98,5 @@
     
 }
+CATCH
 
 /*!
@@ -98,4 +104,5 @@
 */
 void CDomainAlgorithmInterpolate::computeRemap()
+TRY
 {
   using namespace sphereRemap;
@@ -399,7 +406,9 @@
 
 }
+CATCH
 
 void CDomainAlgorithmInterpolate::processPole(std::map<int,std::vector<std::pair<int,double> > >& interMapValuePole,
                                               int nbGlobalPointOnPole)
+TRY
 {
   CContext* context = CContext::getCurrent();
@@ -468,4 +477,5 @@
 
 }
+CATCH
 
 /*!
@@ -473,4 +483,5 @@
 */
 void CDomainAlgorithmInterpolate::computeIndexSourceMapping_(const std::vector<CArray<double,1>* >& dataAuxInputs)
+TRY
 {
   if (readFromFile_)  
@@ -481,11 +492,15 @@
   }
 }
+CATCH
 
 void CDomainAlgorithmInterpolate::writeRemapInfo(std::map<int,std::vector<std::pair<int,double> > >& interpMapValue)
+TRY
 {  
   writeInterpolationInfo(fileToReadWrite_, interpMapValue);
 }
+CATCH
 
 void CDomainAlgorithmInterpolate::readRemapInfo()
+TRY
 {  
   std::map<int,std::vector<std::pair<int,double> > > interpMapValue;
@@ -494,6 +509,8 @@
   exchangeRemapInfo(interpMapValue);
 }
+CATCH
 
 void CDomainAlgorithmInterpolate::convertRemapInfo(std::map<int,std::vector<std::pair<int,double> > >& interpMapValue)
+TRY
 {
   CContext* context = CContext::getCurrent();
@@ -520,4 +537,5 @@
   }      
 }
+CATCH
 
 /*!
@@ -525,4 +543,5 @@
 */
 void CDomainAlgorithmInterpolate::exchangeRemapInfo(std::map<int,std::vector<std::pair<int,double> > >& interpMapValue)
+TRY
 {
   CContext* context = CContext::getCurrent();
@@ -704,4 +723,5 @@
   delete [] recvBuff;
 }
+CATCH
  
 /*! Redefined some functions of CONetCDF4 to make use of them */
@@ -710,18 +730,24 @@
 int CDomainAlgorithmInterpolate::WriteNetCdf::addDimensionWrite(const StdString& name, 
                                                                 const StdSize size)
+TRY
 {
   return CONetCDF4::addDimension(name, size);  
 }
+CATCH
 
 int CDomainAlgorithmInterpolate::WriteNetCdf::addVariableWrite(const StdString& name, nc_type type,
                                                                const std::vector<StdString>& dim)
+TRY
 {
   return CONetCDF4::addVariable(name, type, dim);
 }
+CATCH
 
 void CDomainAlgorithmInterpolate::WriteNetCdf::endDefinition()
+TRY
 {
   CONetCDF4::definition_end();
 }
+CATCH
 
 void CDomainAlgorithmInterpolate::WriteNetCdf::writeDataIndex(const CArray<int,1>& data, const StdString& name,
@@ -729,7 +755,9 @@
                                                               const std::vector<StdSize>* start,
                                                               const std::vector<StdSize>* count)
+TRY
 {
   CONetCDF4::writeData<int,1>(data, name, collective, record, start, count);
 }
+CATCH
 
 void CDomainAlgorithmInterpolate::WriteNetCdf::writeDataIndex(const CArray<double,1>& data, const StdString& name,
@@ -737,7 +765,9 @@
                                                               const std::vector<StdSize>* start,
                                                               const std::vector<StdSize>* count)
+TRY
 {
   CONetCDF4::writeData<double,1>(data, name, collective, record, start, count);
 }
+CATCH
 
 /*
@@ -748,4 +778,5 @@
 void CDomainAlgorithmInterpolate::writeInterpolationInfo(std::string& filename,
                                                          std::map<int,std::vector<std::pair<int,double> > >& interpMapValue)
+TRY
 {
   CContext* context = CContext::getCurrent();
@@ -827,4 +858,5 @@
   netCdfWriter.closeFile();
 }
+CATCH
 
 /*!
@@ -836,4 +868,5 @@
 void CDomainAlgorithmInterpolate::readInterpolationInfo(std::string& filename,
                                                         std::map<int,std::vector<std::pair<int,double> > >& interpMapValue)
+TRY
 {
   int ncid ;
@@ -894,4 +927,5 @@
       interpMapValue[dstIndex[ind]-indexOffset].push_back(make_pair(srcIndex[ind]-indexOffset,weight[ind]));
  }
+CATCH
 
 void CDomainAlgorithmInterpolate::apply(const std::vector<std::pair<int,double> >& localIndex,
@@ -900,4 +934,5 @@
                                             std::vector<bool>& flagInitial,
                                             bool ignoreMissingValue, bool firstPass  )
+TRY
 {
   int nbLocalIndex = localIndex.size();   
@@ -941,6 +976,8 @@
   }
 }
+CATCH
 
 void CDomainAlgorithmInterpolate::updateData(CArray<double,1>& dataOut)
+TRY
 {
   if (detectMissingValue)
@@ -961,4 +998,5 @@
   }
 }
-
-}
+CATCH
+
+}
Index: /XIOS/dev/dev_olga/src/transformation/domain_algorithm_reorder.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/transformation/domain_algorithm_reorder.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/transformation/domain_algorithm_reorder.cpp	(revision 1612)
@@ -19,4 +19,5 @@
                                                              std::map<int, int>& elementPositionInGridDst2AxisPosition,
                                                              std::map<int, int>& elementPositionInGridDst2DomainPosition)
+TRY
 {
   std::vector<CDomain*> domainListDestP = gridDst->getDomains();
@@ -29,12 +30,16 @@
   return (new CDomainAlgorithmReorder(domainListDestP[domainDstIndex], domainListSrcP[domainSrcIndex], reorderDomain));
 }
+CATCH
 
 bool CDomainAlgorithmReorder::registerTrans()
+TRY
 {
   CGridTransformationFactory<CDomain>::registerTransformation(TRANS_REORDER_DOMAIN, create);
 }
+CATCH
 
 CDomainAlgorithmReorder::CDomainAlgorithmReorder(CDomain* domainDestination, CDomain* domainSource, CReorderDomain* reorderDomain)
 : CDomainAlgorithmTransformation(domainDestination, domainSource)
+TRY
 {
   reorderDomain->checkValid(domainSource);
@@ -109,7 +114,6 @@
     }
   }
-    
-  
 }
+CATCH
 
 /*!
Index: /XIOS/dev/dev_olga/src/transformation/domain_algorithm_transformation.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/transformation/domain_algorithm_transformation.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/transformation/domain_algorithm_transformation.cpp	(revision 1612)
@@ -36,4 +36,5 @@
                                                                 int elementType,
                                                                 CClientClientDHTInt::Index2VectorInfoTypeMap& globalDomainIndexOnProc)
+TRY
 {
   CContext* context = CContext::getCurrent();
@@ -65,4 +66,5 @@
   globalDomainIndexOnProc = dhtIndexProcRank.getInfoIndexMap();
 }
+CATCH
 
 }
Index: /XIOS/dev/dev_olga/src/transformation/domain_algorithm_zoom.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/transformation/domain_algorithm_zoom.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/transformation/domain_algorithm_zoom.cpp	(revision 1612)
@@ -16,4 +16,5 @@
                                                              std::map<int, int>& elementPositionInGridDst2AxisPosition,
                                                              std::map<int, int>& elementPositionInGridDst2DomainPosition)
+TRY
 {
   std::vector<CDomain*> domainListDestP = gridDst->getDomains();
@@ -26,12 +27,16 @@
   return (new CDomainAlgorithmZoom(domainListDestP[domainDstIndex], domainListSrcP[domainSrcIndex], zoomDomain));
 }
+CATCH
 
 bool CDomainAlgorithmZoom::registerTrans()
+TRY
 {
   CGridTransformationFactory<CDomain>::registerTransformation(TRANS_ZOOM_DOMAIN, create);
 }
+CATCH
 
 CDomainAlgorithmZoom::CDomainAlgorithmZoom(CDomain* domainDestination, CDomain* domainSource, CZoomDomain* zoomDomain)
 : CDomainAlgorithmTransformation(domainDestination, domainSource)
+TRY
 {
   zoomDomain->checkValid(domainSource);
@@ -269,4 +274,5 @@
 
 }
+CATCH
 
 /*!
Index: /XIOS/dev/dev_olga/src/transformation/generic_algorithm_transformation.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/transformation/generic_algorithm_transformation.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/transformation/generic_algorithm_transformation.cpp	(revision 1612)
@@ -34,4 +34,5 @@
                                             std::vector<bool>& flagInitial,
                                             bool ignoreMissingValue, bool firstPass  )
+TRY
 {
   int nbLocalIndex = localIndex.size();   
@@ -61,6 +62,8 @@
   }
 }
+CATCH
 
 void CGenericAlgorithmTransformation::computePositionElements(CGrid* dst, CGrid* src)
+TRY
 {
   int idxScalar = 0, idxAxis = 0, idxDomain = 0;
@@ -108,6 +111,8 @@
   }
 }
+CATCH
 
 bool CGenericAlgorithmTransformation::isDistributedTransformation(int elementPositionInGrid, CGrid* gridSrc, CGrid* gridDst)
+TRY
 {
 
@@ -147,5 +152,7 @@
   }
   return isDistributed_ ;
-}  
+}
+CATCH
+
 /*!
   This function computes the global indexes of grid source, which the grid destination is in demand.
@@ -160,4 +167,5 @@
                                                                CGrid* gridDst,
                                                                SourceDestinationIndexMap& globaIndexWeightFromSrcToDst)
+TRY
  {
   CContext* context = CContext::getCurrent();
@@ -443,4 +451,5 @@
   }  
  }
+CATCH
 
 /*!
@@ -461,4 +470,5 @@
                                                                    std::vector<std::unordered_map<int,std::vector<size_t> > >& globalElementIndexOnProc,
                                                                    SourceDestinationIndexMap& globaIndexWeightFromSrcToDst)
+TRY
 {
   SourceDestinationIndexMap globaIndexWeightFromSrcToDst_tmp ;
@@ -640,6 +650,6 @@
        }
      }
-
-}
+}
+CATCH
 
 /*!
@@ -654,4 +664,5 @@
                                                                  CArray<size_t,1>& destGlobalIndexPositionInGrid,
                                                                  std::unordered_map<int,std::vector<size_t> >& globalScalarIndexOnProc)
+TRY
 {
   CContext* context = CContext::getCurrent();
@@ -666,4 +677,5 @@
   }
 }
+CATCH
 
 /*!
@@ -678,4 +690,5 @@
                                                                CArray<size_t,1>& destGlobalIndexPositionInGrid,
                                                                std::unordered_map<int,std::vector<size_t> >& globalAxisIndexOnProc)
+TRY
 {
   CContext* context = CContext::getCurrent();
@@ -735,4 +748,5 @@
   }
 }
+CATCH
 
 /*!
@@ -747,4 +761,5 @@
                                                                  CArray<size_t,1>& destGlobalIndexPositionInGrid,
                                                                  std::unordered_map<int,std::vector<size_t> >& globalDomainIndexOnProc)
+TRY
 {
   CContext* context = CContext::getCurrent();
@@ -838,12 +853,10 @@
   }
 }
-
-
-
-
+CATCH
 
 void CGenericAlgorithmTransformation::computeTransformationMappingNonDistributed(int elementPositionInGrid, CGrid* gridSrc, CGrid* gridDst,
                                                                                  vector<int>& localSrc, vector<int>& localDst, vector<double>& weight,
                                                                                  int& nlocalIndexDest)
+TRY
 {
 
@@ -1010,4 +1023,5 @@
                
 }
+CATCH
 
 
@@ -1017,4 +1031,5 @@
                                                                    int& t, vector<vector<vector<pair<int,double> > > >& dstIndWeight, int currentInd,
                                                                    vector<int>& localSrc, vector<int>& localDst, vector<double>& weight)
+TRY
 {
   int masked_ ;
@@ -1099,4 +1114,5 @@
 
 }
+CATCH
 
 /*!
@@ -1106,17 +1122,23 @@
 */
 void CGenericAlgorithmTransformation::computeIndexSourceMapping(const std::vector<CArray<double,1>* >& dataAuxInputs)
+TRY
 {
   computeIndexSourceMapping_(dataAuxInputs);
 }
+CATCH
 
 std::vector<StdString> CGenericAlgorithmTransformation::getIdAuxInputs()
+TRY
 {
   return idAuxInputs_;
 }
+CATCH
 
 CGenericAlgorithmTransformation::AlgoTransType CGenericAlgorithmTransformation::type()
+TRY
 {
   return type_;
 }
-
-}
+CATCH
+
+}
Index: /XIOS/dev/dev_olga/src/transformation/grid_generate.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/transformation/grid_generate.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/transformation/grid_generate.cpp	(revision 1612)
@@ -30,8 +30,10 @@
 */
 void CGridGenerate::selectScalarAlgo(int elementPositionInGrid, ETranformationType transType, int transformationOrder)
+TRY
 {
   CGenericAlgorithmTransformation* algo = 0;
   algoTransformation_.push_back(algo);
 }
+CATCH
 
 /*!
@@ -43,8 +45,10 @@
 */
 void CGridGenerate::selectAxisAlgo(int elementPositionInGrid, ETranformationType transType, int transformationOrder)
+TRY
 {
   CGenericAlgorithmTransformation* algo = 0;
   algoTransformation_.push_back(algo);
 }
+CATCH
 
 /*!
@@ -56,4 +60,5 @@
 */
 void CGridGenerate::selectDomainAlgo(int elementPositionInGrid, ETranformationType transType, int transformationOrder)
+TRY
 {
   std::vector<CDomain*> domainListDestP = gridDestination_->getDomains();
@@ -89,4 +94,5 @@
   algoTransformation_.push_back(algo);
 }
+CATCH
 
 /*!
@@ -94,4 +100,5 @@
 */
 void CGridGenerate::completeGrid()
+TRY
 {
   ListAlgoType::const_iterator itb = listAlgos_.begin(),
@@ -110,4 +117,5 @@
   }
 }
+CATCH
 
 }
Index: /XIOS/dev/dev_olga/src/transformation/grid_transformation.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/transformation/grid_transformation.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/transformation/grid_transformation.cpp	(revision 1612)
@@ -38,4 +38,5 @@
 */
 void CGridTransformation::selectScalarAlgo(int elementPositionInGrid, ETranformationType transType, int transformationOrder)
+TRY
 {
   std::vector<CScalar*> scaListDestP = gridDestination_->getScalars();
@@ -59,4 +60,5 @@
   algoTransformation_.push_back(algo);
 }
+CATCH
 
 /*!
@@ -67,4 +69,5 @@
 */
 void CGridTransformation::selectAxisAlgo(int elementPositionInGrid, ETranformationType transType, int transformationOrder)
+TRY
 {
   std::vector<CAxis*> axisListDestP = gridDestination_->getAxis();
@@ -88,4 +91,5 @@
   algoTransformation_.push_back(algo);
 }
+CATCH
 
 /*!
@@ -96,4 +100,5 @@
 */
 void CGridTransformation::selectDomainAlgo(int elementPositionInGrid, ETranformationType transType, int transformationOrder)
+TRY
 {
   std::vector<CDomain*> domainListDestP = gridDestination_->getDomains();
@@ -117,4 +122,5 @@
   algoTransformation_.push_back(algo);
 }
+CATCH
 
 /*!
@@ -123,4 +129,5 @@
 */
 std::map<int,std::pair<int,int> > CGridTransformation::getElementPosition(CGrid* grid)
+TRY
 {
   std::vector<CScalar*> scalarListP = grid->getScalars(); 
@@ -155,4 +162,5 @@
   return elementPosition;  
 }
+CATCH
 
 /*!
@@ -163,4 +171,5 @@
 */
 void CGridTransformation::setUpGridDestination(int elementPositionInGrid, ETranformationType transType)
+TRY
 {
   if (isSpecialTransformation(transType)) return;
@@ -240,4 +249,5 @@
   tempGridDests_.push_back(tmpGridDestination_);
 }
+CATCH
 
 /*!
@@ -249,4 +259,5 @@
 */
 void CGridTransformation::setUpGridSource(int elementPositionInGrid)
+TRY
 {
   if (!tempGridSrcs_.empty() && (getNbAlgo()-1) == tempGridSrcs_.size())
@@ -326,4 +337,5 @@
   tempGridSrcs_.push_back(gridSource_);
 }
+CATCH
 
 /*!
@@ -336,4 +348,5 @@
 */
 void CGridTransformation::computeAll(const std::vector<CArray<double,1>* >& dataAuxInputs, Time timeStamp)
+TRY
 {
   if (nbNormalAlgos_ < 1) return;
@@ -454,4 +467,5 @@
   }
 }
+CATCH
 
 /*!
@@ -460,4 +474,5 @@
 */
 void CGridTransformation::computeTransformationMapping(const SourceDestinationIndexMap& globaIndexWeightFromSrcToDst)
+TRY
 {
   CContext* context = CContext::getCurrent();
@@ -682,4 +697,5 @@
 
 }
+CATCH
 
 /*!
@@ -688,7 +704,9 @@
 */
 const std::list<CGridTransformation::SendingIndexGridSourceMap>& CGridTransformation::getLocalIndexToSendFromGridSource() const
+TRY
 {
   return localIndexToSendFromGridSource_;
 }
+CATCH
 
 /*!
@@ -697,7 +715,9 @@
 */
 const std::list<CGridTransformation::RecvIndexGridDestinationMap>& CGridTransformation::getLocalIndexToReceiveOnGridDest() const
+TRY
 {
   return localIndexToReceiveOnGridDest_;
 }
+CATCH
 
 /*!
@@ -706,7 +726,9 @@
 */
 const std::list<size_t>& CGridTransformation::getNbLocalIndexToReceiveOnGridDest() const
+TRY
 {
   return nbLocalIndexOnGridDest_;
 }
-
-}
+CATCH
+
+}
Index: /XIOS/dev/dev_olga/src/transformation/grid_transformation_factory_impl.hpp
===================================================================
--- /XIOS/dev/dev_olga/src/transformation/grid_transformation_factory_impl.hpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/transformation/grid_transformation_factory_impl.hpp	(revision 1612)
@@ -110,5 +110,4 @@
 }
 
-
 }
 #endif // __XIOS_GRID_TRANSFORMATION_FACTORY_HPP__
Index: /XIOS/dev/dev_olga/src/transformation/grid_transformation_selector.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/transformation/grid_transformation_selector.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/transformation/grid_transformation_selector.cpp	(revision 1612)
@@ -47,4 +47,5 @@
  : gridSource_(source), gridDestination_(destination), isSameGrid_(false),
   listAlgos_(), algoTypes_(), nbNormalAlgos_(0), nbSpecialAlgos_(0), auxInputs_()
+TRY
 {
   if (0 == source)
@@ -62,4 +63,5 @@
   initializeTransformations(type);
 }
+CATCH
 
 /*!
@@ -70,4 +72,5 @@
 */
 void CGridTransformationSelector::initializeTransformations(TransformationType type)
+TRY
 {
   // Initialize algorithms
@@ -100,6 +103,8 @@
   }
 }
+CATCH
 
 CGridTransformationSelector::~CGridTransformationSelector()
+TRY
 {
   std::vector<CGenericAlgorithmTransformation*>::const_iterator itb = algoTransformation_.begin(), it,
@@ -107,4 +112,5 @@
   for (it = itb; it != ite; ++it) delete (*it);
 }
+CATCH
 
 /*!
@@ -112,4 +118,5 @@
 */
 void CGridTransformationSelector::updateElementPosition()
+TRY
 {
   int idxScalar = 0, idxAxis = 0, idxDomain = 0;
@@ -163,4 +170,5 @@
   }
 }
+CATCH
 
 /*!
@@ -168,4 +176,5 @@
 */
 void CGridTransformationSelector::initializeAlgorithms()
+TRY
 {
   updateElementPosition();
@@ -188,4 +197,5 @@
   }
 }
+CATCH
 
 /*!
@@ -197,4 +207,5 @@
 */
 void CGridTransformationSelector::initializeScalarAlgorithms(int scalarPositionInGrid)
+TRY
 {
   std::vector<CScalar*> scalarListDestP = gridDestination_->getScalars();
@@ -229,4 +240,5 @@
   }
 }
+CATCH
 
 /*!
@@ -238,4 +250,5 @@
 */
 void CGridTransformationSelector::initializeAxisAlgorithms(int axisPositionInGrid)
+TRY
 {
   std::vector<CAxis*> axisListDestP = gridDestination_->getAxis();
@@ -270,4 +283,5 @@
   }
 }
+CATCH
 
 /*!
@@ -278,4 +292,5 @@
 */
 void CGridTransformationSelector::initializeDomainAlgorithms(int domPositionInGrid)
+TRY
 {
   std::vector<CDomain*> domListDestP = gridDestination_->getDomains();
@@ -309,6 +324,6 @@
     }
   }
-
-}
+}
+CATCH
 
 /*!
@@ -321,4 +336,5 @@
 */
 void CGridTransformationSelector::selectAlgo(int elementPositionInGrid, ETranformationType transType, int transformationOrder, int algoType)
+TRY
 {
   updateElementPosition();
@@ -338,6 +354,8 @@
   }
 }
+CATCH
 
 bool CGridTransformationSelector::isSpecialTransformation(ETranformationType transType)
+TRY
 {
   bool res = false;
@@ -353,4 +371,5 @@
   return res;
 }
-
-}
+CATCH
+
+}
Index: /XIOS/dev/dev_olga/src/transformation/scalar_algorithm_extract_axis.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/transformation/scalar_algorithm_extract_axis.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/transformation/scalar_algorithm_extract_axis.cpp	(revision 1612)
@@ -26,4 +26,5 @@
                                                                      std::map<int, int>& elementPositionInGridDst2AxisPosition,
                                                                      std::map<int, int>& elementPositionInGridDst2DomainPosition)
+TRY
 {
   std::vector<CScalar*> scalarListDestP = gridDst->getScalars();
@@ -36,13 +37,17 @@
   return (new CScalarAlgorithmExtractAxis(scalarListDestP[scalarDstIndex], axisListSrcP[axisSrcIndex], extractAxis));
 }
+CATCH
 
 bool CScalarAlgorithmExtractAxis::registerTrans()
+TRY
 {
   CGridTransformationFactory<CScalar>::registerTransformation(TRANS_EXTRACT_AXIS_TO_SCALAR, create);
 }
+CATCH
 
 CScalarAlgorithmExtractAxis::CScalarAlgorithmExtractAxis(CScalar* scalarDestination, CAxis* axisSource, CExtractAxisToScalar* algo)
  : CScalarAlgorithmTransformation(scalarDestination, axisSource),
    reduction_(0)
+TRY
 {
   algo->checkValid(scalarDestination, axisSource);
@@ -51,4 +56,5 @@
   reduction_ = CReductionAlgorithm::createOperation(CReductionAlgorithm::ReductionOperations[op]);
 }
+CATCH
 
 void CScalarAlgorithmExtractAxis::apply(const std::vector<std::pair<int,double> >& localIndex,
@@ -57,14 +63,19 @@
                                          std::vector<bool>& flagInitial,                     
                                          bool ignoreMissingValue, bool firstPass)
+TRY
 {
   reduction_->apply(localIndex, dataInput, dataOut, flagInitial, ignoreMissingValue, firstPass);
 }
+CATCH
 
 CScalarAlgorithmExtractAxis::~CScalarAlgorithmExtractAxis()
+TRY
 {
   if (0 != reduction_) delete reduction_;
 }
+CATCH
 
 void CScalarAlgorithmExtractAxis::computeIndexSourceMapping_(const std::vector<CArray<double,1>* >& dataAuxInputs)
+TRY
 {
   this->transformationMapping_.resize(1);
@@ -77,4 +88,5 @@
   transWeight[0].push_back(1.0);
 }
+CATCH
 
 }
Index: /XIOS/dev/dev_olga/src/transformation/scalar_algorithm_reduce_axis.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/transformation/scalar_algorithm_reduce_axis.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/transformation/scalar_algorithm_reduce_axis.cpp	(revision 1612)
@@ -27,4 +27,5 @@
                                                                      std::map<int, int>& elementPositionInGridDst2AxisPosition,
                                                                      std::map<int, int>& elementPositionInGridDst2DomainPosition)
+TRY
 {
   std::vector<CScalar*> scalarListDestP = gridDst->getScalars();
@@ -37,13 +38,17 @@
   return (new CScalarAlgorithmReduceAxis(scalarListDestP[scalarDstIndex], axisListSrcP[axisSrcIndex], reduceAxis));
 }
+CATCH
 
 bool CScalarAlgorithmReduceAxis::registerTrans()
+TRY
 {
   CGridTransformationFactory<CScalar>::registerTransformation(TRANS_REDUCE_AXIS_TO_SCALAR, create);
 }
+CATCH
 
 CScalarAlgorithmReduceAxis::CScalarAlgorithmReduceAxis(CScalar* scalarDestination, CAxis* axisSource, CReduceAxisToScalar* algo)
  : CScalarAlgorithmTransformation(scalarDestination, axisSource),
    reduction_(0)
+TRY
 {
   if (algo->operation.isEmpty())
@@ -83,22 +88,30 @@
   reduction_ = CReductionAlgorithm::createOperation(CReductionAlgorithm::ReductionOperations[op]);
 }
+CATCH
 
 void CScalarAlgorithmReduceAxis::apply(const std::vector<std::pair<int,double> >& localIndex, const double* dataInput, CArray<double,1>& dataOut,
                                          std::vector<bool>& flagInitial, bool ignoreMissingValue, bool firstPass)
+TRY
 {
   reduction_->apply(localIndex, dataInput, dataOut, flagInitial, ignoreMissingValue, firstPass);
 }
+CATCH
 
 void CScalarAlgorithmReduceAxis::updateData(CArray<double,1>& dataOut)
+TRY
 {
   reduction_->updateData(dataOut);
 }
+CATCH
 
 CScalarAlgorithmReduceAxis::~CScalarAlgorithmReduceAxis()
+TRY
 {
   if (0 != reduction_) delete reduction_;
 }
+CATCH
 
 void CScalarAlgorithmReduceAxis::computeIndexSourceMapping_(const std::vector<CArray<double,1>* >& dataAuxInputs)
+TRY
 {
   this->transformationMapping_.resize(1);
@@ -116,4 +129,5 @@
   }
 }
+CATCH
 
 }
Index: /XIOS/dev/dev_olga/src/transformation/scalar_algorithm_reduce_domain.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/transformation/scalar_algorithm_reduce_domain.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/transformation/scalar_algorithm_reduce_domain.cpp	(revision 1612)
@@ -26,4 +26,5 @@
                                                                      std::map<int, int>& elementPositionInGridDst2AxisPosition,
                                                                      std::map<int, int>& elementPositionInGridDst2DomainPosition)
+TRY
 {
   std::vector<CScalar*> scalarListDestP = gridDst->getScalars();
@@ -36,13 +37,17 @@
   return (new CScalarAlgorithmReduceDomain(scalarListDestP[scalarDstIndex], domainListSrcP[domainSrcIndex], reduceDomain));
 }
+CATCH
 
 bool CScalarAlgorithmReduceDomain::registerTrans()
+TRY
 {
   CGridTransformationFactory<CScalar>::registerTransformation(TRANS_REDUCE_DOMAIN_TO_SCALAR, create);
 }
+CATCH
 
 CScalarAlgorithmReduceDomain::CScalarAlgorithmReduceDomain(CScalar* scalarDestination, CDomain* domainSource, CReduceDomainToScalar* algo)
  : CScalarAlgorithmTransformation(scalarDestination, domainSource),
    reduction_(0)
+TRY
 {
   algo->checkValid(scalarDestination, domainSource);
@@ -80,4 +85,5 @@
   local = algo->local ;
 }
+CATCH
 
 void CScalarAlgorithmReduceDomain::apply(const std::vector<std::pair<int,double> >& localIndex,
@@ -86,19 +92,26 @@
                                          std::vector<bool>& flagInitial,                     
                                          bool ignoreMissingValue, bool firstPass)
+TRY
 {
   reduction_->apply(localIndex, dataInput, dataOut, flagInitial, ignoreMissingValue, firstPass);
 }
+CATCH
 
 void CScalarAlgorithmReduceDomain::updateData(CArray<double,1>& dataOut)
+TRY
 {
   reduction_->updateData(dataOut);
 }
+CATCH
 
 CScalarAlgorithmReduceDomain::~CScalarAlgorithmReduceDomain()
+TRY
 {
   if (0 != reduction_) delete reduction_;
 }
+CATCH
 
 void CScalarAlgorithmReduceDomain::computeIndexSourceMapping_(const std::vector<CArray<double,1>* >& dataAuxInputs)
+TRY
 {
   this->transformationMapping_.resize(1);
@@ -137,4 +150,5 @@
   
 }
+CATCH
 
 }
Index: /XIOS/dev/dev_olga/src/transformation/scalar_algorithm_reduce_scalar.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/transformation/scalar_algorithm_reduce_scalar.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/transformation/scalar_algorithm_reduce_scalar.cpp	(revision 1612)
@@ -22,4 +22,5 @@
                                                                      std::map<int, int>& elementPositionInGridDst2AxisPosition,
                                                                      std::map<int, int>& elementPositionInGridDst2DomainPosition)
+TRY
 {
   std::vector<CScalar*> scalarListDestP = gridDst->getScalars();
@@ -32,13 +33,17 @@
   return (new CScalarAlgorithmReduceScalar(scalarListDestP[scalarDstIndex], scalarListSrcP[scalarSrcIndex], reduceScalar));
 }
+CATCH
 
 bool CScalarAlgorithmReduceScalar::registerTrans()
+TRY
 {
   CGridTransformationFactory<CScalar>::registerTransformation(TRANS_REDUCE_SCALAR_TO_SCALAR, create);
 }
+CATCH
 
 CScalarAlgorithmReduceScalar::CScalarAlgorithmReduceScalar(CScalar* scalarDestination, CScalar* scalarSource, CReduceScalarToScalar* algo)
  : CScalarAlgorithmTransformation(scalarDestination, scalarSource),
    reduction_(0)
+TRY
 {
   eliminateRedondantSrc_= false ;
@@ -79,22 +84,30 @@
   reduction_ = CReductionAlgorithm::createOperation(CReductionAlgorithm::ReductionOperations[op]);
 }
+CATCH
 
 void CScalarAlgorithmReduceScalar::apply(const std::vector<std::pair<int,double> >& localIndex, const double* dataInput, CArray<double,1>& dataOut,
                                          std::vector<bool>& flagInitial, bool ignoreMissingValue, bool firstPass)
+TRY
 {
   reduction_->apply(localIndex, dataInput, dataOut, flagInitial, ignoreMissingValue, firstPass);
 }
+CATCH
 
 void CScalarAlgorithmReduceScalar::updateData(CArray<double,1>& dataOut)
+TRY
 {
   reduction_->updateData(dataOut);
 }
+CATCH
 
 CScalarAlgorithmReduceScalar::~CScalarAlgorithmReduceScalar()
+TRY
 {
   if (0 != reduction_) delete reduction_;
 }
+CATCH
 
 void CScalarAlgorithmReduceScalar::computeIndexSourceMapping_(const std::vector<CArray<double,1>* >& dataAuxInputs)
+TRY
 {
   this->transformationMapping_.resize(1);
@@ -108,4 +121,5 @@
 
 }
+CATCH
 
 }
Index: /XIOS/dev/dev_olga/src/transformation/scalar_algorithm_transformation.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/transformation/scalar_algorithm_transformation.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/transformation/scalar_algorithm_transformation.cpp	(revision 1612)
@@ -57,4 +57,5 @@
                                                                 int elementSourceType,
                                                                 CClientClientDHTInt::Index2VectorInfoTypeMap& globalIndexElementSourceOnProc)
+TRY
 {
   CContext* context = CContext::getCurrent();
@@ -121,4 +122,4 @@
   }
 }
-
+CATCH
 }
Index: /XIOS/dev/dev_olga/src/type/type.hpp
===================================================================
--- /XIOS/dev/dev_olga/src/type/type.hpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/type/type.hpp	(revision 1612)
@@ -40,4 +40,5 @@
     virtual void fromString(const string& str)   { _fromString(str); }
     virtual string toString(void) const { return _toString(); }
+    virtual string dump(void) const { return _toString(); }
     virtual bool fromBuffer(CBufferIn& buffer) { return _fromBuffer(buffer) ; }
     virtual bool toBuffer(CBufferOut& buffer) const { return _toBuffer(buffer); }
Index: /XIOS/dev/dev_olga/src/xios_spl.hpp
===================================================================
--- /XIOS/dev/dev_olga/src/xios_spl.hpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/xios_spl.hpp	(revision 1612)
@@ -31,4 +31,5 @@
 /// boost headers ///
 #include <boost/cast.hpp>
+#include <boost/current_function.hpp>
 /// Map ///
 #define xios_map std::map
Index: /XIOS/dev/dev_olga/src/xml_parser.cpp
===================================================================
--- /XIOS/dev/dev_olga/src/xml_parser.cpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/xml_parser.cpp	(revision 1612)
@@ -14,4 +14,5 @@
 
       void CXMLParser::ParseFile(const StdString & filename, const std::set<StdString>& parseContextList)
+      TRY
       {
          StdIFStream ifs ( filename.c_str() , StdIFStream::in );
@@ -22,4 +23,5 @@
          CXMLParser::ParseStream(ifs, filename, parseContextList);
       }
+      CATCH
 
       void CXMLParser::ParseString(const StdString & xmlContent)
@@ -54,41 +56,75 @@
             std::set<StdString>::const_iterator itE = parseContextList.end();
             bool isParseAll = (parseContextList.empty());
-            if (node.goToChildElement())
+            try
             {
-               do
-               {
-                  CContextGroup* group_context = CContext::getRoot() ;
+              if (node.goToChildElement())
+              {
+                 do
+                 {
+                    CContextGroup* group_context = CContext::getRoot() ;
 
-                  attributes = node.getAttributes();
+                    attributes = node.getAttributes();
 
-                  if (attributes.end() == attributes.find("id"))
-                  {
-                     DEBUG("The context will not be processed because it is not identified (missing id)");
-                     continue;
-                  }
+                    if (attributes.end() == attributes.find("id"))
+                    {
+                       DEBUG("The context will not be processed because it is not identified (missing id)");
+                       continue;
+                    }
 
-                  CContext::setCurrent(attributes["id"]) ;
+                    CContext::setCurrent(attributes["id"]) ;
 
-
-                  if (isParseAll)
-                  {
-                    CContext* context = CContext::create(attributes["id"]);
-                    context->parse(node);
-
-                    attributes.clear();
-                  }
-                  else
-                  {
-                    it = parseContextList.find(attributes["id"]);
-                    if (itE != it)
+                    if (isParseAll)
                     {
-                      CContext* context = CContext::create(*it);
+                      CContext* context = CContext::create(attributes["id"]);
                       context->parse(node);
 
                       attributes.clear();
                     }
-                  }
-               } while (node.goToNextElement());
+                    else
+                    {
+                      it = parseContextList.find(attributes["id"]);
+                      if (itE != it)
+                      {
+                        CContext* context = CContext::create(*it);
+                        context->parse(node);
+
+                        attributes.clear();
+                      }
+                    }
+                 } while (node.goToNextElement());
+              }
             }
+            catch(CException& e)
+            {
+              CException::StackInfo stk;
+              stk.info.append("Exception occurred while parsing XML file \"");
+              stk.info.append(attributes["src"]);
+              stk.info.append("\".\n");
+              stk.file = FILE_NAME;
+              stk.function = FUNCTION_NAME;
+              stk.line = __LINE__;
+              e.stack.push_back(stk);
+              if (CXios::xiosStack)
+                throw;
+             else
+               throw 0;
+            }
+            catch(...)
+            {
+              CException exc;
+              CException::StackInfo stk;
+              stk.info.append("Exception occurred while parsing XML file \"");
+              stk.info.append(attributes["src"]);
+              stk.info.append("\".\n");
+              stk.file = FILE_NAME;
+              stk.function = FUNCTION_NAME;
+              stk.line = __LINE__;
+              exc.stack.push_back(stk);
+              if (CXios::xiosStack)
+                throw exc;
+             else
+               throw 0;
+            }
+
          }
          catch (rapidxml::parse_error & exc)
@@ -110,6 +146,6 @@
                   << "Error is occuring when parsing XML flux from <"<<fluxId<<"> at character "<< pos<<" line "<<lineNumber<<" column "<< columnNumber<< endl
                   << strLine<<endl
-                  << string(columnNumber-1,'x')<<'^'<<endl
-                  <<" Error : " << exc.what() )
+                  << string(columnNumber-1,'x')<<'^'<<endl)
+//                  <<" Error : " << exc.what() )
          }
       }
Index: /XIOS/dev/dev_olga/src/xml_parser.hpp
===================================================================
--- /XIOS/dev/dev_olga/src/xml_parser.hpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/xml_parser.hpp	(revision 1612)
@@ -5,4 +5,5 @@
 #include "xios_spl.hpp"
 #include "exception.hpp"
+#include "cxios.hpp"
 #include "xml_node.hpp"
 
Index: /XIOS/dev/dev_olga/src/xml_parser_impl.hpp
===================================================================
--- /XIOS/dev/dev_olga/src/xml_parser_impl.hpp	(revision 1611)
+++ /XIOS/dev/dev_olga/src/xml_parser_impl.hpp	(revision 1612)
@@ -39,6 +39,6 @@
                   << "Error is occuring when parsing XML flux from <"<<fluxId<<"> at character "<< pos<<" line "<<lineNumber<<" column "<< columnNumber<< endl
                   << strLine<<endl
-                  << string(columnNumber-1,'x')<<'^'<<endl
-                  <<" Error : " << exc.what() )
+                  << string(columnNumber-1,'x')<<'^'<<endl)
+//                  <<" Error : " << exc.what() )
          }
       }
