Il y a deux possibilités de personnalisation des options du jeu de données via les arguments de la ligne de commande :
Il est possible de personnaliser tous les types d'options Arcane listées ici : Les types d'options
Ce type de personnalisation nécessite de modifier le jeu de données pour y inclure des symboles. Ce jeu de données peut donc devenir inutilisable sans les bons arguments de la ligne de commande.
Un symbole est une chaîne de caractères entourée d'arrobases.
Exemple : @UneValeur@
Si on met ce symbole dans un jeu de données, on pourrait avoir, par exemple :
Que l'option deltat-cp
soit une option simple, une option énumérée ou une option étendue, le fonctionnement est le même, y compris si ces options sont dans des options complexes ou des options services.
Pour les options services, le remplacement des symboles fonctionne aussi dans les attributs name
et mesh-name
. Exemple :
Trois symboles peuvent être remplacés : @NamePostProcessor@
, @MeshPostProcessor@
et @NbTimeInOneFile@
.
@NamePostProcessor@
par Ensight7PostProcessor
, parfait. En revanche, si on le remplace par VtkHdfV2PostProcessor
, ça va être problématique car ces deux services n'utilisent pas les mêmes options ! Les options fileset-size
et binary-file
n'existent pas dans VtkHdfV2PostProcessor
.Le remplacement de symboles peut aussi être utilisé dans les options simples ayant un type tableau.
Prenons l'option suivante :
Dans le jeu de données, ajoutons un symbole :
On peut remplacer le symbole @DeuxiemeElement@
par 3.1
, ou par plusieurs valeurs : 3.1 3.11
.
ARCANE_REPLACE_SYMBOLS_IN_DATASET
. Lorsque le jeu de données contient les symboles voulus, on peut attribuer leurs valeurs lors de l'exécution.
Cette attribution reprend la syntaxe des arguments Arcane (-A,
).
Admettons que l'on ait, dans le jeu de données, les symboles @NamePostProcessor@
, @MeshPostProcessor@
et @NbTimeInOneFile@
.
Pour attribuer une valeur à ces symboles, on peut lancer l'application comme ceci :
-A,
-A,
Il est aussi possible d'entourer les valeurs par des guillemets ""
. C'est particulièrement utile pour les types tableaux :
Lorsqu'un symbole est présent dans le jeu de données mais absent de la ligne de commande, le symbole est simplement remplacé par une chaîne de caractères vide.
<deltat-cp></deltat-cp>
et une option absente du jeu de données. Dans le premier cas, la valeur de l'option est vide (String("")
) mais présente donc n'est pas remplacée par la valeur par défaut. Dans le second cas, la valeur de l'option est null (String()
) donc est remplacée par la valeur par défaut.Par rapport au remplacement de symboles, cette méthode permet de conserver un jeu de données valide sans arguments obligatoires (mais est un peu plus verbeuse).
Ces deux méthodes agissent aussi aux mêmes endroits en interne, donc les possibilités sont les mêmes : il est possible de modifier la valeur d'une option simple, d'une option énumérée ou d'une option étendue, même si ces options sont dans des options complexes ou des options services.
Pour les options services, comme précédemment, on peut agir sur les attributs name
et mesh-name
.
Reprenons le premier exemple :
Si l'on souhaite modifier la valeur de l'option deltat-cp
, il suffit de lancer l'application comme ceci :
Il est nécessaire d'avoir l'adresse (XPath) de l'option. Pour la retrouver, il faut dérouler les éléments XML. Ici, l'option deltat-cp
est à l'adresse : //case/simple-hydro/deltat-cp
. Ensuite, on retire le case/
au début (ou cas/
pour les jeux de données en français). Enfin, on peut construire l'argument à ajouter :
-A,
//simple-hydro/deltat-cp
=3.1
Comme pour le remplacement de symboles, on peut ajouter des guillemets :
-A,//simple-hydro/simple-real-array="3.1 3.11 3.12"
Dans le cas des attributs, ils sont désignés par un @
(pour l'attribut name
, on doit mettre @name
dans l'adresse). Si l'on souhaite modifier l'attribut name
d'un service, on peut le faire comme ceci :
-A,//simple-hydro/post-processor/@name=VtkHdfV2PostProcessor
Mais un problème apparait assez vite : comment faire si on a des options multiples ?
En XML, dans ce genre de cas, on utilise des indices. Ainsi, pour les trois valeurs de deltat-cp
, on les adresse comme ceci :
//simple-hydro/deltat-cp[1]
//simple-hydro/deltat-cp[2]
//simple-hydro/deltat-cp[3]
On peut aussi les écrire comme ceci :
//simple-hydro[1]/deltat-cp[1]
//simple-hydro[1]/deltat-cp[2]
//simple-hydro[1]/deltat-cp[3]
Ces syntaxes sont gérées par Arcane. Ainsi, pour modifier la seconde option, on peut écrire :
Ou bien :
Une chose que l'on peut faire aussi est d'ajouter des options.
Si l'on souhaite ajouter une quatrième option deltat-cp
, il est possible d'ajouter l'argument :
-A,//simple-hydro/deltat-cp[4]=9.0
Il est aussi possible d'ajouter des options non présentes dans le jeu de données (mais présentes dans l'AXL) :
On pourrait ajouter les options via les arguments de la ligne de commande :
Ça fonctionne aussi pour les options services. Dans ce cas, il est nécessaire d'ajouter au moins l'attribut name
:
Puis, on peut, par exemple, modifier les options simples de ce service ou l'attribut mesh-name
:
Si, au lieu de lancer notre application avec ces arguments :
on lançait ceci :
Dans ce cas, l'option //simple-hydro/deltat-cp[1]
, qui n'est ni présente dans le jeu de données, ni présente dans les arguments de la ligne de commande, sera ajouté avec la valeur par défaut.
L'indice ANY permet de traiter plusieurs options d'indices différents en une fois. Il est représenté par des crochets vides : []
.
Si l'on reprend l'exemple au-dessus et que l'on souhaite modifier toutes les valeurs de deltat-cp
, on peut utiliser l'adresse :
//simple-hydro/deltat-cp[]
Exemple de lancement :
Et dans ce cas, les trois options simple-hydro/deltat-cp
auraient la valeur 2.0
.
La balise ANY permet de changer la valeur d'une option présente à plusieurs endroits. Elle est représentée par une partie d'adresse vide (deux /
sans rien entre) (donc //module1/option1/option11
, si on veut remplacer option1
par ANY, on fait //module1//option11
).
module1
par ANY : ////option11
En reprenant l'exemple au-dessus, si l'on souhaite modifier toutes les options deltat-cp[2]
, quelque soit le module dans lequel cette option apparait, on peut utiliser l'adresse :
///deltat-cp[2]
Exemple de lancement :
//module1/option11/
est invalide).Admettons que l'on ait le jeu de données :
On pourrait commencer par vouloir modifier l'option deltat-cp
du second checkpoint du module pas-simple-hydro
. Pour cela, on peut utiliser l'argument :
-A,//pas-simple-hydro/checkpoint[2]/delta-cp=4.0
.
Puis, on pourrait modifier le premier deltat-cp
des deux modules :
-A,///checkpoint[1]/delta-cp=2.0
.
Ensuite, on pourrait ne pas vouloir d'écriture entre les checkpoints :
-A,///checkpoint[]/print-details-before-cp=false
.
Enfin, les services du module simple-hydro
doivent agir sur le Mesh0
et les services pas-simple-hydro
sur le Mesh1
:
-A,//simple-hydro//@mesh-name=Mesh0
-A,//pas-simple-hydro//@mesh-name=Mesh1
Finalement, on se retrouve avec la commande :
Pour cette partie, quelques containtes d'utilisations ont été mises en places :
-A,//
sont réservés à cet usage./
. Exemple invalide :