Arcane  v3.14.11.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
Utilisation

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>
using namespace Arcane;
table->init("Example_Name", "example"); // Ne doit être fait que par un seul module.
// Utilisation du service...
table->writeFile(); // Ne doit être fait que par un seul module (sauf si vous savez ce que vous faites).
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 :

<!-- <options> -->
<service-instance name="simple-table-output" type="Arcane::ISimpleTableOutput">
<description>Service implémentant ISimpleTableOutput</description>
</service-instance>
<!-- </options> -->

Dans le .arc, vous pouvez configurer les options du service. Par exemple :

<!-- <mon-module> -->
<simple-table-output name="SimpleCsvOutput">
<!-- Le nom du répertoire à créer/utiliser. -->
<tableDir>example_dir</tableDir>
<!-- Le nom du fichier à créer/écraser. -->
<tableName>Results_Example</tableName>
<!-- Au final, on aura un fichier ayant comme chemin :
./output/csv/example_dir/Results_Example.csv -->
</simple-table-output>
<!-- </mon-module> -->

Et dans votre module :

#include <arcane/ISimpleTableOutput.h>
using namespace Arcane;
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).