Singleton
Pour une utilisation en tant que singleton (même objet pour tous les modules) :
Placer ces lignes dans le .config de votre projet :
<singleton-services>
<service name="SimpleCsvOutput" need="required" />
</singleton-services>
Et dans votre/vos module(s) :
#include <arcane/ISimpleTableOutput.h>
table->
init(
"Example_Name",
"example");
table->writeFile();
Interface représentant une sortie de tableau simple.
virtual bool init()=0
Méthode permettant d'initialiser le tableau.
Classe utilitaire pour instantier un service d'une interface donnée.
InterfaceType * getSingleton(eServiceBuilderProperties properties=SB_None)
Instance singleton du service implémentant l'interface InterfaceType.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Service
Pour une utilisation en tant que service (objet different pour chaque module) :
Placer ces lignes dans le .axl de votre module :
<service-instance name="simple-table-output" type="Arcane::ISimpleTableOutput">
<description>Service implémentant ISimpleTableOutput</description>
</service-instance>
Dans le .arc, vous pouvez configurer les options du service. Par exemple :
<simple-table-output name="SimpleCsvOutput">
<tableDir>example_dir</tableDir>
<tableName>Results_Example</tableName>
</simple-table-output>
Et dans votre module :
#include <arcane/ISimpleTableOutput.h>
options()->simpleCsvOutput()->init();
options()->simpleCsvOutput()->writeFile();
Vous pouvez aussi utiliser le service des deux façons en même temps, selon vos besoins.
(Pour un exemple plus concret, voir les pages suivantes)
Symboles de nom pour l'exécution parallèle (implémentation CSV)
Dans le nom du repértoire ou dans le nom du tableau, que ce soit en mode singleton ou en mode service, il est possible d'ajouter des symboles qui seront remplacés lors de l'exécution.
Les symboles disponibles sont :
@proc_id@
: Sera remplacé par le rank du processus.
@num_procs@
: Sera remplacé par le nombre total de processus.
Par exemple, si l'on a :
<tableDir>N_@num_procs@</tableDir>
<tableName>Results_P@proc_id@</tableName>
ou lors de l'initialisation du service :
...
table->init("Results_P@proc_id@", "N_@num_procs@");
...
Et que l'on lance le programme avec 2 processus (ID = 0 et 1), on va obtenir deux csv ayant comme chemin :
./output/csv/N_2/Results_P0.csv
./output/csv/N_2/Results_P1.csv
(en séquentiel, on aura ./output/csv/N_1/Results_P0.csv
)
Cela permet, entre autres, de :
- créer un tableau par processus et de les nommer facilement,
- créer des fichiers .arc "générique" où le nombre de processus n'importe pas,
- avoir un nom différent pour chaque tableau, dans le cas où un cat est effectué (rappel : tableName donne le nom du fichier csv mais est aussi placé sur la première case du tableau).