2. Logique de la description en XML de la simulation

Nous allons montrer comment se traduit cette simulation en un fichier XML que l'outil XMLlab va utiliser pour générer une simulation exécutée par Scilab. Le fichier XML sera montré sous sa forme textuelle, et parfois également tel qu'il apparaît lors de son édition avec le logiciel XMLMind XML Editor (xxe, cf. http://www.xmlmind.com/xmleditor/). Un tel logiciel permet une bonne visualisation de la structure d'un fichier XML, ainsi que sa modification facilitée par le fait qu'il présente en permanence l'ensemble des balises qui peuvent être ajoutées à chaque endroit, ainsi que l'ensemble des attributs d'une balise donnée, avec le cas échant leurs différentes valeurs admises.

2.1. Description générale de la simulation

Les deux premières lignes du fichier permettent d'associer la DTD de XMLlab au fichier XML et sont identiques pour toute simulation. Elles ne devront être modifiées que lors d'une mise à jour de XMLlab impliquant une évolution de la DTD (ici en version 1.4).

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE simulation PUBLIC "-//UTC//DTD XMLlab V1.4//FR" "http://www.xmllab.org/dtd/1.4/simulation.dtd">

Les lignes suivantes permettent de spécifier le titre de la simulation, son auteur, ainsi que des mots-clefs qui lui sont relatifs :

<simulation>
  <header>
    <title>Pendule</title>
    <author>Please set author's name</author>
    <keywords>simulation,scilab,xml</keywords>
  </header>
  ...
</simulation> 

2.2. Paramètres de la simulation

Les paramètres de la simulation peuvent être groupés en plusieurs sections, chaque section donnant lieu à une entrée différente du menu Paramètres de la simulation, comme le montre la figure suivante :

Figure 3.2. Entrées du menu Paramètres de la simulation du pendule

Entrées du menu Paramètres de la simulation du pendule

Le choix d'une entrée provoque alors l'affichage dans la fenêtre des paramètres correspondant. Les lignes suivantes introduisent et nomment les sections de paramètres :

  <parameters>
    <section>
      <title>Paramètres du pendule</title>
      ...
    </section>
    <section>
      <title>Paramètres de résolution</title>
      ...
    </section>
  </parameters>

Nous allons maintenant décrire en détail la déclaration des paramètres de chaque section, dont les lignes correspondantes figurent après la balise <title> en question :

  • Paramètres du pendule : les lignes suivantes décrivent chacun de ces paramètres dont la saisie est effectuée dans la fenêtre illustrée par la Figure 3.2, « Entrées du menu Paramètres de la simulation du pendule » :

    • Longueur L du pendule :

            <scalar label="L"
                    unit="m"
                    widget="entry">
              <name>Longueur du pendule</name>
              <value>1</value>
            </scalar>

      Le paramètre est saisi via un champ de texte et sa valeur initiale est 1. L'attribut label sert à fait référence à ce paramètre dans la suite (L).

    • Angle initial θ 0 du pendule :

            <scalar increment="0.001"
                    label="theta_0"
                    max="3.141"
                    min="0.01"
                    unit="rad"
                    widget="slider">
              <name>Angle initial</name>
              <value>0.1</value>
            </scalar>

      La valeur du paramètre est réglable via une glissière allant de 0.01 à 3.141 et réglable à 0.001 près. Il y est fait référence via le label theta_0.

    • Accélération de la pesanteur g :

            <scalar label="g0"
                    unit="ms^-2"
                    widget="entry">
              <name>Accélération de la pesanteur</name>
              <value>9.81</value>
            </scalar>

      Le paramètre est saisi via un champ de texte et sa valeur initiale est 9.81. Il y est fait référence via le label g0.

  • Paramètres de résolution : les lignes suivantes décrivent chacun de ces paramètres dont la saisie est effectuée dans la fenêtre illustrée par la figure suivante :

    Figure 3.3. Saisie des paramètres de résolution

    Saisie des paramètres de résolution
    • Borne supérieure t f de l'intervalle de discrétisation [ 0, t f ] utilisé pour la résolution de l'équation différentielle donnant le mouvement réel du pendule (cf. Équation 3.1, « Equation réelle du mouvement du pendule ») :

            <scalar label="tf"
                    unit="s"
                    widget="entry">
              <name>Temps final</name>
              <value>2</value>
            </scalar>

      Le paramètre est saisi via un champ de texte et sa valeur initiale est 2. Il y est fait référence via le label tf.

2.3. Modèles mathématiques de la simulation

Cette section - qui suit la balise </parameters> - permet de définir les équations à résoudre, les courbes à calculer, ainsi que les domaines de valeurs (1d ou 2d) que certaines variables doivent prendre. Ces différentes définitions sont encadrées par les balises suivantes :

  <compute>
  ...
  </compute>

Pour ce qui est de notre problème du pendule, les éléments suivants y sont définis :

  • Définition de la variable d'intégration et de son intervalle de discrétisation [ 0, t f ] utilisé pour la résolution de l'équation différentielle donnant le mouvement réel du pendule (cf. Équation 3.1, « Equation réelle du mouvement du pendule ») :

        <defdomain1d label="t"
                     unit="s">
          <name>Temps</name>
          <interval discretization="linear"
                    steps="200">
            <initialvalue>0</initialvalue>
            <finalvalue>tf</finalvalue>
          </interval>
        </defdomain1d>

    Il est indiqué que l'intervalle [ 0, t f ] est découpé linéairement en 200 pas. Il est fait référence à la variable d'intégration et à son domaine de variation via le label t.

  • Définition de l’élément ode (ordinary differential equation) regroupant la référence à la variable d'intégration et à son domaine de variation, la définition des états θ et θ ˙ , ainsi que la liste des sorties, la seule sortie étant ici la fonction donnant la solution linéarisée φ ( t ) de la valeur de θ :

        <ode label="pendule">
          <refdomain1d ref="t"/>
          <states>
          ...
          </states>
          <outputs>
          ...
          </outputs>
        </ode>

    Vue d'ensemble de l’élément ode et de l'élément refdomain1d définissant la référence à la variable d'intégration t.

    • Elément states définissant les états θ et θ ˙ :

            <states>
              <state label="theta"
                     unit="rad">
                <name>Solution Réelle</name>
                <derivative>theta_point</derivative>
                <initialcondition>theta_0</initialcondition>
              </state>
              <state label="theta_point"
                     unit="rad">
                <name>dérivée de l'angle</name>
                <derivative>-g0/L*sin(theta)</derivative>
                <initialcondition>0</initialcondition>
              </state>
            </states>

      Les états theta et theta_point sont définis, avec pour chacun d'eux la dérivée (fonction des autres états) et la valeur initiale prise pour la valeur initiale de la variable d'intégration t.

    • Elément outputs définissant comme seule sortie la fonction donnant la solution linéarisée φ ( t ) :

            <outputs>
              <output label="thetalin">
                <name>Solution linearisee</name>
                <value>theta_0*cos(sqrt(g0/L)*t)</value>
              </output>
            </outputs>

      La fonction de la solution linéarisée est identifiée par le label thetalin.

2.4. Affichage des résultats de la simulation

Cette section - qui suit la balise </compute> - permet de définir les différentes fenêtres graphiques, un ensemble de système d'axes pour chacune d'elle (les fenêtres pouvant alors se diviser horizontalement ou verticalement pour les contenir), ainsi que les courbes qui doivent être respectivement affichées dans chaque système d'axe. Ces différentes définitions sont encadrées par les balises suivantes :

  <display>
  ...
  </display>

Dans notre cas, une seule fenêtre comprend une système d'axe cartésien contenant les courbes des solutions réelles et linéarisées :

  • Définition de la fenêtre :

        <window>
          <title>Comparaison des deux solutions</title>
          <axis2d xmax="tf" xmin="0"
                  ymax="theta_0" ymin="-theta_0">
            <drawcurve2d color="auto"
                         ref="theta" thickness="2" />
            <drawcurve2d color="red"
                         ref="thetalin" thickness="2" />
          </axis2d>
        </window>

    Le titre de la fenêtre est indiqué, laquelle comprend un système d'axe cartésien 2D, x variant de 0 à t f et y variant de θ 0 à θ 0 . Le système d'axe ainsi défini contient la courbe de la solution réelle (état theta) et celle de la solution linéarisée (sortie thetalin).

On obtient ainsi les courbes suivantes :

Figure 3.4. Visualisation du résultat de la simulation d'un pendule

Visualisation du résultat de la simulation d'un pendule