Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/attribute.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/attribute.hpp	(revision 2145)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/attribute.hpp	(revision 2146)
@@ -42,4 +42,5 @@
             virtual void fromString(const StdString & str) = 0;
             virtual StdString dump(void) const = 0;
+            virtual StdString dumpGraph(void) const = 0;
             virtual bool isEqual(const CAttribute& ) = 0;
 
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/attribute_array.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/attribute_array.hpp	(revision 2145)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/attribute_array.hpp	(revision 2146)
@@ -55,4 +55,5 @@
             virtual bool fromBuffer(CBufferIn& buffer) { return _fromBuffer(buffer); }
             virtual string dump(void) const { return _dump();}
+            virtual string dumpGraph(void) const { return _dumpGraph();}
 
             virtual void generateCInterface(ostream& oss,const string& className) ;
@@ -70,4 +71,5 @@
           StdString _toString(void) const;
           StdString _dump(void) const;
+          StdString _dumpGraph(void) const;
           void _fromString(const StdString & str);
           bool _toBuffer  (CBufferOut& buffer) const;
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/attribute_array_impl.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/attribute_array_impl.hpp	(revision 2145)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/attribute_array_impl.hpp	(revision 2146)
@@ -137,4 +137,13 @@
       return (oss.str());
     }
+    
+    template <typename T_numtype, int N_rank>
+    StdString CAttributeArray<T_numtype,N_rank>::_dumpGraph(void) const
+    {
+      StdOStringStream oss;
+      if (! isEmpty() && this->hasId() && (this->numElements()!=0))
+        oss << this->getName() << "=" << CArray<T_numtype, N_rank>::dump() << "";
+      return (oss.str());
+    }
 
 
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/attribute_enum.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/attribute_enum.hpp	(revision 2145)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/attribute_enum.hpp	(revision 2146)
@@ -63,4 +63,5 @@
             virtual void fromString(const StdString & str) { if (str==resetInheritanceStr) { reset(); _canInherite=false ;}  else _fromString(str);}
             virtual StdString dump(void) const { return _toString();}
+            virtual StdString dumpGraph(void) const { return _dumpGraph();}
 
             virtual bool toBuffer  (CBufferOut& buffer) const { return _toBuffer(buffer);} 
@@ -83,4 +84,5 @@
           bool _fromBuffer(CBufferIn& buffer) ;
           CEnum<T> inheritedValue ;
+          StdString _dumpGraph(void) const;
       }; // class CAttributeEnum    
    
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/attribute_enum_impl.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/attribute_enum_impl.hpp	(revision 2145)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/attribute_enum_impl.hpp	(revision 2146)
@@ -214,4 +214,13 @@
     CInterface::AttributeFortranInterfaceGetDeclaration<string>(oss, className, this->getName());
   }
+  
+  template <class T>
+  StdString CAttributeEnum<T>::_dumpGraph(void) const
+  {
+     StdOStringStream oss;
+     if (!CEnum<T>::isEmpty() && this->hasId())
+        oss << this->getName() << "=" << CEnum<T>::toString() << "</br>";
+     return (oss.str());
+  }
 } // namespace xios
 
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/attribute_map.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/attribute_map.cpp	(revision 2145)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/attribute_map.cpp	(revision 2146)
@@ -59,8 +59,29 @@
       }
 
+      ///--------------------------------------------------------------
+      /*!
+        Record all non-empty attributes of an object (used only for field) for graph
+      */
+      StdString CAttributeMap::recordXiosAttributes(void) const
+      {
+        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())
+          {
+            str.append(att.second->dumpGraph());
+            str.append(" ");
+          }
+        }
+        return str;
+      }
+
       //---------------------------------------------------------------
 
       /*
-        Clear an attribute and reset its value
+        Cleassr an attribute and reset its value
         \param[in] key id of attribute
       */
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/attribute_map.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/attribute_map.hpp	(revision 2145)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/attribute_map.hpp	(revision 2146)
@@ -39,4 +39,5 @@
             void clearAllAttributes(void);
             StdString dumpXiosAttributes(void) const;
+            StdString recordXiosAttributes(void) const;
 
             void clearAttribute(const StdString& key);
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/attribute_template.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/attribute_template.hpp	(revision 2145)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/attribute_template.hpp	(revision 2146)
@@ -75,4 +75,5 @@
 //            virtual void fromBinary(StdIStream & is);
             virtual StdString dump(void) const { return _dump();}
+            virtual StdString dumpGraph(void) const { return _dumpGraph();}
 
             virtual bool toBuffer  (CBufferOut& buffer) const { return _toBuffer(buffer);}
@@ -100,4 +101,5 @@
           StdString _toString(void) const;
           StdString _dump(void) const;
+          StdString _dumpGraph(void) const;
           void _fromString(const StdString & str);
           bool _toBuffer  (CBufferOut& buffer) const;
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/attribute_template_impl.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/attribute_template_impl.hpp	(revision 2145)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/attribute_template_impl.hpp	(revision 2146)
@@ -208,4 +208,13 @@
          if (!CType<T>::isEmpty() && this->hasId())
             oss << this->getName() << "=\"" << CType<T>::dump() << "\"";
+         return (oss.str());
+      }
+      
+      template <class T>
+         StdString CAttributeTemplate<T>::_dumpGraph(void) const
+      {
+         StdOStringStream oss;
+         if (!CType<T>::isEmpty() && this->hasId())
+            oss << this->getName() << "=" << CType<T>::dump() << "</br>";
          return (oss.str());
       }
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/client.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/client.cpp	(revision 2145)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/client.cpp	(revision 2146)
@@ -16,5 +16,5 @@
 #include <functional>
 #include <cstdio>
-
+#include "workflow_graph.hpp"
 
 namespace xios
@@ -508,5 +508,5 @@
       report(100)<<CTimer::getAllCumulatedTime()<<endl ;
     
-      
+      CWorkflowGraph::drawWorkFlowGraph_client();
     }
     
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/server.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/server.cpp	(revision 2145)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/server.cpp	(revision 2146)
@@ -20,5 +20,5 @@
 #include "servers_ressource.hpp"
 #include <cstdio>
-
+#include "workflow_graph.hpp"
 
 
@@ -318,4 +318,6 @@
       report(0)<<"Performance report : Ratio : "<<CTimer::get("Process events").getCumulatedTime()/CTimer::get("XIOS server").getCumulatedTime()*100.<<"%"<<endl  ;
       report(100)<<CTimer::getAllCumulatedTime()<<endl ;
+
+      CWorkflowGraph::drawWorkFlowGraph_server();
     }
 
