Notre module SayHello
est donc composé des trois fichiers ci-dessous :
headers
portent l'extension .h
(et non .hh
/.hpp
/.hxx
/&c) et sont composés comme cela : {nom_module}
Module
.h
(exemple : SayHelloModule.h
),fichiers sources
portent l'extension .cc
(et non .c
/.cxx
/.c++
/&c) et sont composés comme cela : {nom_module}
Module
.cc
(exemple : SayHelloModule.cc
),fichiers de configuration de jeu de données
(fichiers AXL
) portent l'extension .axl
et sont composés comme cela : {nom_module}
.axl
(exemple : SayHello.axl
).D'abord, voyons le fichier .axl
:
C'est un fichier au format xml
qui permet de décrire le fonctionnement de notre module SayHello
.
On peut voir que ce fichier contient le nom du module (ligne 2), une description sommaire (ligne 4), des variables (lignes 6-13), des points d'entrées (lignes 15-19) et des options (lignes 21-25).
Les variables :
LoopSum
et de nom "code" loop_sum
, de type Integer
, attribuée à l'item None
et de dimension 0
.Les points d'entrées :
StartInit
, représenté par la méthode startInit
et s'exécutant à l'initialisation (start-init
),Compute
, représenté par la méthode compute
et s'exécutant dans la boucle en temps (compute-loop
).EndModule
, représenté par la méthode endModule
et s'exécutant lorsque la boucle en temps est terminée (exit
).Les options :
nSteps
, de type Integer
et avec une valeur par défaut égale à 10
.Le compilateur, à partir de ce fichier, créera automatiquement un fichier SayHello_axl.h
qu'il faudra importer dans notre header et qui nous permettra d'utiliser :
m_loop_sum
(m_
+ le field-name
),startInit
,compute
,nStep
.Voici à quoi ressemble notre header :
Entrons dans les détails.
Dans le chapitre Les règles de codage, on nous demande de mettre cette ligne nous informant de la configuration du fichier.
Cela permet d'éviter de définir plusieurs fois la classe (si on l'inclut dans plusieurs .cc
par exemple).
Ce premier #include
permet d'inclure les fonctions pour gérer la boucle en temps (par exemple stopComputeLoop()
). Le second #include
est le fichier généré avec le .axl
.
Cela permet d'utiliser les fonctions d'Arcane sans mettre Arcane::
devant.
On définit la classe SayHelloModule
qui sera utilisée par Arcane et qui hérite de ArcaneSayHelloObject
. ArcaneSayHelloObject
est définie dans SayHello_axl.h
et contient les méthodes que l'on pourra override et les variables/options que l'on pourra utiliser.
Constructeur de notre classe, qui appelle le constructeur de ArcaneSayHelloObject
. mbi
est un objet qui contiendra les infos de lancement du module (pour avoir les valeurs des options par exemple).
Enfin, les quatre méthodes du .axl
que l'on override. On peut aussi donner une version à notre module en "overridant" versionInfo()
.
Ce fichier contient simplement les implémentations des méthodes définies dans le header.
Plusieurs choses sont néanmoins remarquable ici :
info()
permet d'écrire dans la sortie standard des informations.
On attribue la valeur 0 à la variable m_loop_sum
.
On calcule la somme des itérations.
Arcane::VariableScalarInt32
. Il faut donc utiliser l'opérateur ()
pour récupérer sa valeur. m_loop_sum
à chaque itération pour l'exemple. Dans les faits, utiliser l'affectation pour une variable de type Arcane::VariableRefScalarT
peut s'avérer coûteuse. m_global_iteration()
est une variable de la classe CommonVariables
, dont hérite la classe BasicModule
(dont hérite ArcaneSayHelloObject
du fichier SayHello_axl.h
). Cette variable contient l'itération actuellement en cours.
()
pour récupérer sa valeur.options()->getNStep()
permet de récupérer la valeur de l'option nStep
. Pour définir cette valeur, il faut utiliser le jeu de données (fichier .arc
) (voir prochaine section Jeu de données).
Enfin, subDomain()->timeLoopMng()->stopComputeLoop(true)
permet de stopper la boucle en temps.
Ceci est une macro permettant d'enregistrer le module dans Arcane. Cette macro est définie dans le fichier SayHello_axl.h
.
HelloWorld
. Les modules peuvent être placés et remplacés facilement dans d'autres applications.