Arcane  v3.14.11.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
Exemple n°3

Avec l'exemple 3 et les suivants, on n'utilise plus de singleton. Donc on va voir un exemple simple d'utilisation du service normal.

À noter que cet exemple fait la même chose que les exemples précédents.

Fichier .axl – Partie <options>

Pour commencer, voyons les options du fichier .axl :

SimpleTableOutputExample3.axl

<options>
<service-instance name="st-output" type="Arcane::ISimpleTableOutput">
<description>ST Output</description>
</service-instance>
</options>

Dans le .axl, on déclare juste l'utilisation d'un service implémentant l'interface Arcane::ISimpleTableOutput.

Fichier .arc – Partie option du module

Voici le .arc correspondant :

SimpleTableOutputExample3.arc

<simple-table-output-example3>
<st-output name="SimpleCsvOutput">
<tableDir>example3</tableDir>
<tableName>Results_Example3</tableName>
</st-output>
</simple-table-output-example3>

Ici, par rapport à l'exemple précédent, on remplit les options dans la partie service. On demande l'utilisation du service SimpleCsvOutput avec les deux options qu'il demande.

Point d'entrée initial

Voyons le point d'entrée start-init :

SimpleTableOutputExample3Module.cc

void SimpleTableOutputExample3Module::
initModule()
{
srand(1234);
// On initialise le tableau grâce à un des initialisateurs.
// Le nom du tableau sera le nom choisi dans le .arc.
options()->stOutput()->init();
// On print le tableau dans son état actuel (vide, avec un titre).
options()->stOutput()->print();
}

Par rapport à l'exemple précédent, on n'a pas besoin de récupérer un pointeur vers un singleton ; ici c'est un service utilisé normalement.

Toujours par rapport à l'exemple précédent, c'est le service qui gère les valeurs par défaut.

Note
Pour l'instant, il est impossible de demander la non-écriture des fichiers de sortie directement dans le .arc partie service. Si vous ne mettez pas de valeurs dans les options tableDir et tableName, il y aura quand même écriture. C'est à gérer par le module pour le moment.

Point d'entrée loop

Voyons le point d'entrée compute-loop :

SimpleTableOutputExample3Module.cc

void SimpleTableOutputExample3Module::
loopModule()
{
// On crée une colonne nommé "Iteration X" (avec X = itération actuelle).
options()->stOutput()->addColumn("Iteration " + String::fromNumber(m_global_iteration()));
// On génère deux valeurs (c'est pour l'exemple, sinon oui, ça sert à rien).
Integer nb_fissions = rand()%99;
Integer nb_collisions = rand()%99;
// On ajoute deux valeurs à deux lignes (par défaut,
// si les lignes n'existe pas encore, elles sont créées).
options()->stOutput()->addElementInRow("Nb de Fissions", nb_fissions);
options()->stOutput()->addElementInRow("Nb de Collisions", nb_collisions);
// On print le tableau dans son état actuel.
options()->stOutput()->print();
// On effectue trois itérations.
if (m_global_iteration() == 3)
subDomain()->timeLoopMng()->stopComputeLoop(true);
}

Mis à part le remplacement du pointeur de singleton par l'utilisation des options du module, il n'y a pas de différences avec les deux précédents exemples.

Point d'entrée exit

Enfin, voyons le point d'entrée exit :

SimpleTableOutputExample3Module.cc

void SimpleTableOutputExample3Module::
endModule()
{
// On print le tableau dans son état actuel.
options()->stOutput()->print();
// On enregistre le résultat dans le dossier choisi
// par l'utilisateur dans le .arc.
options()->stOutput()->writeFile();
}

Ici, on se contente d'écrire le fichier de sortie (et de print le tableau). Si l'on souhaite agir sur l'écriture ou non du fichier via le .arc, c'est ici qu'on peut le faire en conditionnant l'appel à writeFile() avec un if().