Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add wfformat json DAG loader and DAG doc
authorAdrien <adrien.gougeon@ens-rennes.fr>
Mon, 13 Mar 2023 21:12:47 +0000 (21:12 +0000)
committerFred Suter <frederic.suter@cc.in2p3.fr>
Mon, 13 Mar 2023 21:12:47 +0000 (21:12 +0000)
16 files changed:
docs/source/Tutorial_DAG.rst [new file with mode: 0644]
docs/source/index.rst
docs/source/tuto_dag/dag_lab1.cpp [new file with mode: 0644]
docs/source/tuto_dag/dag_lab2-1.cpp [new file with mode: 0644]
docs/source/tuto_dag/dag_lab2-2.cpp [new file with mode: 0644]
docs/source/tuto_dag/dag_lab2-3.cpp [new file with mode: 0644]
docs/source/tuto_dag/img/dag.svg [new file with mode: 0644]
docs/source/tuto_dag/img/dag1.svg [new file with mode: 0644]
docs/source/tuto_dag/img/dag2.svg [new file with mode: 0644]
docs/source/tuto_dag/simple_dax.xml [new file with mode: 0644]
docs/source/tuto_dag/simple_dot.dot [new file with mode: 0644]
docs/source/tuto_dag/simple_json.json [new file with mode: 0644]
docs/source/tuto_dag/small_platform.xml [new file with mode: 0644]
include/simgrid/s4u/Activity.hpp
include/simgrid/s4u/Engine.hpp
src/dag/loaders.cpp

diff --git a/docs/source/Tutorial_DAG.rst b/docs/source/Tutorial_DAG.rst
new file mode 100644 (file)
index 0000000..e807cc4
--- /dev/null
@@ -0,0 +1,418 @@
+.. _simdag:
+
+Simulating DAG
+==============
+
+This tutorial presents the basics to understand how DAG are represented in Simgrid and how to simulate their workflow. 
+
+Definition of a DAG
+-------------------
+
+Directed Acyclic Graph: 
+
+.. math::
+
+   \mathcal{G} = (\mathcal{V},\mathcal{E})
+
+Set of vertices representing :ref:`Activities <API_s4u_Activity>`: 
+
+.. math::
+
+   \mathcal{V} = {v_i | i = 1, ..., V}
+
+Set of edges representing precedence constraints between :ref:`Activities <API_s4u_Activity>`: 
+
+.. math::
+
+   \mathcal{E} = {e_i,j | (i,j) \in {1, ..., V} x {1, ..., V}}
+
+.. image:: /tuto_dag/img/dag.svg
+   :align: center
+
+Representing Vertices/Activities
+................................
+
+There is two types of :ref:`Activities <API_s4u_Activity>` that can represent Vertices: :ref:`Exec <API_s4u_Exec>` and :ref:`Comm <API_s4u_Comm>`.
+Thoses activities must be initiated and configured to properly describe your worflow.
+
+An Exec represents the execution of an amount of flop on a :ref:`Host <API_s4u_Host>` of your platform.
+
+.. code-block:: cpp
+
+   ExecPtr exec = Exec::init();
+   exec->set_flops_amount(int);
+   exec->set_host(Host*);
+   exec->start();
+
+A Comm represents a data transfer between two :ref:`Hosts <API_s4u_Host>` of your platform. 
+
+.. code-block:: cpp
+
+   CommPtr comm = Comm::sendto_init();
+   comm->set_source(Host*);
+   comm->set_destination(Host*);
+   comm->start();
+
+Representing Edges/Dependencies
+...............................
+
+An activity will not start until all of its dependencies have been completed.
+Activities may have any number of successors.
+Dependencies between Activities are created using :cpp:func:`Activity::add_successor(ActivityPtr)`.
+
+.. code-block:: cpp
+
+   exec->add_successor(comm);
+
+The Activity ``comm`` will not start until ``exec`` has been completed.
+
+Lab 1: Basics
+---------------
+
+The goal of this lab is to describe the following DAG: 
+
+.. image:: /tuto_dag/img/dag1.svg
+   :align: center
+
+In this DAG we want ``c1`` to compute 1e9 flops, ``c2`` to compute 5e9 flops and ``c3`` to compute 2e9 flops. 
+There is also a data transfer of 5e8 bytes between ``c1`` and ``c3``.
+
+First of all, include the Simgrid library and define the log category.
+
+.. code-block:: cpp
+
+   #include "simgrid/s4u.hpp"
+
+   XBT_LOG_NEW_DEFAULT_CATEGORY(main, "Messages specific for this s4u tutorial");
+
+Inside the ``main`` function create an instance of :ref:`Engine <API_s4u_Engine>` and load the platform.
+
+.. code-block:: cpp
+
+    simgrid::s4u::Engine e(&argc, argv);
+    e.load_platform(argv[1]);
+
+Retrieve pointers to some hosts.
+
+.. code-block:: cpp
+
+    simgrid::s4u::Host* tremblay = e.host_by_name("Tremblay");
+    simgrid::s4u::Host* jupiter  = e.host_by_name("Jupiter");
+
+Initiate the activities.
+
+.. code-block:: cpp
+
+    simgrid::s4u::ExecPtr c1 = simgrid::s4u::Exec::init();
+    simgrid::s4u::ExecPtr c2 = simgrid::s4u::Exec::init();
+    simgrid::s4u::ExecPtr c3 = simgrid::s4u::Exec::init();
+    simgrid::s4u::CommPtr t1 = simgrid::s4u::Comm::sendto_init();
+
+Give names to thoses activities.
+
+.. code-block:: cpp
+
+    c1->set_name("c1");
+    c2->set_name("c2");
+    c3->set_name("c3");
+    t1->set_name("t1");
+
+Set the amount of work for each activity.
+
+.. code-block:: cpp
+
+    c1->set_flops_amount(1e9);
+    c2->set_flops_amount(5e9);
+    c3->set_flops_amount(2e9);
+    t1->set_payload_size(5e8);
+
+Define the dependencies between the activities.
+
+.. code-block:: cpp
+
+    c1->add_successor(t1);
+    t1->add_successor(c3);
+    c2->add_successor(c3);
+
+Set the location of each Exec activity and source and destination for the Comm activity.
+
+.. code-block:: cpp
+
+    c1->set_host(tremblay);
+    c2->set_host(jupiter);
+    c3->set_host(jupiter);
+    t1->set_source(tremblay);
+    t1->set_destination(jupiter);
+
+Start the executions of Activities without dependencies.
+
+.. code-block:: cpp
+
+    c1->start();
+    c2->start();
+
+Add a callback to monitor the activities.
+
+.. code-block:: cpp
+
+   Activity::on_completion_cb([](simgrid::s4u::Activity const& activity) {
+      XBT_INFO("Activity '%s' is complete (start time: %f, finish time: %f)", activity.get_cname(), activity.get_start_time(),
+               activity.get_finish_time());
+      });
+
+Finally, run the simulation.
+
+.. code-block:: cpp
+
+   e.run();
+
+The execution of this code should give you the following output:
+
+.. code-block:: bash
+
+   [10.194200] [main/INFO] Activity 'c1' is complete (start time: 0.000000, finish time: 10.194200)
+   [65.534235] [main/INFO] Activity 'c2' is complete (start time: 0.000000, finish time: 65.534235)
+   [85.283378] [main/INFO] Activity 't1' is complete (start time: 10.194200, finish time: 85.283378)
+   [111.497072] [main/INFO] Activity 'c3' is complete (start time: 85.283378, finish time: 111.497072)
+
+Lab 2: Import a DAG from a file
+---------------
+
+In this lab we present how to import a DAG into you Simgrid simulation, either using a DOT file, a JSON file, or a DAX file. 
+
+The files presented in this lab describe the following DAG:
+
+.. image:: /tuto_dag/img/dag2.svg
+   :align: center
+
+From a DOT file
+...............
+
+A DOT file describes a workflow in accordance with the graphviz format.
+
+The following DOT file describes the workflow presented at the beginning of this lab:
+
+.. code-block:: xml
+
+   digraph G {
+      c1 [size="1e9"];
+      c2 [size="5e9"];
+      c3 [size="2e9"];
+
+      root->c1 [size="2e8"];
+      root->c2 [size="1e8"];
+      c1->c3   [size="5e8"];
+      c2->c3   [size="-1"];
+      c3->end  [size="2e8"];
+   }
+
+It can be imported as a vector of Activities into Simgrid using :cpp:func:`create_DAG_from_DOT(const std::string& filename)`. Then, you have to assign hosts to your Activities.
+
+.. code-block:: cpp
+
+   #include "simgrid/s4u.hpp"
+
+   XBT_LOG_NEW_DEFAULT_CATEGORY(main, "Messages specific for this s4u example");
+
+   int main(int argc, char* argv[]) {
+      simgrid::s4u::Engine e(&argc, argv);
+      e.load_platform(argv[1]);
+
+      std::vector<simgrid::s4u::ActivityPtr> dag = simgrid::s4u::create_DAG_from_dot(argv[2]);
+
+      simgrid::s4u::Host* tremblay = e.host_by_name("Tremblay");
+      simgrid::s4u::Host* jupiter  = e.host_by_name("Jupiter");
+      simgrid::s4u::Host* fafard  = e.host_by_name("Fafard");
+
+      dynamic_cast<simgrid::s4u::Exec*>(dag[0].get())->set_host(fafard);
+      dynamic_cast<simgrid::s4u::Exec*>(dag[1].get())->set_host(tremblay);
+      dynamic_cast<simgrid::s4u::Exec*>(dag[2].get())->set_host(jupiter);
+      dynamic_cast<simgrid::s4u::Exec*>(dag[3].get())->set_host(jupiter);
+      dynamic_cast<simgrid::s4u::Exec*>(dag[8].get())->set_host(jupiter);
+    
+      for (const auto& a : dag) {
+         if (auto* comm = dynamic_cast<simgrid::s4u::Comm*>(a.get())) {
+               auto pred = dynamic_cast<simgrid::s4u::Exec*>((*comm->get_dependencies().begin()).get());
+               auto succ = dynamic_cast<simgrid::s4u::Exec*>(comm->get_successors().front().get());
+               comm->set_source(pred->get_host())->set_destination(succ->get_host());
+         }
+      }
+
+      simgrid::s4u::Activity::on_completion_cb([](simgrid::s4u::Activity const& activity) {
+      XBT_INFO("Activity '%s' is complete (start time: %f, finish time: %f)", activity.get_cname(), activity.get_start_time(),
+             activity.get_finish_time());
+      });
+
+      e.run();
+      return 0;
+   }
+
+The execution of this code should give you the following output:
+
+.. code-block:: bash
+
+   [0.000000] [main/INFO] Activity 'root' is complete (start time: 0.000000, finish time: 0.000000)
+   [33.394394] [main/INFO] Activity 'root->c2' is complete (start time: 0.000000, finish time: 33.394394)
+   [39.832311] [main/INFO] Activity 'root->c1' is complete (start time: 0.000000, finish time: 39.832311)
+   [50.026511] [main/INFO] Activity 'c1' is complete (start time: 39.832311, finish time: 50.026511)
+   [98.928629] [main/INFO] Activity 'c2' is complete (start time: 33.394394, finish time: 98.928629)
+   [125.115689] [main/INFO] Activity 'c1->c3' is complete (start time: 50.026511, finish time: 125.115689)
+   [151.329383] [main/INFO] Activity 'c3' is complete (start time: 125.115689, finish time: 151.329383)
+   [151.743605] [main/INFO] Activity 'c3->end' is complete (start time: 151.329383, finish time: 151.743605)
+   [151.743605] [main/INFO] Activity 'end' is complete (start time: 151.743605, finish time: 151.743605)
+
+From a JSON file
+................
+
+A JSON file describes a workflow in accordance with the `wfformat <https://github.com/wfcommons/wfformat>`_ .
+
+The following JSON file describes the workflow presented at the beginning of this lab:
+
+.. code-block:: JSON
+
+   {
+      "name": "simple_json",
+      "schemaVersion": "1.0",
+      "workflow": {
+         "makespan": 0,
+         "executedAt": "2023-03-09T00:00:00-00:00",
+         "tasks": [
+         {
+            "name": "c1",
+            "type": "compute",
+            "parents": [],
+            "runtime": 1e9,
+            "machine": "Tremblay"
+         },
+         {
+            "name": "t1",
+            "type": "transfer",
+            "parents": ["c1"],
+            "bytesWritten": 5e8,
+            "machine": "Jupiter"
+         },
+         {
+            "name": "c2",
+            "type": "compute",
+            "parents": [],
+            "runtime": 5e9,
+            "machine": "Jupiter"
+         },
+         {
+            "name": "c3",
+            "type": "compute",
+            "parents": ["t1","c2"],
+         "runtime": 2e9,
+         "machine": "Jupiter"
+         }
+         ],
+         "machines": [
+            {"nodeName": "Tremblay"},
+            {"nodeName": "Jupiter"}
+         ]
+      }
+   }
+
+It can be imported as a vector of Activities into Simgrid using :cpp:func:`create_DAG_from_json(const std::string& filename)`. 
+
+.. code-block:: cpp
+
+   #include "simgrid/s4u.hpp"
+
+   XBT_LOG_NEW_DEFAULT_CATEGORY(main, "Messages specific for this s4u example");
+
+   int main(int argc, char* argv[]) {
+      simgrid::s4u::Engine e(&argc, argv);
+      e.load_platform(argv[1]);
+
+      std::vector<simgrid::s4u::ActivityPtr> dag = simgrid::s4u::create_DAG_from_json(argv[2]);
+
+      simgrid::s4u::Activity::on_completion_cb([](simgrid::s4u::Activity const& activity) {
+      XBT_INFO("Activity '%s' is complete (start time: %f, finish time: %f)", activity.get_cname(), activity.get_start_time(),
+             activity.get_finish_time());
+      });
+
+      e.run();
+      return 0;
+   }
+
+The execution of this code should give you the following output:
+
+.. code-block:: bash
+
+   [10.194200] [main/INFO] Activity 'c1' is complete (start time: 0.000000, finish time: 10.194200)
+   [65.534235] [main/INFO] Activity 'c2' is complete (start time: 0.000000, finish time: 65.534235)
+   [85.283378] [main/INFO] Activity 't1' is complete (start time: 10.194200, finish time: 85.283378)
+   [111.497072] [main/INFO] Activity 'c3' is complete (start time: 85.283378, finish time: 111.497072)
+
+From a DAX file [deprecated]
+............................
+
+A DAX file describes a workflow in accordance with the `Pegasus <http://pegasus.isi.edu/>`_ format.
+
+The following DAX file describes the workflow presented at the beginning of this lab:
+
+.. code-block:: xml
+
+   <?xml version="1.0" encoding="UTF-8"?>
+   <adag xmlns="http://pegasus.isi.edu/schema/DAX" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+      xsi:schemaLocation="http://pegasus.isi.edu/schema/DAX http://pegasus.isi.edu/schema/dax-2.1.xsd"
+      version="2.1">
+      <job id="1" name="c1" runtime="10">
+         <uses file="i1" link="input" register="true" transfer="true" optional="false" type="data" size="2e8"/>
+         <uses file="o1" link="output" register="true" transfer="true" optional="false" type="data" size="5e8"/>
+      </job>
+      <job id="2" name="c2" runtime="50">
+         <uses file="i2" link="input" register="true" transfer="true" optional="false" type="data" size="1e8"/>
+      </job>
+      <job id="3" name="c3" runtime="20">
+         <uses file="o1" link="input" register="true" transfer="true" optional="false" type="data" size="5e8"/>
+         <uses file="o3" link="output" register="true" transfer="true" optional="false" type="data" size="2e8"/>
+      </job>
+      <child ref="3">
+         <parent ref="1"/>
+         <parent ref="2"/>
+      </child>
+   </adag>
+
+It can be imported as a vector of Activities into Simgrid using :cpp:func:`create_DAG_from_DAX(std::string)`.
+
+.. code-block:: cpp
+
+   #include "simgrid/s4u.hpp"
+
+   XBT_LOG_NEW_DEFAULT_CATEGORY(main, "Messages specific for this s4u example");
+
+   int main(int argc, char* argv[]) {
+      simgrid::s4u::Engine e(&argc, argv);
+      e.load_platform(argv[1]);
+
+      std::vector<simgrid::s4u::ActivityPtr> dag = simgrid::s4u::create_DAG_from_DAX(argv[2]);
+
+      simgrid::s4u::Host* tremblay = e.host_by_name("Tremblay");
+      simgrid::s4u::Host* jupiter  = e.host_by_name("Jupiter");
+      simgrid::s4u::Host* fafard  = e.host_by_name("Fafard");
+
+      dynamic_cast<simgrid::s4u::Exec*>(dag[0].get())->set_host(fafard);
+      dynamic_cast<simgrid::s4u::Exec*>(dag[1].get())->set_host(tremblay);
+      dynamic_cast<simgrid::s4u::Exec*>(dag[2].get())->set_host(jupiter);
+      dynamic_cast<simgrid::s4u::Exec*>(dag[3].get())->set_host(jupiter);
+      dynamic_cast<simgrid::s4u::Exec*>(dag[8].get())->set_host(jupiter);
+    
+      for (const auto& a : dag) {
+         if (auto* comm = dynamic_cast<simgrid::s4u::Comm*>(a.get())) {
+            auto pred = dynamic_cast<simgrid::s4u::Exec*>((*comm->get_dependencies().begin()).get());
+            auto succ = dynamic_cast<simgrid::s4u::Exec*>(comm->get_successors().front().get());
+            comm->set_source(pred->get_host())->set_destination(succ->get_host());
+         }
+      }
+
+      simgrid::s4u::Activity::on_completion_cb([](simgrid::s4u::Activity const& activity) {
+      XBT_INFO("Activity '%s' is complete (start time: %f, finish time: %f)", activity.get_cname(), activity.get_start_time(),
+         activity.get_finish_time());
+      });
+
+      e.run();
+      return 0;
+   }
+
index 9c41acb..38445ad 100644 (file)
@@ -59,6 +59,7 @@ of every page. Bugs in the code should be reported
        Simulating distributed algorithms <Tutorial_Algorithms.rst>
        Simulating MPI applications <Tutorial_MPI_Applications.rst>
        Model-checking algorithms <Tutorial_Model-checking.rst>
