|
|
[[_TOC_]]
|
|
|
# Introduction
|
|
|
|
|
|
J2K est implémenté dans la plateforme de modélisation et de simulation JAMS. Un modèle JAMS est défini sous la forme d'un état initial, d'un ensemble de données d'entrées, de valeurs de paramètres et enfin d'un agencement de modules qui décrivent les opérations à réaliser au cours d'une simulation. Avant de pouvoir utiliser notre protocole de communication pour communiquer avec un modèle J2K, il est nécessaire d'éditer ce modèle pour y rajouter les modules spécifiques à la communication. Le chapitre [Modules de communication J2K](j2k_modules) décrit ces modules et explique également comment les intégrer dans un modèle existant. Dans la suite de ce chapitre nous considérons donc un modèle J2K "communicant".
|
|
|
J2K est implémenté dans la plateforme de modélisation et de simulation JAMS. Un modèle JAMS est défini sous la forme d'un état initial, d'un ensemble de données d'entrées, de valeurs de paramètres et enfin d'un agencement de modules qui décrivent les opérations à réaliser au cours d'une simulation. Avant de pouvoir utiliser notre protocole de communication pour communiquer avec un modèle J2K, il est nécessaire d'éditer ce modèle pour y rajouter des modules spécifiques à la communication que nous avons développé. Le chapitre [Modules de communication J2K](j2k_modules) décrit ces modules et explique également comment les intégrer dans un modèle existant. Dans la suite de ce chapitre nous considérons donc un modèle J2K "communicant".
|
|
|
|
|
|
# Protocole de communication pour manipuler un modèle J2K communicant
|
|
|
|
|
|
La communication est basée sur la présence module de communication `CouplingCommunication` placé en début de boucle temporelle (TimeLoop) de tout modèle communicant. Le principe est le suivant: On lance en ligne de commande la simulaiton d'un modèle communicant et ce module de communication interrompt l'exécution à chaque début de boucle temporelle et attend qu'on lui envoie des commandes, permettant un réel pilotage de la simulation du modèle depuis l'extérieur.
|
|
|
La communication est basée sur la présence du module de communication `CouplingCommunication` placé en début de boucle temporelle (TimeLoop) de tout modèle communicant. Le principe est le suivant : On lance en ligne de commande la simulation d'un modèle communicant et ce module de communication interrompt l'exécution à chaque début de boucle temporelle et attend qu'on lui envoie des commandes, permettant un réel pilotage de la simulation du modèle depuis l'extérieur.
|
|
|
|
|
|
La communication se fait par requêtes HTTP POST. Chaque requête contient une commande, comme un ordre donné au module de communication. On peut effectuer ces requêtes par le moyen de son choix. Le moyen le plus simple est d'utiliser l'outil CURL. On peut aussi effectuer ces requêtes avec tous les langages de programmation modernes (Python, C, C++, Java, R, Ruby etc...).
|
|
|
La communication se fait par requêtes HTTP POST. Chaque requête contient une commande, comme un ordre donné au module de communication. On peut effectuer ces requêtes par le moyen de son choix. Le plus simple est d'utiliser l'outil CURL. On peut aussi effectuer ces requêtes avec tous les langages de programmation modernes (Python, C, C++, Java, R, Ruby etc...) qui sont capables de communiquer par le réseau.
|
|
|
|
|
|
Les exemples suivants partent du principe que les ordres sont données à partir de la machine qui fait aussi tourner le modèle. C'est pourquoi on donne `localhost` comme adresse de destination. On peut tout aussi bien communiquer avec une autre machine si on connait son adresse IP ou son nom de domaine.
|
|
|
Les exemples suivants partent du principe que les ordres sont données à partir de la machine qui fait aussi tourner le modèle. C'est pourquoi on donne `localhost` (adresse pour contacter sa propre machine) comme adresse de destination. On peut tout aussi bien communiquer avec une autre machine si on connait son adresse IP ou son nom de domaine. Cela signifie qu'on peut partager, si on le souhaite, la charge de calcul entre plusieurs machines qui hébergent chacune une partie du modèle couplé.
|
|
|
|
|
|
## Avec CURL
|
|
|
|
... | ... | @@ -72,4 +72,6 @@ L'implémentation des modules est détaillée dans [la page dédiée](j2k_module |
|
|
|
|
|
La commande `set` permet aussi de s'adresser aux modules génériques de modification d'un attribut. Par exemple, si on place un module générique (CouplingReachVariableChanger ou CouplingHruVariableChanger) dont l'attribut `moduleName` vaut "modifHruAttributPrecip" et qu'on l'a lié à l'attribut "precip" dans JAMS, on peut donner des valeurs de cette manière :
|
|
|
|
|
|
`{"command": "set", "key": "modifHruAttributPrecip", "value": {"1": 55, "2": 56} }` |
|
|
\ No newline at end of file |
|
|
`{"command": "set", "key": "modifHruAttributPrecip", "value": {"1": 55, "2": 56} }`
|
|
|
|
|
|
On peut donc, après adaptation du modèle, modifier depuis l'extérieur n'importe quel attribut à n'importe quel moment du déroulement du modèle J2K. |
|
|
\ No newline at end of file |