+   Simulating DAG <Tutorial_DAG.rst>
 
 .. toctree::
    :hidden:
diff --git a/docs/source/tuto_dag/dag_lab1.cpp b/docs/source/tuto_dag/dag_lab1.cpp
new file mode 100644 (file)
index 0000000..1242ffa
--- /dev/null
@@ -0,0 +1,48 @@
+#include "simgrid/s4u.hpp"
+
+XBT_LOG_NEW_DEFAULT_CATEGORY(main, "Messages specific for this s4u tutorial");
+
+int main(int argc, char* argv[]) {
+    simgrid::s4u::Engine e(&argc, argv);
+    e.load_platform(argv[1]);
+
+    simgrid::s4u::Host* tremblay = e.host_by_name("Tremblay");
+    simgrid::s4u::Host* jupiter  = e.host_by_name("Jupiter");
+
+    simgrid::s4u::ExecPtr c1 = simgrid::s4u::Exec::init();
+    simgrid::s4u::ExecPtr c2 = simgrid::s4u::Exec::init();
+    simgrid::s4u::ExecPtr c3 = simgrid::s4u::Exec::init();
+    simgrid::s4u::CommPtr t1 = simgrid::s4u::Comm::sendto_init();
+
+    c1->set_name("c1");
+    c2->set_name("c2");
+    c3->set_name("c3");
+    t1->set_name("t1");
+
+    c1->set_flops_amount(1e9);
+    c2->set_flops_amount(5e9);
+    c3->set_flops_amount(2e9);
+    t1->set_payload_size(5e8);
+
+    c1->add_successor(t1);
+    t1->add_successor(c3);
+    c2->add_successor(c3);
+
+    c1->set_host(tremblay);
+    c2->set_host(jupiter);
+    c3->set_host(jupiter);
+    t1->set_source(tremblay);
+    t1->set_destination(jupiter);
+
+    c1->start();
+    c2->start();
+
+    simgrid::s4u::Activity::on_completion_cb([](simgrid::s4u::Activity const& activity) {
+    XBT_INFO("Activity '%s' is complete (start time: %f, finish time: %f)", activity.get_cname(), activity.get_start_time(),
+             activity.get_finish_time());
+    });
+
+    e.run();
+       return 0;
+}
+
diff --git a/docs/source/tuto_dag/dag_lab2-1.cpp b/docs/source/tuto_dag/dag_lab2-1.cpp
new file mode 100644 (file)
index 0000000..9ee5baa
--- /dev/null
@@ -0,0 +1,37 @@
+#include "simgrid/s4u.hpp"
+
+XBT_LOG_NEW_DEFAULT_CATEGORY(main, "Messages specific for this s4u example");
+
+int main(int argc, char* argv[]) {
+    simgrid::s4u::Engine e(&argc, argv);
+    e.load_platform(argv[1]);
+
+    std::vector<simgrid::s4u::ActivityPtr> dag = simgrid::s4u::create_DAG_from_dot(argv[2]);
+
+    simgrid::s4u::Host* tremblay = e.host_by_name("Tremblay");
+    simgrid::s4u::Host* jupiter  = e.host_by_name("Jupiter");
+    simgrid::s4u::Host* fafard  = e.host_by_name("Fafard");
+
+    dynamic_cast<simgrid::s4u::Exec*>(dag[0].get())->set_host(fafard);
+    dynamic_cast<simgrid::s4u::Exec*>(dag[1].get())->set_host(tremblay);
+    dynamic_cast<simgrid::s4u::Exec*>(dag[2].get())->set_host(jupiter);
+    dynamic_cast<simgrid::s4u::Exec*>(dag[3].get())->set_host(jupiter);
+    dynamic_cast<simgrid::s4u::Exec*>(dag[8].get())->set_host(jupiter);
+    
+    for (const auto& a : dag) {
+        if (auto* comm = dynamic_cast<simgrid::s4u::Comm*>(a.get())) {
+            auto pred = dynamic_cast<simgrid::s4u::Exec*>((*comm->get_dependencies().begin()).get());
+            auto succ = dynamic_cast<simgrid::s4u::Exec*>(comm->get_successors().front().get());
+            comm->set_source(pred->get_host())->set_destination(succ->get_host());
+        }
+    }
+
+    simgrid::s4u::Activity::on_completion_cb([](simgrid::s4u::Activity const& activity) {
+    XBT_INFO("Activity '%s' is complete (start time: %f, finish time: %f)", activity.get_cname(), activity.get_start_time(),
+             activity.get_finish_time());
+    });
+
+    e.run();
+       return 0;
+}
+
diff --git a/docs/source/tuto_dag/dag_lab2-2.cpp b/docs/source/tuto_dag/dag_lab2-2.cpp
new file mode 100644 (file)
index 0000000..f392ecb
--- /dev/null
@@ -0,0 +1,19 @@
+#include "simgrid/s4u.hpp"
+
+XBT_LOG_NEW_DEFAULT_CATEGORY(main, "Messages specific for this s4u example");
+
+int main(int argc, char* argv[]) {
+    simgrid::s4u::Engine e(&argc, argv);
+    e.load_platform(argv[1]);
+
+    std::vector<simgrid::s4u::ActivityPtr> dag = simgrid::s4u::create_DAG_from_json(argv[2]);
+
+    simgrid::s4u::Activity::on_completion_cb([](simgrid::s4u::Activity const& activity) {
+    XBT_INFO("Activity '%s' is complete (start time: %f, finish time: %f)", activity.get_cname(), activity.get_start_time(),
+             activity.get_finish_time());
+    });
+
+    e.run();
+       return 0;
+}
+
diff --git a/docs/source/tuto_dag/dag_lab2-3.cpp b/docs/source/tuto_dag/dag_lab2-3.cpp
new file mode 100644 (file)
index 0000000..e3db543
--- /dev/null
@@ -0,0 +1,37 @@
+#include "simgrid/s4u.hpp"
+
+XBT_LOG_NEW_DEFAULT_CATEGORY(main, "Messages specific for this s4u example");
+
+int main(int argc, char* argv[]) {
+    simgrid::s4u::Engine e(&argc, argv);
+    e.load_platform(argv[1]);
+
+    std::vector<simgrid::s4u::ActivityPtr> dag = simgrid::s4u::create_DAG_from_DAX(argv[2]);
+
+    simgrid::s4u::Host* tremblay = e.host_by_name("Tremblay");
+    simgrid::s4u::Host* jupiter  = e.host_by_name("Jupiter");
+    simgrid::s4u::Host* fafard  = e.host_by_name("Fafard");
+
+    dynamic_cast<simgrid::s4u::Exec*>(dag[0].get())->set_host(fafard);
+    dynamic_cast<simgrid::s4u::Exec*>(dag[1].get())->set_host(tremblay);
+    dynamic_cast<simgrid::s4u::Exec*>(dag[2].get())->set_host(jupiter);
+    dynamic_cast<simgrid::s4u::Exec*>(dag[3].get())->set_host(jupiter);
+    dynamic_cast<simgrid::s4u::Exec*>(dag[8].get())->set_host(jupiter);
+    
+    for (const auto& a : dag) {
+        if (auto* comm = dynamic_cast<simgrid::s4u::Comm*>(a.get())) {
+            auto pred = dynamic_cast<simgrid::s4u::Exec*>((*comm->get_dependencies().begin()).get());
+            auto succ = dynamic_cast<simgrid::s4u::Exec*>(comm->get_successors().front().get());
+            comm->set_source(pred->get_host())->set_destination(succ->get_host());
+        }
+    }
+
+    simgrid::s4u::Activity::on_completion_cb([](simgrid::s4u::Activity const& activity) {
+    XBT_INFO("Activity '%s' is complete (start time: %f, finish time: %f)", activity.get_cname(), activity.get_start_time(),
+             activity.get_finish_time());
+    });
+
+    e.run();
+       return 0;
+}
+
diff --git a/docs/source/tuto_dag/img/dag.svg b/docs/source/tuto_dag/img/dag.svg
new file mode 100644 (file)
index 0000000..58a2e07
--- /dev/null
@@ -0,0 +1,955 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   version="1.1"
+   id="svg2"
+   width="275.83713"
+   height="134.41872"
+   viewBox="0 0 275.83713 134.41872"
+   sodipodi:docname="simdag-101.svg"
+   inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <defs
+     id="defs6">
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath232">
+      <path
+         d="M 0,0 H 305 V 149 H 0 Z"
+         id="path230" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath320">
+      <path
+         d="M 0,1490 V 0 h 3050 v 1490 z m 2228.77,-1230.227 -84.41,-42.203 17.01,-34.015 84.4,42.203 v 0 l -75.58,-17.004 z"
+         clip-rule="evenodd"
+         id="path318" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath334">
+      <path
+         d="M 0,1490 V 0 h 3050 v 1490 z m 2101.53,-1281.879 91.96,-23.933 10.08,36.531 -92.59,23.937 v 0 l 68.66,-37.793 z"
+         clip-rule="evenodd"
+         id="path332" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath348">
+      <path
+         d="M 0,1490 V 0 h 3050 v 1490 z m 963.93,-1245.344 -92.598,-23.937 10.078,-36.531 91.965,23.933 v 0 l -77.477,-1.258 z"
+         clip-rule="evenodd"
+         id="path346" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath362">
+      <path
+         d="M 0,1490 V 0 h 3050 v 1490 z m 829.129,-1264.242 85.035,-42.203 16.379,34.015 -84.406,42.203 v 0 l 59.211,-51.019 z"
+         clip-rule="evenodd"
+         id="path360" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath376">
+      <path
+         d="M 0,1490 V 0 h 3050 v 1490 z m 221.277,-411.98 31.493,-42.21 30.234,22.68 -31.492,42.2 v 0 l 7.558,-41.57 z"
+         clip-rule="evenodd"
+         id="path374" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath390">
+      <path
+         d="M 0,1490 V 0 h 3050 v 1490 z m 269.148,-388.68 -28.347,-44.09 32.125,-20.16 28.347,44.09 v 0 l -35.906,-22.04 z"
+         clip-rule="evenodd"
+         id="path388" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath404">
+      <path
+         d="M 0,1490 V 0 h 3050 v 1490 z m 668.504,-391.83 v -52.91 h 37.793 v 52.91 0 l -18.895,-37.79 z"
+         clip-rule="evenodd"
+         id="path402" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath418">
+      <path
+         d="M 0,1490 V 0 h 3050 v 1490 z m 1093.69,-391.83 v -52.91 h 37.79 v 52.91 0 l -18.89,-37.79 z"
+         clip-rule="evenodd"
+         id="path416" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath432">
+      <path
+         d="M 0,1490 V 0 h 3050 v 1490 z m 1498.08,-408.84 28.35,-44.09 32.12,20.16 -28.34,44.09 v 0 l 4.41,-42.2 z"
+         clip-rule="evenodd"
+         id="path430" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath446">
+      <path
+         d="M 0,1490 V 0 h 3050 v 1490 z m 1544.7,-388.68 -28.35,-44.09 32.13,-20.16 28.34,44.09 v 0 l -35.9,-22.04 z"
+         clip-rule="evenodd"
+         id="path444" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath460">
+      <path
+         d="M 0,1490 V 0 h 3050 v 1490 z m 1944.05,-391.83 v -52.91 h 37.8 v 52.91 0 l -18.9,-37.79 z"
+         clip-rule="evenodd"
+         id="path458" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath474">
+      <path
+         d="M 0,1490 V 0 h 3050 v 1490 z m 2369.23,-391.83 v -52.91 h 37.8 v 52.91 0 l -18.9,-37.79 z"
+         clip-rule="evenodd"
+         id="path472" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath488">
+      <path
+         d="M 0,1490 V 0 h 3050 v 1490 z m 2772.37,-411.98 31.5,-42.21 30.23,22.68 -31.49,42.2 v 0 l 7.55,-41.57 z"
+         clip-rule="evenodd"
+         id="path486" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath502">
+      <path
+         d="M 0,1490 V 0 h 3050 v 1490 z m 2820.24,-388.68 -28.34,-44.09 32.12,-20.16 28.35,44.09 v 0 l -35.91,-22.04 z"
+         clip-rule="evenodd"
+         id="path500" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath516">
+      <path
+         d="M 0,1490 V 0 H 3050 V 1490 Z M 444.891,647.164 482.055,610 l 26.457,26.453 -37.164,37.164 v 0 l 13.855,-40.312 z"
+         clip-rule="evenodd"
+         id="path514" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath530">
+      <path
+         d="M 0,1490 V 0 H 3050 V 1490 Z M 477.645,673.617 440.48,636.453 466.938,610 l 37.164,37.164 v 0 l -39.684,-13.859 z"
+         clip-rule="evenodd"
+         id="path528" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath544">
+      <path
+         d="M 0,1490 V 0 H 3050 V 1490 Z M 870.074,647.164 907.238,610 l 26.453,26.453 -37.164,37.164 v 0 l 13.86,-40.312 z"
+         clip-rule="evenodd"
+         id="path542" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath558">
+      <path
+         d="M 0,1490 V 0 H 3050 V 1490 Z M 902.828,673.617 865.664,636.453 892.117,610 l 37.168,37.164 v 0 l -39.687,-13.859 z"
+         clip-rule="evenodd"
+         id="path556" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath572">
+      <path
+         d="M 0,1490 V 0 H 3050 V 1490 Z M 1295.25,647.164 1332.42,610 l 26.46,26.453 -37.17,37.164 v 0 l 13.86,-40.312 z"
+         clip-rule="evenodd"
+         id="path570" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath586">
+      <path
+         d="M 0,1490 V 0 H 3050 V 1490 Z M 1328.01,673.617 1290.85,636.453 1317.3,610 l 37.16,37.164 v 0 l -39.68,-13.859 z"
+         clip-rule="evenodd"
+         id="path584" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath600">
+      <path
+         d="M 0,1490 V 0 H 3050 V 1490 Z M 1720.44,647.164 1757.6,610 l 26.46,26.453 -37.17,37.164 v 0 l 13.86,-40.312 z"
+         clip-rule="evenodd"
+         id="path598" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath614">
+      <path
+         d="M 0,1490 V 0 h 3050 v 1490 z m 1753.19,-816.383 -37.16,-37.164 26.45,-26.453 37.17,37.164 v 0 l -39.69,-13.859 z"
+         clip-rule="evenodd"
+         id="path612" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath628">
+      <path
+         d="M 0,1490 V 0 H 3050 V 1490 Z M 2145.62,647.164 2182.79,610 l 26.45,26.453 -37.17,37.164 v 0 l 13.86,-40.312 z"
+         clip-rule="evenodd"
+         id="path626" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath642">
+      <path
+         d="M 0,1490 V 0 h 3050 v 1490 z m 2178.38,-816.383 -37.17,-37.164 26.46,-26.453 37.16,37.164 v 0 l -39.68,-13.859 z"
+         clip-rule="evenodd"
+         id="path640" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath656">
+      <path
+         d="M 0,1490 V 0 H 3050 V 1490 Z M 2570.8,647.164 2607.97,610 l 26.45,26.453 -37.16,37.164 v 0 l 13.86,-40.312 z"
+         clip-rule="evenodd"
+         id="path654" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath670">
+      <path
+         d="M 0,1490 V 0 h 3050 v 1490 z m 2603.56,-816.383 -37.17,-37.164 26.46,-26.453 37.16,37.164 v 0 l -39.68,-13.859 z"
+         clip-rule="evenodd"
+         id="path668" />
+    </clipPath>
+  </defs>
+  <sodipodi:namedview
+     id="namedview4"
+     pagecolor="#ffffff"
+     bordercolor="#000000"
+     borderopacity="0.25"
+     inkscape:showpageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1"
+     showgrid="false"
+     inkscape:zoom="2.4005425"
+     inkscape:cx="138.30207"
+     inkscape:cy="0.83314502"
+     inkscape:window-width="1920"
+     inkscape:window-height="1127"
+     inkscape:window-x="1920"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="g8" />
+  <g
+     id="g8"
+     inkscape:groupmode="layer"
+     inkscape:label="simdag-101"
+     transform="matrix(1.3333333,0,0,-1.3333333,-103.81647,182.3422)">
+    <g
+       id="g220"
+       transform="matrix(0.68033,0,0,0.68033,77.66801,35.78601)">
+      <g
+         id="g222">
+        <g
+           id="g224">
+          <g
+             id="g226">
+            <g
+               id="g228"
+               clip-path="url(#clipPath232)">
+              <g
+                 id="g234"
+                 transform="scale(0.1)">
+                <path
+                   d="m 348.516,955.812 c 0,-55.66 -45.125,-100.781 -100.786,-100.781 -55.66,0 -100.781,45.121 -100.781,100.781 0,55.658 45.121,100.788 100.781,100.788 55.661,0 100.786,-45.13 100.786,-100.788 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path236" />
+                <path
+                   d="m 1624.06,955.812 c 0,-55.66 -45.12,-100.781 -100.78,-100.781 -55.66,0 -100.78,45.121 -100.78,100.781 0,55.658 45.12,100.788 100.78,100.788 55.66,0 100.78,-45.13 100.78,-100.788 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path238" />
+                <path
+                   d="m 2049.25,955.812 c 0,-55.66 -45.13,-100.781 -100.79,-100.781 -55.66,0 -100.78,45.121 -100.78,100.781 0,55.658 45.12,100.788 100.78,100.788 55.66,0 100.79,-45.13 100.79,-100.788 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path240" />
+                <path
+                   d="m 2474.43,955.812 c 0,-55.66 -45.13,-100.781 -100.79,-100.781 -55.66,0 -100.78,45.121 -100.78,100.781 0,55.658 45.12,100.788 100.78,100.788 55.66,0 100.79,-45.13 100.79,-100.788 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path242" />
+                <path
+                   d="m 2899.61,955.812 c 0,-55.66 -45.12,-100.781 -100.78,-100.781 -55.66,0 -100.79,45.121 -100.79,100.781 0,55.658 45.13,100.788 100.79,100.788 55.66,0 100.78,-45.13 100.78,-100.788 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path244" />
+                <path
+                   d="m 774.328,955.812 c 0,-55.66 -45.125,-100.781 -100.785,-100.781 -55.66,0 -100.781,45.121 -100.781,100.781 0,55.658 45.121,100.788 100.781,100.788 55.66,0 100.785,-45.13 100.785,-100.788 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path246" />
+                <path
+                   d="m 1200.77,954.555 c 0,-55.66 -45.13,-100.785 -100.79,-100.785 -55.66,0 -100.777,45.125 -100.777,100.785 0,55.655 45.117,100.785 100.777,100.785 55.66,0 100.79,-45.13 100.79,-100.785 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path248" />
+                <path
+                   d="m 575.281,530.633 c 0,-55.66 -45.125,-100.785 -100.785,-100.785 -55.66,0 -100.785,45.125 -100.785,100.785 0,55.66 45.125,100.781 100.785,100.781 55.66,0 100.785,-45.121 100.785,-100.781 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path250" />
+                <path
+                   d="m 1425.64,530.633 c 0,-55.66 -45.12,-100.785 -100.78,-100.785 -55.66,0 -100.78,45.125 -100.78,100.785 0,55.66 45.12,100.781 100.78,100.781 55.66,0 100.78,-45.121 100.78,-100.781 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path252" />
+                <path
+                   d="m 1850.83,530.633 c 0,-55.66 -45.13,-100.785 -100.79,-100.785 -55.66,0 -100.78,45.125 -100.78,100.785 0,55.66 45.12,100.781 100.78,100.781 55.66,0 100.79,-45.121 100.79,-100.781 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path254" />
+                <path
+                   d="m 2701.19,530.633 c 0,-55.66 -45.12,-100.785 -100.78,-100.785 -55.66,0 -100.79,45.125 -100.79,100.785 0,55.66 45.13,100.781 100.79,100.781 55.66,0 100.78,-45.121 100.78,-100.781 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path256" />
+                <path
+                   d="m 1000.46,530.633 c 0,-55.66 -45.12,-100.785 -100.78,-100.785 -55.66,0 -100.785,45.125 -100.785,100.785 0,55.66 45.125,100.781 100.785,100.781 55.66,0 100.78,-45.121 100.78,-100.781"
+                   style="fill:#bfbfbf;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path258" />
+                <path
+                   d="m 1000.46,530.633 c 0,-55.66 -45.12,-100.785 -100.78,-100.785 -55.66,0 -100.785,45.125 -100.785,100.785 0,55.66 45.125,100.781 100.785,100.781 55.66,0 100.78,-45.121 100.78,-100.781 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path260" />
+                <path
+                   d="m 1000.46,105.449 c 0,-55.6599 -45.12,-100.78494 -100.78,-100.78494 -55.66,0 -100.785,45.12504 -100.785,100.78494 0,55.66 45.125,100.785 100.785,100.785 55.66,0 100.78,-45.125 100.78,-100.785"
+                   style="fill:#bfbfbf;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path262" />
+                <path
+                   d="m 1000.46,105.449 c 0,-55.6599 -45.12,-100.78494 -100.78,-100.78494 -55.66,0 -100.785,45.12504 -100.785,100.78494 0,55.66 45.125,100.785 100.785,100.785 55.66,0 100.78,-45.125 100.78,-100.785 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path264" />
+                <path
+                   d="m 2276.01,530.633 c 0,-55.66 -45.12,-100.785 -100.78,-100.785 -55.66,0 -100.79,45.125 -100.79,100.785 0,55.66 45.13,100.781 100.79,100.781 55.66,0 100.78,-45.121 100.78,-100.781"
+                   style="fill:#bfbfbf;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path266" />
+                <path
+                   d="m 2276.01,530.633 c 0,-55.66 -45.12,-100.785 -100.78,-100.785 -55.66,0 -100.79,45.125 -100.79,100.785 0,55.66 45.13,100.781 100.79,100.781 55.66,0 100.78,-45.121 100.78,-100.781 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path268" />
+                <path
+                   d="m 2276.01,105.449 c 0,-55.6599 -45.12,-100.78494 -100.78,-100.78494 -55.66,0 -100.79,45.12504 -100.79,100.78494 0,55.66 45.13,100.785 100.79,100.785 55.66,0 100.78,-45.125 100.78,-100.785"
+                   style="fill:#bfbfbf;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path270" />
+                <path
+                   d="m 2276.01,105.449 c 0,-55.6599 -45.12,-100.78494 -100.78,-100.78494 -55.66,0 -100.79,45.12504 -100.79,100.78494 0,55.66 45.13,100.785 100.79,100.785 55.66,0 100.78,-45.125 100.78,-100.785 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path272" />
+                <path
+                   d="m 206.789,1381 c 0,-55.66 -45.125,-100.79 -100.785,-100.79 -55.6602,0 -100.78525,45.13 -100.78525,100.79 0,55.66 45.12505,100.78 100.78525,100.78 55.66,0 100.785,-45.12 100.785,-100.78"
+                   style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path274" />
+                <path
+                   d="m 206.789,1381 c 0,-55.66 -45.125,-100.79 -100.785,-100.79 -55.6602,0 -100.78525,45.13 -100.78525,100.79 0,55.66 45.12505,100.78 100.78525,100.78 55.66,0 100.785,-45.12 100.785,-100.78 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path276" />
+                <path
+                   d="m 490.242,1381 c 0,-55.66 -45.125,-100.79 -100.785,-100.79 -55.66,0 -100.781,45.13 -100.781,100.79 0,55.66 45.121,100.78 100.781,100.78 55.66,0 100.785,-45.12 100.785,-100.78"
+                   style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path278" />
+                <path
+                   d="m 490.242,1381 c 0,-55.66 -45.125,-100.79 -100.785,-100.79 -55.66,0 -100.781,45.13 -100.781,100.79 0,55.66 45.121,100.78 100.781,100.78 55.66,0 100.785,-45.12 100.785,-100.78 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path280" />
+                <path
+                   d="m 775.586,1379.74 c 0,-55.66 -45.121,-100.79 -100.781,-100.79 -55.66,0 -100.785,45.13 -100.785,100.79 0,55.66 45.125,100.78 100.785,100.78 55.66,0 100.781,-45.12 100.781,-100.78"
+                   style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path282" />
+                <path
+                   d="m 775.586,1379.74 c 0,-55.66 -45.121,-100.79 -100.781,-100.79 -55.66,0 -100.785,45.13 -100.785,100.79 0,55.66 45.125,100.78 100.785,100.78 55.66,0 100.781,-45.12 100.781,-100.78 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path284" />
+                <path
+                   d="m 1198.88,1381 c 0,-55.66 -45.12,-100.79 -100.78,-100.79 -55.66,0 -100.788,45.13 -100.788,100.79 0,55.66 45.128,100.78 100.788,100.78 55.66,0 100.78,-45.12 100.78,-100.78"
+                   style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path286" />
+                <path
+                   d="m 1198.88,1381 c 0,-55.66 -45.12,-100.79 -100.78,-100.79 -55.66,0 -100.788,45.13 -100.788,100.79 0,55.66 45.128,100.78 100.788,100.78 55.66,0 100.78,-45.12 100.78,-100.78 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path288" />
+                <path
+                   d="m 1482.34,1381 c 0,-55.66 -45.13,-100.79 -100.79,-100.79 -55.66,0 -100.78,45.13 -100.78,100.79 0,55.66 45.12,100.78 100.78,100.78 55.66,0 100.79,-45.12 100.79,-100.78"
+                   style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path290" />
+                <path
+                   d="m 1482.34,1381 c 0,-55.66 -45.13,-100.79 -100.79,-100.79 -55.66,0 -100.78,45.13 -100.78,100.79 0,55.66 45.12,100.78 100.78,100.78 55.66,0 100.79,-45.12 100.79,-100.78 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path292" />
+                <path
+                   d="m 1765.79,1381 c 0,-55.66 -45.12,-100.79 -100.78,-100.79 -55.66,0 -100.79,45.13 -100.79,100.79 0,55.66 45.13,100.78 100.79,100.78 55.66,0 100.78,-45.12 100.78,-100.78"
+                   style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path294" />
+                <path
+                   d="m 1765.79,1381 c 0,-55.66 -45.12,-100.79 -100.78,-100.79 -55.66,0 -100.79,45.13 -100.79,100.79 0,55.66 45.13,100.78 100.79,100.78 55.66,0 100.78,-45.12 100.78,-100.78 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path296" />
+                <path
+                   d="m 2049.25,1381 c 0,-55.66 -45.13,-100.79 -100.79,-100.79 -55.66,0 -100.78,45.13 -100.78,100.79 0,55.66 45.12,100.78 100.78,100.78 55.66,0 100.79,-45.12 100.79,-100.78"
+                   style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path298" />
+                <path
+                   d="m 2049.25,1381 c 0,-55.66 -45.13,-100.79 -100.79,-100.79 -55.66,0 -100.78,45.13 -100.78,100.79 0,55.66 45.12,100.78 100.78,100.78 55.66,0 100.79,-45.12 100.79,-100.78 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path300" />
+                <path
+                   d="m 2474.43,1381 c 0,-55.66 -45.13,-100.79 -100.79,-100.79 -55.66,0 -100.78,45.13 -100.78,100.79 0,55.66 45.12,100.78 100.78,100.78 55.66,0 100.79,-45.12 100.79,-100.78"
+                   style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path302" />
+                <path
+                   d="m 2474.43,1381 c 0,-55.66 -45.13,-100.79 -100.79,-100.79 -55.66,0 -100.78,45.13 -100.78,100.79 0,55.66 45.12,100.78 100.78,100.78 55.66,0 100.79,-45.12 100.79,-100.78 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path304" />
+                <path
+                   d="m 2757.88,1381 c 0,-55.66 -45.12,-100.79 -100.78,-100.79 -55.66,0 -100.78,45.13 -100.78,100.79 0,55.66 45.12,100.78 100.78,100.78 55.66,0 100.78,-45.12 100.78,-100.78"
+                   style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path306" />
+                <path
+                   d="m 2757.88,1381 c 0,-55.66 -45.12,-100.79 -100.78,-100.79 -55.66,0 -100.78,45.13 -100.78,100.79 0,55.66 45.12,100.78 100.78,100.78 55.66,0 100.78,-45.12 100.78,-100.78 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path308" />
+                <path
+                   d="m 3041.34,1381 c 0,-55.66 -45.13,-100.79 -100.79,-100.79 -55.66,0 -100.78,45.13 -100.78,100.79 0,55.66 45.12,100.78 100.78,100.78 55.66,0 100.79,-45.12 100.79,-100.78"
+                   style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path310" />
+                <path
+                   d="m 3041.34,1381 c 0,-55.66 -45.13,-100.79 -100.79,-100.79 -55.66,0 -100.78,45.13 -100.78,100.79 0,55.66 45.12,100.78 100.78,100.78 55.66,0 100.79,-45.12 100.79,-100.78 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path312" />
+                <g
+                   id="g314">
+                  <g
+                     id="g316"
+                     clip-path="url(#clipPath320)">
+                    <path
+                       d="M 2614.89,431.105 2161.37,204.344"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path322" />
+                  </g>
+                </g>
+                <path
+                   d="m 2228.77,259.773 -58.58,-51.019 75.58,17.004 -17,34.015"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path324" />
+                <path
+                   d="m 2228.77,259.773 -58.58,-51.019 75.58,17.004 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path326" />
+                <g
+                   id="g328">
+                  <g
+                     id="g330"
+                     clip-path="url(#clipPath334)">
+                    <path
+                       d="M 1339.35,431.105 2189.71,204.344"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path336" />
+                  </g>
+                </g>
+                <path
+                   d="m 2101.53,208.121 78.11,-1.258 -68.66,37.793 -9.45,-36.535"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path338" />
+                <path
+                   d="m 2101.53,208.121 78.11,-1.258 -68.66,37.793 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path340" />
+                <g
+                   id="g342">
+                  <g
+                     id="g344"
+                     clip-path="url(#clipPath348)">
+                    <path
+                       d="M 1736.18,431.105 885.82,204.344"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path350" />
+                  </g>
+                </g>
+                <path
+                   d="m 963.93,244.656 -68.032,-37.793 77.477,1.258 -9.445,36.535"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path352" />
+                <path
+                   d="m 963.93,244.656 -68.032,-37.793 77.477,1.258 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path354" />
+                <g
+                   id="g356">
+                  <g
+                     id="g358"
+                     clip-path="url(#clipPath362)">
+                    <path
+                       d="M 460.637,431.105 914.164,204.344"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path364" />
+                  </g>
+                </g>
+                <path
+                   d="m 829.129,225.758 76.219,-17.004 -59.211,51.019 -17.008,-34.015"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path366" />
+                <path
+                   d="m 829.129,225.758 76.219,-17.004 -59.211,51.019 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path368" />
+                <g
+                   id="g370">
+                  <g
+                     id="g372"
+                     clip-path="url(#clipPath376)">
+                    <path
+                       d="M 92.1445,1281.47 262.219,1054.71"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path378" />
+                  </g>
+                </g>
+                <path
+                   d="m 221.277,1078.02 37.793,-18.9 -7.558,41.57 -30.235,-22.67"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path380" />
+                <path
+                   d="m 221.277,1078.02 37.793,-18.9 -7.558,41.57 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path382" />
+                <g
+                   id="g384">
+                  <g
+                     id="g386"
+                     clip-path="url(#clipPath390)">
+                    <path
+                       d="M 403.945,1281.47 262.219,1054.71"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path392" />
+                  </g>
+                </g>
+                <path
+                   d="m 269.148,1101.32 -3.781,-42.2 35.906,22.04 -32.125,20.16"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path394" />
+                <path
+                   d="m 269.148,1101.32 -3.781,-42.2 35.906,22.04 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path396" />
+                <g
+                   id="g398">
+                  <g
+                     id="g400"
+                     clip-path="url(#clipPath404)">
+                    <path
+                       d="M 687.402,1281.47 V 1054.71"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path406" />
+                  </g>
+                </g>
+                <path
+                   d="m 668.504,1098.17 18.898,-37.79 18.895,37.79 h -37.793"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path408" />
+                <path
+                   d="m 668.504,1098.17 18.898,-37.79 18.895,37.79 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path410" />
+                <g
+                   id="g412">
+                  <g
+                     id="g414"
+                     clip-path="url(#clipPath418)">
+                    <path
+                       d="M 1112.59,1281.47 V 1054.71"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path420" />
+                  </g>
+                </g>
+                <path
+                   d="m 1093.69,1098.17 18.9,-37.79 18.89,37.79 h -37.79"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path422" />
+                <path
+                   d="m 1093.69,1098.17 18.9,-37.79 18.89,37.79 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path424" />
+                <g
+                   id="g426">
+                  <g
+                     id="g428"
+                     clip-path="url(#clipPath432)">
+                    <path
+                       d="m 1396.04,1281.47 141.73,-226.76"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path434" />
+                  </g>
+                </g>
+                <path
+                   d="m 1498.08,1081.16 36.54,-22.04 -4.41,42.2 -32.13,-20.16"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path436" />
+                <path
+                   d="m 1498.08,1081.16 36.54,-22.04 -4.41,42.2 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path438" />
+                <g
+                   id="g440">
+                  <g
+                     id="g442"
+                     clip-path="url(#clipPath446)">
+                    <path
+                       d="M 1679.5,1281.47 1537.77,1054.71"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path448" />
+                  </g>
+                </g>
+                <path
+                   d="m 1544.7,1101.32 -3.78,-42.2 35.9,22.04 -32.12,20.16"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path450" />
+                <path
+                   d="m 1544.7,1101.32 -3.78,-42.2 35.9,22.04 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path452" />
+                <g
+                   id="g454">
+                  <g
+                     id="g456"
+                     clip-path="url(#clipPath460)">
+                    <path
+                       d="M 1962.95,1281.47 V 1054.71"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path462" />
+                  </g>
+                </g>
+                <path
+                   d="m 1944.05,1098.17 18.9,-37.79 18.9,37.79 h -37.8"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path464" />
+                <path
+                   d="m 1944.05,1098.17 18.9,-37.79 18.9,37.79 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path466" />
+                <g
+                   id="g468">
+                  <g
+                     id="g470"
+                     clip-path="url(#clipPath474)">
+                    <path
+                       d="M 2388.13,1281.47 V 1054.71"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path476" />
+                  </g>
+                </g>
+                <path
+                   d="m 2369.23,1098.17 18.9,-37.79 18.9,37.79 h -37.8"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path478" />
+                <path
+                   d="m 2369.23,1098.17 18.9,-37.79 18.9,37.79 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path480" />
+                <g
+                   id="g482">
+                  <g
+                     id="g484"
+                     clip-path="url(#clipPath488)">
+                    <path
+                       d="m 2643.24,1281.47 170.07,-226.76"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path490" />
+                  </g>
+                </g>
+                <path
+                   d="m 2772.37,1078.02 37.79,-18.9 -7.55,41.57 -30.24,-22.67"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path492" />
+                <path
+                   d="m 2772.37,1078.02 37.79,-18.9 -7.55,41.57 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path494" />
+                <g
+                   id="g496">
+                  <g
+                     id="g498"
+                     clip-path="url(#clipPath502)">
+                    <path
+                       d="M 2955.04,1281.47 2813.31,1054.71"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path504" />
+                  </g>
+                </g>
+                <path
+                   d="m 2820.24,1101.32 -3.78,-42.2 35.91,22.04 -32.13,20.16"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path506" />
+                <path
+                   d="m 2820.24,1101.32 -3.78,-42.2 35.91,22.04 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path508" />
+                <g
+                   id="g510">
+                  <g
+                     id="g512"
+                     clip-path="url(#clipPath516)">
+                    <path
+                       d="M 262.219,856.289 488.984,629.527"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path518" />
+                  </g>
+                </g>
+                <path
+                   d="m 444.891,647.164 40.312,-13.859 -13.855,40.312 -26.457,-26.453"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path520" />
+                <path
+                   d="m 444.891,647.164 40.312,-13.859 -13.855,40.312 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path522" />
+                <g
+                   id="g524">
+                  <g
+                     id="g526"
+                     clip-path="url(#clipPath530)">
+                    <path
+                       d="M 687.402,856.289 460.637,629.527"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path532" />
+                  </g>
+                </g>
+                <path
+                   d="m 477.645,673.617 -13.227,-40.312 39.684,13.859 -26.457,26.453"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path534" />
+                <path
+                   d="m 477.645,673.617 -13.227,-40.312 39.684,13.859 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path536" />
+                <g
+                   id="g538">
+                  <g
+                     id="g540"
+                     clip-path="url(#clipPath544)">
+                    <path
+                       d="M 687.402,856.289 914.164,629.527"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path546" />
+                  </g>
+                </g>
+                <path
+                   d="m 870.074,647.164 40.313,-13.859 -13.86,40.312 -26.453,-26.453"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path548" />
+                <path
+                   d="m 870.074,647.164 40.313,-13.859 -13.86,40.312 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path550" />
+                <g
+                   id="g552">
+                  <g
+                     id="g554"
+                     clip-path="url(#clipPath558)">
+                    <path
+                       d="M 1112.59,856.289 885.82,629.527"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path560" />
+                  </g>
+                </g>
+                <path
+                   d="m 902.828,673.617 -13.23,-40.312 39.687,13.859 -26.457,26.453"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path562" />
+                <path
+                   d="m 902.828,673.617 -13.23,-40.312 39.687,13.859 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path564" />
+                <g
+                   id="g566">
+                  <g
+                     id="g568"
+                     clip-path="url(#clipPath572)">
+                    <path
+                       d="M 1112.59,856.289 1339.35,629.527"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path574" />
+                  </g>
+                </g>
+                <path
+                   d="m 1295.25,647.164 40.32,-13.859 -13.86,40.312 -26.46,-26.453"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path576" />
+                <path
+                   d="m 1295.25,647.164 40.32,-13.859 -13.86,40.312 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path578" />
+                <g
+                   id="g580">
+                  <g
+                     id="g582"
+                     clip-path="url(#clipPath586)">
+                    <path
+                       d="M 1537.77,856.289 1311,629.527"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path588" />
+                  </g>
+                </g>
+                <path
+                   d="m 1328.01,673.617 -13.23,-40.312 39.68,13.859 -26.45,26.453"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path590" />
+                <path
+                   d="m 1328.01,673.617 -13.23,-40.312 39.68,13.859 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path592" />
+                <g
+                   id="g594">
+                  <g
+                     id="g596"
+                     clip-path="url(#clipPath600)">
+                    <path
+                       d="M 1537.77,856.289 1764.53,629.527"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path602" />
+                  </g>
+                </g>
+                <path
+                   d="m 1720.44,647.164 40.31,-13.859 -13.86,40.312 -26.45,-26.453"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path604" />
+                <path
+                   d="m 1720.44,647.164 40.31,-13.859 -13.86,40.312 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path606" />
+                <g
+                   id="g608">
+                  <g
+                     id="g610"
+                     clip-path="url(#clipPath614)">
+                    <path
+                       d="M 1962.95,856.289 1736.18,629.527"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path616" />
+                  </g>
+                </g>
+                <path
+                   d="m 1753.19,673.617 -13.23,-40.312 39.69,13.859 -26.46,26.453"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path618" />
+                <path
+                   d="m 1753.19,673.617 -13.23,-40.312 39.69,13.859 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path620" />
+                <g
+                   id="g622">
+                  <g
+                     id="g624"
+                     clip-path="url(#clipPath628)">
+                    <path
+                       d="M 1962.95,856.289 2189.71,629.527"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path630" />
+                  </g>
+                </g>
+                <path
+                   d="m 2145.62,647.164 40.31,-13.859 -13.86,40.312 -26.45,-26.453"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path632" />
+                <path
+                   d="m 2145.62,647.164 40.31,-13.859 -13.86,40.312 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path634" />
+                <g
+                   id="g636">
+                  <g
+                     id="g638"
+                     clip-path="url(#clipPath642)">
+                    <path
+                       d="M 2388.13,856.289 2161.37,629.527"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path644" />
+                  </g>
+                </g>
+                <path
+                   d="m 2178.38,673.617 -13.23,-40.312 39.68,13.859 -26.45,26.453"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path646" />
+                <path
+                   d="m 2178.38,673.617 -13.23,-40.312 39.68,13.859 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path648" />
+                <g
+                   id="g650">
+                  <g
+                     id="g652"
+                     clip-path="url(#clipPath656)">
+                    <path
+                       d="M 2388.13,856.289 2614.89,629.527"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path658" />
+                  </g>
+                </g>
+                <path
+                   d="m 2570.8,647.164 40.32,-13.859 -13.86,40.312 -26.46,-26.453"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path660" />
+                <path
+                   d="m 2570.8,647.164 40.32,-13.859 -13.86,40.312 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path662" />
+                <g
+                   id="g664">
+                  <g
+                     id="g666"
+                     clip-path="url(#clipPath670)">
+                    <path
+                       d="M 2813.31,856.289 2586.55,629.527"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path672" />
+                  </g>
+                </g>
+                <path
+                   d="m 2603.56,673.617 -13.23,-40.312 39.68,13.859 -26.45,26.453"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path674" />
+                <path
+                   d="m 2603.56,673.617 -13.23,-40.312 39.68,13.859 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path676" />
+                <g
+                   id="g678"
+                   transform="scale(10)">
+                  <text
+                     xml:space="preserve"
+                     transform="matrix(1,0,0,-1,9.21445,133.816)"
+                     style="font-variant:normal;font-weight:normal;font-size:11.3382px;font-family:Times;-inkscape-font-specification:Times-Roman;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
+                     id="text688"><tspan
+                       x="0 28.345726 56.691002 99.209366 127.55509 155.90036 184.24609 226.76401 255.10973 277.78589 283.45499"
+                       y="0"
+                       sodipodi:role="line"
+                       id="tspan680">12345678910</tspan><tspan
+                       x="8.5039101 14.17301 51.02182 56.690918 93.540184 99.209282 136.05855 141.72765 178.5769 184.24602 221.09494 226.76404 263.61331 269.28241"
+                       y="42.518398"
+                       sodipodi:role="line"
+                       id="tspan682">11121314151617</tspan><tspan
+                       x="31.180111 36.849209 73.698471 79.367577 119.05116 124.72026 161.56952 167.23862 204.08789 209.75699 246.60579 252.2749"
+                       y="85.036797"
+                       sodipodi:role="line"
+                       id="tspan684">181920212223</tspan><tspan
+                       x="201.25311 206.92221 73.698112 79.36721"
+                       y="127.5548"
+                       sodipodi:role="line"
+                       id="tspan686">2524</tspan></text>
+                </g>
+              </g>
+            </g>
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/docs/source/tuto_dag/img/dag1.svg b/docs/source/tuto_dag/img/dag1.svg
new file mode 100644 (file)
index 0000000..7a6835f
--- /dev/null
@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   version="1.1"
+   id="svg2"
+   width="63.57653"
+   height="70.614357"
+   viewBox="0 0 63.576531 70.614358"
+   sodipodi:docname="simdag-101.pdf"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <defs
+     id="defs6">
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath162">
+      <path
+         d="M 0,0 H 130 V 144 H 0 Z"
+         id="path160" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath176">
+      <path
+         d="M 0,1440 V 0 h 1300 v 1440 z m 307.016,-526.48 59.211,-74.329 29.605,23.934 -59.211,74.328 v 0 l 32.754,-71.176 z"
+         clip-rule="evenodd"
+         id="path174" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath190">
+      <path
+         d="M 0,1440 V 0 h 1300 v 1440 z m 558.977,-1097.172 63.617,-71.176 28.347,25.196 -63.621,71.175 v 0 l 36.535,-69.289 z"
+         clip-rule="evenodd"
+         id="path188" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath204">
+      <path
+         d="M 0,1440 V 0 h 1300 v 1440 z m 658.5,-1065.047 -49.133,-81.887 32.754,-19.527 48.504,81.887 v 0 l -54.801,-55.43 z"
+         clip-rule="evenodd"
+         id="path202" />
+    </clipPath>
+  </defs>
+  <sodipodi:namedview
+     id="namedview4"
+     pagecolor="#ffffff"
+     bordercolor="#000000"
+     borderopacity="0.25"
+     inkscape:showpageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1"
+     showgrid="false" />
+  <g
+     id="g8"
+     inkscape:groupmode="layer"
+     inkscape:label="simdag-101"
+     transform="matrix(1.3333333,0,0,-1.3333333,-355.80477,212.98189)">
+    <g
+       id="g150"
+       transform="matrix(0.37244,0,0,0.37244,266.67401,106.57601)">
+      <g
+         id="g152">
+        <g
+           id="g154">
+          <g
+             id="g156">
+            <g
+               id="g158"
+               clip-path="url(#clipPath162)">
+              <g
+                 id="g164"
+                 transform="scale(0.1)">
+                <path
+                   d="m 517.402,716.359 c 0,-78.273 -63.453,-141.726 -141.726,-141.726 -78.274,0 -141.731,63.453 -141.731,141.726 0,78.274 63.457,141.727 141.731,141.727 78.273,0 141.726,-63.453 141.726,-141.727"
+                   style="fill:#ff8080;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path166" />
+                <path
+                   d="m 517.402,716.359 c 0,-78.273 -63.453,-141.726 -141.726,-141.726 -78.274,0 -141.731,63.453 -141.731,141.726 0,78.274 63.457,141.727 141.731,141.727 78.273,0 141.726,-63.453 141.726,-141.727 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path168" />
+                <g
+                   id="g170">
+                  <g
+                     id="g172"
+                     clip-path="url(#clipPath176)">
+                    <path
+                       d="M 148.91,1141.54 375.676,858.086"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path178" />
+                  </g>
+                </g>
+                <path
+                   d="m 307.016,913.52 62.359,-47.243 -32.754,71.176 -29.605,-23.933"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path180" />
+                <path
+                   d="m 307.016,913.52 62.359,-47.243 -32.754,71.176 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path182" />
+                <g
+                   id="g184">
+                  <g
+                     id="g186"
+                     clip-path="url(#clipPath190)">
+                    <path
+                       d="M 375.676,574.633 630.785,291.176"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path192" />
+                  </g>
+                </g>
+                <path
+                   d="m 558.977,342.828 64.878,-44.094 -36.535,69.289 -28.343,-25.195"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path194" />
+                <path
+                   d="m 558.977,342.828 64.878,-44.094 -36.535,69.289 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path196" />
+                <g
+                   id="g198">
+                  <g
+                     id="g200"
+                     clip-path="url(#clipPath204)">
+                    <path
+                       d="M 1141,1141.54 630.785,291.176"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path206" />
+                  </g>
+                </g>
+                <path
+                   d="m 658.5,374.953 -22.676,-74.957 54.801,55.43 -32.125,19.527"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path208" />
+                <path
+                   d="m 658.5,374.953 -22.676,-74.957 54.801,55.43 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path210" />
+                <path
+                   d="m 7.18359,1141.54 h 283.453 v 283.453 H 7.18359 Z"
+                   style="fill:#8080ff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path212" />
+                <path
+                   d="m 7.18359,1141.54 h 283.453 v 283.453 H 7.18359 Z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path214" />
+                <path
+                   d="m 999.273,1141.54 h 283.457 v 283.453 H 999.273 Z"
+                   style="fill:#8080ff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path216" />
+                <path
+                   d="m 999.273,1141.54 h 283.457 v 283.453 H 999.273 Z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path218" />
+                <path
+                   d="m 489.055,7.72266 h 283.457 v 283.453 H 489.055 Z"
+                   style="fill:#8080ff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path220" />
+                <path
+                   d="m 489.055,7.72266 h 283.457 v 283.453 H 489.055 Z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path222" />
+                <g
+                   id="g224"
+                   transform="scale(10)">
+                  <text
+                     xml:space="preserve"
+                     transform="matrix(1,0,0,-1,31.8984,65.9668)"
+                     style="font-variant:normal;font-weight:bold;font-size:13.2279px;font-family:Times;-inkscape-font-specification:Times-Bold;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
+                     id="text232"><tspan
+                       x="0 4.4048905"
+                       y="0"
+                       sodipodi:role="line"
+                       id="tspan226">t1</tspan><tspan
+                       x="-22.6766 -16.803411 76.532784 82.405968"
+                       y="-56.691002"
+                       sodipodi:role="line"
+                       id="tspan228">c1c2</tspan><tspan
+                       x="25.5109 31.384089"
+                       y="56.691002"
+                       sodipodi:role="line"
+                       id="tspan230">c3</tspan></text>
+                </g>
+              </g>
+            </g>
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/docs/source/tuto_dag/img/dag2.svg b/docs/source/tuto_dag/img/dag2.svg
new file mode 100644 (file)
index 0000000..7611139
--- /dev/null
@@ -0,0 +1,398 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   version="1.1"
+   id="svg2"
+   width="63.701672"
+   height="183.22269"
+   viewBox="0 0 63.701672 183.22269"
+   sodipodi:docname="simdag-101.pdf"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <defs
+     id="defs6">
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath182">
+      <path
+         d="M 0,0 H 130 V 371 H 0 Z"
+         id="path180" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath196">
+      <path
+         d="M 0,3710 V 0 h 1300 v 3710 z m 307.016,-1662.48 59.211,-74.33 29.605,23.93 -59.211,74.33 v 0 l 32.754,-71.17 z"
+         clip-rule="evenodd"
+         id="path194" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath210">
+      <path
+         d="M 0,3710 V 0 h 1300 v 3710 z m 558.977,-2233.17 63.617,-71.18 28.347,25.2 -63.621,71.17 v 0 l 36.535,-69.29 z"
+         clip-rule="evenodd"
+         id="path208" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath224">
+      <path
+         d="M 0,3710 V 0 h 1300 v 3710 z m 658.5,-2201.05 -49.133,-81.88 32.754,-19.53 48.504,81.89 v 0 L 635.824,1434 Z"
+         clip-rule="evenodd"
+         id="path222" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath272">
+      <path
+         d="M 0,3710 V 0 H 1300 V 3710 Z M 611.887,377.023 V 281.91 h 37.793 v 95.113 0 l -18.895,-75.585 z"
+         clip-rule="evenodd"
+         id="path270" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath286">
+      <path
+         d="M 0,3710 V 0 h 1300 v 3710 z m 1057.23,-557.01 81.88,-47.87 19.53,32.76 -82.52,47.87 v 0 l 56.06,-54.8 z"
+         clip-rule="evenodd"
+         id="path284" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath300">
+      <path
+         d="M 0,3710 V 0 h 1300 v 3710 z m 214.418,-525.51 -83.145,-46.61 18.266,-32.76 83.149,46.61 v 0 l -74.958,-20.78 z"
+         clip-rule="evenodd"
+         id="path298" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath322">
+      <path
+         d="M 0,3710 V 0 H 1300 V 3710 Z M 611.887,943.934 V 848.82 h 37.793 v 95.114 0 l -18.895,-75.586 z"
+         clip-rule="evenodd"
+         id="path320" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath336">
+      <path
+         d="M 0,3710 V 0 H 1300 V 3710 Z M 1122.11,2644.66 v -95.11 h 37.79 v 95.11 0 l -18.9,-75.59 z"
+         clip-rule="evenodd"
+         id="path334" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath350">
+      <path
+         d="M 0,3710 V 0 H 1300 V 3710 Z M 130.012,2644.66 v -95.11 h 37.797 v 95.11 0 l -18.899,-75.59 z"
+         clip-rule="evenodd"
+         id="path348" />
+    </clipPath>
+  </defs>
+  <sodipodi:namedview
+     id="namedview4"
+     pagecolor="#ffffff"
+     bordercolor="#000000"
+     borderopacity="0.25"
+     inkscape:showpageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1"
+     showgrid="false" />
+  <g
+     id="g8"
+     inkscape:groupmode="layer"
+     inkscape:label="simdag-101"
+     transform="matrix(1.3333333,0,0,-1.3333333,-355.80477,267.77649)">
+    <g
+       id="g170"
+       transform="matrix(0.37244,0,0,0.37244,266.67401,63.20901)">
+      <g
+         id="g172">
+        <g
+           id="g174">
+          <g
+             id="g176">
+            <g
+               id="g178"
+               clip-path="url(#clipPath182)">
+              <g
+                 id="g184"
+                 transform="scale(0.1)">
+                <path
+                   d="m 517.402,1850.36 c 0,-78.27 -63.453,-141.73 -141.726,-141.73 -78.274,0 -141.731,63.46 -141.731,141.73 0,78.27 63.457,141.73 141.731,141.73 78.273,0 141.726,-63.46 141.726,-141.73"
+                   style="fill:#ff8080;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path186" />
+                <path
+                   d="m 517.402,1850.36 c 0,-78.27 -63.453,-141.73 -141.726,-141.73 -78.274,0 -141.731,63.46 -141.731,141.73 0,78.27 63.457,141.73 141.731,141.73 78.273,0 141.726,-63.46 141.726,-141.73 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path188" />
+                <g
+                   id="g190">
+                  <g
+                     id="g192"
+                     clip-path="url(#clipPath196)">
+                    <path
+                       d="M 148.91,2275.54 375.676,1992.09"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path198" />
+                  </g>
+                </g>
+                <path
+                   d="m 307.016,2047.52 62.359,-47.24 -32.754,71.17 -29.605,-23.93"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path200" />
+                <path
+                   d="m 307.016,2047.52 62.359,-47.24 -32.754,71.17 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path202" />
+                <g
+                   id="g204">
+                  <g
+                     id="g206"
+                     clip-path="url(#clipPath210)">
+                    <path
+                       d="M 375.676,1708.63 630.785,1425.18"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path212" />
+                  </g>
+                </g>
+                <path
+                   d="m 558.977,1476.83 64.878,-44.1 -36.535,69.29 -28.343,-25.19"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path214" />
+                <path
+                   d="m 558.977,1476.83 64.878,-44.1 -36.535,69.29 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path216" />
+                <g
+                   id="g218">
+                  <g
+                     id="g220"
+                     clip-path="url(#clipPath224)">
+                    <path
+                       d="M 1141,2275.54 630.785,1425.18"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path226" />
+                  </g>
+                </g>
+                <path
+                   d="m 658.5,1508.95 -22.676,-74.95 54.801,55.43 -32.125,19.52"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path228" />
+                <path
+                   d="m 658.5,1508.95 -22.676,-74.95 54.801,55.43 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path230" />
+                <path
+                   d="m 7.18359,2275.54 h 283.453 v 283.453 H 7.18359 Z"
+                   style="fill:#8080ff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path232" />
+                <path
+                   d="m 7.18359,2275.54 h 283.453 v 283.453 H 7.18359 Z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path234" />
+                <path
+                   d="m 999.273,2275.54 h 283.457 v 283.453 H 999.273 Z"
+                   style="fill:#8080ff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path236" />
+                <path
+                   d="m 999.273,2275.54 h 283.457 v 283.453 H 999.273 Z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path238" />
+                <path
+                   d="m 489.055,1141.72 h 283.457 v 283.453 H 489.055 Z"
+                   style="fill:#8080ff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path240" />
+                <path
+                   d="m 489.055,1141.72 h 283.457 v 283.453 H 489.055 Z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path242" />
+                <g
+                   id="g244"
+                   transform="scale(10)">
+                  <text
+                     xml:space="preserve"
+                     transform="matrix(1,0,0,-1,31.8984,179.367)"
+                     style="font-variant:normal;font-weight:bold;font-size:13.2279px;font-family:Times;-inkscape-font-specification:Times-Bold;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
+                     id="text252"><tspan
+                       x="0 4.4048905"
+                       y="0"
+                       sodipodi:role="line"
+                       id="tspan246">t1</tspan><tspan
+                       x="-22.6766 -16.803411 76.532784 82.405968"
+                       y="-56.691002"
+                       sodipodi:role="line"
+                       id="tspan248">c1c2</tspan><tspan
+                       x="25.5109 31.384089"
+                       y="56.691002"
+                       sodipodi:role="line"
+                       id="tspan250">c3</tspan></text>
+                </g>
+                <path
+                   d="m 768.73,714.02 c 0,-78.274 -63.453,-141.727 -141.726,-141.727 -78.274,0 -141.727,63.453 -141.727,141.727 0,78.273 63.453,141.726 141.727,141.726 78.273,0 141.726,-63.453 141.726,-141.726"
+                   style="fill:#ff8080;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path254" />
+                <path
+                   d="m 768.73,714.02 c 0,-78.274 -63.453,-141.727 -141.726,-141.727 -78.274,0 -141.727,63.453 -141.727,141.727 0,78.273 63.453,141.726 141.727,141.726 78.273,0 141.726,-63.453 141.726,-141.726 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path256" />
+                <path
+                   d="m 1285.25,2983.55 c 0,-78.27 -63.45,-141.73 -141.73,-141.73 -78.27,0 -141.73,63.46 -141.73,141.73 0,78.27 63.46,141.73 141.73,141.73 78.28,0 141.73,-63.46 141.73,-141.73"
+                   style="fill:#ff8080;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path258" />
+                <path
+                   d="m 1285.25,2983.55 c 0,-78.27 -63.45,-141.73 -141.73,-141.73 -78.27,0 -141.73,63.46 -141.73,141.73 0,78.27 63.46,141.73 141.73,141.73 78.28,0 141.73,-63.46 141.73,-141.73 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path260" />
+                <path
+                   d="m 290.637,2984.18 c 0,-78.27 -63.453,-141.73 -141.727,-141.73 -78.2733,0 -141.72641,63.46 -141.72641,141.73 0,78.27 63.45311,141.73 141.72641,141.73 78.274,0 141.727,-63.46 141.727,-141.73"
+                   style="fill:#ff8080;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path262" />
+                <path
+                   d="m 290.637,2984.18 c 0,-78.27 -63.453,-141.73 -141.727,-141.73 -78.2733,0 -141.72641,63.46 -141.72641,141.73 0,78.27 63.45311,141.73 141.72641,141.73 78.274,0 141.727,-63.46 141.727,-141.73 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path264" />
+                <g
+                   id="g266">
+                  <g
+                     id="g268"
+                     clip-path="url(#clipPath272)">
+                    <path
+                       d="M 630.785,574.812 V 291.355"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path274" />
+                  </g>
+                </g>
+                <path
+                   d="m 611.887,377.023 18.898,-75.585 18.895,75.585 h -37.793"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path276" />
+                <path
+                   d="m 611.887,377.023 18.898,-75.585 18.895,75.585 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path278" />
+                <g
+                   id="g280">
+                  <g
+                     id="g282"
+                     clip-path="url(#clipPath286)">
+                    <path
+                       d="M 659.129,3409.36 1141,3125.91"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path288" />
+                  </g>
+                </g>
+                <path
+                   d="m 1057.23,3152.99 74.95,-22.04 -56.06,54.8 -18.89,-32.76"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path290" />
+                <path
+                   d="m 1057.23,3152.99 74.95,-22.04 -56.06,54.8 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path292" />
+                <g
+                   id="g294">
+                  <g
+                     id="g296"
+                     clip-path="url(#clipPath300)">
+                    <path
+                       d="M 659.129,3409.36 148.91,3125.91"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path302" />
+                  </g>
+                </g>
+                <path
+                   d="m 214.418,3184.49 -56.688,-53.54 74.958,20.78 -18.27,32.76"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path304" />
+                <path
+                   d="m 214.418,3184.49 -56.688,-53.54 74.958,20.78 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path306" />
+                <path
+                   d="m 498.504,3692.82 v 0 c -36.527,0 -66.141,-29.62 -66.141,-66.14 V 3475.5 c 0,-36.52 29.614,-66.14 66.141,-66.14 h 292.902 c 36.528,0 66.141,29.62 66.141,66.14 v 151.18 c 0,36.52 -29.613,66.14 -66.141,66.14"
+                   style="fill:#ffff80;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path308" />
+                <path
+                   d="m 498.504,3692.82 v 0 c -36.527,0 -66.141,-29.62 -66.141,-66.14 V 3475.5 c 0,-36.52 29.614,-66.14 66.141,-66.14 h 292.902 c 36.528,0 66.141,29.62 66.141,66.14 v 151.18 c 0,36.52 -29.613,66.14 -66.141,66.14 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path310" />
+                <path
+                   d="m 498.504,291.355 v 0 c -36.527,0 -66.141,-29.613 -66.141,-66.136 V 74.043 c 0,-36.5274 29.614,-66.14066 66.141,-66.14066 h 292.902 c 36.528,0 66.141,29.61326 66.141,66.14066 v 151.176 c 0,36.523 -29.613,66.136 -66.141,66.136"
+                   style="fill:#ffff80;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path312" />
+                <path
+                   d="m 498.504,291.355 v 0 c -36.527,0 -66.141,-29.613 -66.141,-66.136 V 74.043 c 0,-36.5274 29.614,-66.14066 66.141,-66.14066 h 292.902 c 36.528,0 66.141,29.61326 66.141,66.14066 v 151.176 c 0,36.523 -29.613,66.136 -66.141,66.136 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path314" />
+                <g
+                   id="g316">
+                  <g
+                     id="g318"
+                     clip-path="url(#clipPath322)">
+                    <path
+                       d="M 630.785,1141.72 V 858.266"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path324" />
+                  </g>
+                </g>
+                <path
+                   d="m 611.887,943.934 18.898,-75.586 18.895,75.586 h -37.793"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path326" />
+                <path
+                   d="m 611.887,943.934 18.898,-75.586 18.895,75.586 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path328" />
+                <g
+                   id="g330">
+                  <g
+                     id="g332"
+                     clip-path="url(#clipPath336)">
+                    <path
+                       d="M 1141,2842.45 V 2559"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path338" />
+                  </g>
+                </g>
+                <path
+                   d="m 1122.11,2644.66 18.89,-75.59 18.9,75.59 h -37.79"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path340" />
+                <path
+                   d="m 1122.11,2644.66 18.89,-75.59 18.9,75.59 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path342" />
+                <g
+                   id="g344">
+                  <g
+                     id="g346"
+                     clip-path="url(#clipPath350)">
+                    <path
+                       d="M 148.91,2842.45 V 2559"
+                       style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                       id="path352" />
+                  </g>
+                </g>
+                <path
+                   d="m 130.012,2644.66 18.898,-75.59 18.899,75.59 h -37.797"
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   id="path354" />
+                <path
+                   d="m 130.012,2644.66 18.898,-75.59 18.899,75.59 z"
+                   style="fill:none;stroke:#000000;stroke-width:4.72425;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+                   id="path356" />
+              </g>
+            </g>
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/docs/source/tuto_dag/simple_dax.xml b/docs/source/tuto_dag/simple_dax.xml
new file mode 100644 (file)
index 0000000..2572f7c
--- /dev/null
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<adag xmlns="http://pegasus.isi.edu/schema/DAX" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+      xsi:schemaLocation="http://pegasus.isi.edu/schema/DAX http://pegasus.isi.edu/schema/dax-2.1.xsd"
+      version="2.1">
+  <job id="1" name="c1" runtime="10">
+    <uses file="i1" link="input" register="true" transfer="true" optional="false" type="data" size="2e8"/>
+    <uses file="o1" link="output" register="true" transfer="true" optional="false" type="data" size="5e8"/>
+  </job>
+  <job id="2" name="c2" runtime="50">
+    <uses file="i2" link="input" register="true" transfer="true" optional="false" type="data" size="1e8"/>
+  </job>
+  <job id="3" name="c3" runtime="20">
+    <uses file="o1" link="input" register="true" transfer="true" optional="false" type="data" size="5e8"/>
+    <uses file="o3" link="output" register="true" transfer="true" optional="false" type="data" size="2e8"/>
+  </job>
+  <child ref="3">
+    <parent ref="1"/>
+    <parent ref="2"/>
+  </child>
+</adag>
diff --git a/docs/source/tuto_dag/simple_dot.dot b/docs/source/tuto_dag/simple_dot.dot
new file mode 100644 (file)
index 0000000..603409f
--- /dev/null
@@ -0,0 +1,10 @@
+digraph G {
+  c1 [size="1e9"];
+  c2 [size="5e9"];
+  c3 [size="2e9"];
+  root->c1 [size="2e8"];
+  root->c2 [size="1e8"];
+  c1->c3 [size="5e8"];
+  c2->c3 [size="-1."];
+  c3->end [size="2e8"];
+}
diff --git a/docs/source/tuto_dag/simple_json.json b/docs/source/tuto_dag/simple_json.json
new file mode 100644 (file)
index 0000000..ea77850
--- /dev/null
@@ -0,0 +1,42 @@
+{
+  "name": "simple_json",
+  "schemaVersion": "1.0",
+  "workflow": {
+    "makespan": 0,
+    "executedAt": "2023-03-09T00:00:00-00:00",
+    "tasks": [
+      {
+        "name": "c1",
+        "type": "compute",
+        "parents": [],
+        "runtime": 1e9,
+        "machine": "Tremblay"
+      },
+      {
+        "name": "t1",
+        "type": "transfer",
+        "parents": ["c1"],
+        "bytesWritten": 5e8,
+        "machine": "Jupiter"
+      },
+      {
+        "name": "c2",
+        "type": "compute",
+        "parents": [],
+        "runtime": 5e9,
+        "machine": "Jupiter"
+      },
+      {
+        "name": "c3",
+        "type": "compute",
+        "parents": ["t1","c2"],
+        "runtime": 2e9,
+        "machine": "Jupiter"
+      }
+    ],
+    "machines": [
+      {"nodeName": "Tremblay"},
+      {"nodeName": "Jupiter"}
+    ]
+  }
+}
\ No newline at end of file
diff --git a/docs/source/tuto_dag/small_platform.xml b/docs/source/tuto_dag/small_platform.xml
new file mode 100644 (file)
index 0000000..69bdcae
--- /dev/null
@@ -0,0 +1,194 @@
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "https://simgrid.org/simgrid.dtd">
+<platform version="4.1">
+  <zone id="zone0" routing="Full">
+    <host id="Tremblay" speed="98.095Mf"/>
+    <host id="Jupiter" speed="76.296Mf"/>
+    <host id="Fafard" speed="76.296Mf"/>
+    <host id="Ginette" speed="48.492Mf"/>
+    <host id="Bourassa" speed="48.492Mf"/>
+    <host id="Jacquelin" speed="137.333Mf"/>
+    <host id="Boivin" speed="98.095Mf"/>
+
+    <link id="6" bandwidth="41.279125MBps" latency="59.904us"/>
+    <link id="3" bandwidth="34.285625MBps" latency="514.433us"/>
+    <link id="7" bandwidth="11.618875MBps" latency="189.98us"/>
+    <link id="9" bandwidth="7.20975MBps" latency="1.461517ms"/>
+    <link id="2" bandwidth="118.6825MBps" latency="136.931us"/>
+    <link id="8" bandwidth="8.158MBps" latency="270.544us"/>
+    <link id="1" bandwidth="34.285625MBps" latency="514.433us"/>
+    <link id="4" bandwidth="10.099625MBps" latency="479.78us"/>
+    <link id="0" bandwidth="41.279125MBps" latency="59.904us"/>
+    <link id="5" bandwidth="27.94625MBps" latency="278.066us"/>
+    <link id="145" bandwidth="2.583375MBps" latency="410.463us"/>
+    <link id="10" bandwidth="34.285625MBps" latency="514.433us"/>
+    <link id="11" bandwidth="118.6825MBps" latency="136.931us"/>
+    <link id="16" bandwidth="34.285625MBps" latency="514.433us"/>
+    <link id="17" bandwidth="118.6825MBps" latency="136.931us"/>
+    <link id="44" bandwidth="10.314625MBps" latency="6.932556ms"/>
+    <link id="47" bandwidth="10.314625MBps" latency="6.932556ms"/>
+    <link id="54" bandwidth="15.376875MBps" latency="35.083019ms"/>
+    <link id="56" bandwidth="21.41475MBps" latency="29.5890617ms"/>
+    <link id="59" bandwidth="11.845375MBps" latency="370.788us"/>
+    <link id="78" bandwidth="27.94625MBps" latency="278.066us"/>
+    <link id="79" bandwidth="8.42725MBps" latency="156.056us"/>
+    <link id="80" bandwidth="15.376875MBps" latency="35.083019ms"/>
+    <link id="loopback" bandwidth="498MBps" latency="15us" sharing_policy="FATPIPE"/>
+
+    <route src="Tremblay" dst="Tremblay">
+      <link_ctn id="loopback"/>
+    </route>
+    <route src="Jupiter" dst="Jupiter">
+      <link_ctn id="loopback"/>
+    </route>
+    <route src="Fafard" dst="Fafard">
+      <link_ctn id="loopback"/>
+    </route>
+    <route src="Ginette" dst="Ginette">
+      <link_ctn id="loopback"/>
+    </route>
+    <route src="Bourassa" dst="Bourassa">
+      <link_ctn id="loopback"/>
+    </route>
+    <route src="Tremblay" dst="Jupiter">
+      <link_ctn id="9"/>
+    </route>
+    <route src="Tremblay" dst="Fafard">
+      <link_ctn id="4"/>
+      <link_ctn id="3"/>
+      <link_ctn id="2"/>
+      <link_ctn id="0"/>
+      <link_ctn id="1"/>
+      <link_ctn id="8"/>
+    </route>
+    <route src="Tremblay" dst="Ginette">
+      <link_ctn id="4"/>
+      <link_ctn id="3"/>
+      <link_ctn id="5"/>
+    </route>
+    <route src="Tremblay" dst="Bourassa">
+      <link_ctn id="4"/>
+      <link_ctn id="3"/>
+      <link_ctn id="2"/>
+      <link_ctn id="0"/>
+      <link_ctn id="1"/>
+      <link_ctn id="6"/>
+      <link_ctn id="7"/>
+    </route>
+    <route src="Jupiter" dst="Fafard">
+      <link_ctn id="9"/>
+      <link_ctn id="4"/>
+      <link_ctn id="3"/>
+      <link_ctn id="2"/>
+      <link_ctn id="0"/>
+      <link_ctn id="1"/>
+      <link_ctn id="8"/>
+    </route>
+    <route src="Jupiter" dst="Bourassa">
+      <link_ctn id="9"/>
+      <link_ctn id="4"/>
+      <link_ctn id="3"/>
+      <link_ctn id="2"/>
+      <link_ctn id="0"/>
+      <link_ctn id="1"/>
+      <link_ctn id="6"/>
+      <link_ctn id="7"/>
+    </route>
+    <route src="Fafard" dst="Ginette">
+      <link_ctn id="8"/>
+      <link_ctn id="1"/>
+      <link_ctn id="0"/>
+      <link_ctn id="2"/>
+      <link_ctn id="5"/>
+    </route>
+    <route src="Jupiter" dst="Jacquelin">
+      <link_ctn id="145"/>
+    </route>
+    <route src="Jupiter" dst="Boivin">
+      <link_ctn id="47"/>
+    </route>
+    <route src="Jupiter" dst="Ginette">
+      <link_ctn id="9"/>
+      <link_ctn id="4"/>
+      <link_ctn id="3"/>
+      <link_ctn id="5"/>
+    </route>
+    <route src="Fafard" dst="Bourassa">
+      <link_ctn id="8"/>
+      <link_ctn id="6"/>
+      <link_ctn id="7"/>
+    </route>
+    <route src="Ginette" dst="Bourassa">
+      <link_ctn id="5"/>
+      <link_ctn id="2"/>
+      <link_ctn id="0"/>
+      <link_ctn id="1"/>
+      <link_ctn id="6"/>
+      <link_ctn id="7"/>
+    </route>
+    <route src="Ginette" dst="Jacquelin">
+      <link_ctn id="145"/>
+    </route>
+    <route src="Ginette" dst="Boivin">
+      <link_ctn id="47"/>
+    </route>
+    <route src="Bourassa" dst="Jacquelin">
+      <link_ctn id="145"/>
+    </route>
+    <route src="Bourassa" dst="Boivin">
+      <link_ctn id="47"/>
+    </route>
+    <route src="Jacquelin" dst="Boivin">
+      <link_ctn id="145"/>
+      <link_ctn id="59"/>
+      <link_ctn id="56"/>
+      <link_ctn id="54"/>
+      <link_ctn id="17"/>
+      <link_ctn id="16"/>
+      <link_ctn id="10"/>
+      <link_ctn id="11"/>
+      <link_ctn id="44"/>
+      <link_ctn id="47"/>
+    </route>
+    <route src="Jacquelin" dst="Fafard">
+      <link_ctn id="145"/>
+      <link_ctn id="59"/>
+      <link_ctn id="56"/>
+      <link_ctn id="54"/>
+      <link_ctn id="17"/>
+      <link_ctn id="16"/>
+      <link_ctn id="10"/>
+      <link_ctn id="6"/>
+      <link_ctn id="9"/>
+      <link_ctn id="79"/>
+      <link_ctn id="78"/>
+    </route>
+    <route src="Jacquelin" dst="Tremblay">
+      <link_ctn id="145"/>
+      <link_ctn id="59"/>
+      <link_ctn id="56"/>
+      <link_ctn id="54"/>
+      <link_ctn id="2"/>
+      <link_ctn id="3"/>
+    </route>
+    <route src="Boivin" dst="Tremblay">
+      <link_ctn id="47"/>
+      <link_ctn id="44"/>
+      <link_ctn id="11"/>
+      <link_ctn id="10"/>
+      <link_ctn id="16"/>
+      <link_ctn id="0"/>
+      <link_ctn id="3"/>
+    </route>
+    <route src="Boivin" dst="Fafard">
+      <link_ctn id="47"/>
+      <link_ctn id="44"/>
+      <link_ctn id="11"/>
+      <link_ctn id="6"/>
+      <link_ctn id="9"/>
+      <link_ctn id="79"/>
+      <link_ctn id="78"/>
+      <link_ctn id="80"/>
+    </route>
+  </zone>
+</platform>
index 0e0b72a..bc02713 100644 (file)
@@ -39,6 +39,7 @@ class XBT_PUBLIC Activity : public xbt::Extendable<Activity> {
   friend kernel::activity::ActivityImpl;
   friend std::vector<ActivityPtr> create_DAG_from_dot(const std::string& filename);
   friend std::vector<ActivityPtr> create_DAG_from_DAX(const std::string& filename);
+  friend std::vector<ActivityPtr> create_DAG_from_json(const std::string& filename);
 #endif
 
 public:
index c9fd475..742bb36 100644 (file)
@@ -266,6 +266,7 @@ private:
 
 std::vector<ActivityPtr> create_DAG_from_dot(const std::string& filename);
 std::vector<ActivityPtr> create_DAG_from_DAX(const std::string& filename);
+std::vector<ActivityPtr> create_DAG_from_json(const std::string& filename);
 
 #ifndef DOXYGEN /* Internal use only, no need to expose it */
 template <class T>
index de7b468..e78e716 100644 (file)
@@ -7,6 +7,8 @@
 #include "src/internal_config.h"
 #include <algorithm>
 #include <map>
+#include <fstream>
+#include <simgrid/s4u/Host.hpp>
 #include <simgrid/s4u/Comm.hpp>
 #include <simgrid/s4u/Engine.hpp>
 #include <simgrid/s4u/Exec.hpp>
@@ -19,6 +21,8 @@
 #include "dax_dtd.h"
 #include "dax_dtd.c"
 
+#include <nlohmann/json.hpp>
+
 #if HAVE_GRAPHVIZ
 #include <graphviz/cgraph.h>
 #endif
@@ -79,6 +83,74 @@ static std::map<std::string, ExecPtr, std::less<>> jobs;
 static std::map<std::string, Comm*, std::less<>> files;
 static ExecPtr current_job;
 
+/** @brief loads a JSON file describing a DAG
+ *
+ * See https://github.com/wfcommons/wfformat for more details.
+ */
+std::vector<ActivityPtr> create_DAG_from_json(const std::string& filename)
+{
+  std::ifstream f(filename);
+  auto data = nlohmann::json::parse(f);
+  std::vector<ActivityPtr> dag = {};
+  std::map<std::string, std::vector<ActivityPtr>> successors = {};
+  std::map<ActivityPtr, Host*> comms_destinations = {};
+  ActivityPtr current; 
+  
+  for (auto const& task: data["workflow"]["tasks"]) {
+    if (task["type"] == "compute") {
+      current = Exec::init()->set_name(task["name"])->set_flops_amount(task["runtime"]);
+      if (task.contains("machine"))
+        dynamic_cast<Exec*>(current.get())->set_host(simgrid::s4u::Engine::get_instance()->host_by_name(task["machine"]));
+    }
+    else if (task["type"] == "transfer"){
+      current = Comm::sendto_init()->set_name(task["name"])->set_payload_size(task["bytesWritten"]);
+      if (task.contains("machine"))
+        comms_destinations[current] = simgrid::s4u::Engine::get_instance()->host_by_name(task["machine"]);
+      if (task["parents"].size() == 1) {
+        ActivityPtr parent_activity;
+        for (auto const& activity: dag) {
+          if (activity->get_name() == task["parents"][0]) {
+            parent_activity = activity;
+            break;
+          }
+        }
+        if (dynamic_cast<Exec*>(parent_activity.get()) != nullptr)
+          dynamic_cast<Comm*>(current.get())->set_source(dynamic_cast<Exec*>(parent_activity.get())->get_host());
+        else if (dynamic_cast<Comm*>(parent_activity.get()) != nullptr)
+          dynamic_cast<Comm*>(current.get())->set_source(dynamic_cast<Comm*>(parent_activity.get())->get_destination());
+      }
+    }
+    else
+      XBT_DEBUG("Task type \"%s\" not supported.", task["type"]);
+
+    dag.push_back(current);
+    for (auto const& parent: task["parents"]) {
+      auto it = successors.find(parent);
+      if (it == successors.end())
+        successors[parent] = {};
+      successors[parent].push_back(current);
+    }
+  }
+  // Assign successors
+  for (auto const& [parent, successors_list] : successors)
+    for (auto const& activity: dag)
+      if (activity->get_name() == parent) {
+        for (auto const& successor: successors_list)
+          activity->add_successor(successor);
+        break;
+      }
+  // Assign destinations of Comms (if done before successors are assigned there is a bug)
+  for (auto const& [comm, destination]: comms_destinations)
+    dynamic_cast<Comm*>(comm.get())->set_destination(destination);
+
+  // Start only Activities with dependencies solved
+  for (auto const& activity: dag) {
+    if (dynamic_cast<Exec*>(activity.get()) != nullptr and activity->dependencies_solved())
+      activity->start();
+  }
+  return dag;
+}
+
 /** @brief loads a DAX file describing a DAG
  *
  * See https://confluence.pegasus.isi.edu/display/pegasus/WorkflowGenerator for more details.