Skip to content

Commit 9a8170e

Browse files
committed
[arcane:doc] Complete new page on new command line parameter features
1 parent 26921f8 commit 9a8170e

File tree

1 file changed

+170
-22
lines changed

1 file changed

+170
-22
lines changed

arcane/doc/doc_user/chap_execution/5_commandlineargs.md

+170-22
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ Un symbole est une chaîne de caractères entourée d'arrobases.
2626

2727
Exemple : `@UneValeur@`
2828

29-
Si on met ce symbole dans un jeu de données, on aurait, par exemple :
29+
Si on met ce symbole dans un jeu de données, on pourrait avoir, par exemple :
3030

3131
```xml
3232
<!--Fichier ARC-->
@@ -165,8 +165,8 @@ de commande, le symbole est simplement remplacé par une chaîne de caractères
165165
\warning Dans %Arcane, une différence est faite entre une option
166166
vide `<deltat-cp></deltat-cp>` et une option absente du jeu de données. Dans
167167
le premier cas, la valeur de l'option est **vide** (`String("")`)
168-
mais présente donc n'est pas remplacé par la valeur par défaut.
169-
Dans le second cas, la valeur de l'option est **null** (`String()`) donc est remplacé
168+
mais présente donc n'est pas remplacée par la valeur par défaut.
169+
Dans le second cas, la valeur de l'option est **null** (`String()`) donc est remplacée
170170
par la valeur par défaut.
171171

172172

@@ -210,7 +210,7 @@ lancer l'application comme ceci :
210210
dataset.arc
211211
```
212212

213-
Il est nécessaire d'avoir l'adresse de l'option. Pour la retrouver, il faut
213+
Il est nécessaire d'avoir l'adresse (XPath) de l'option. Pour la retrouver, il faut
214214
dérouler les éléments XML. Ici, l'option `deltat-cp` est à l'adresse :
215215
`//case/simple-hydro/deltat-cp`.
216216
Ensuite, on retire le `case/` au début (ou `cas/` pour les jeux de données en français).
@@ -222,6 +222,12 @@ Comme pour le remplacement de symboles, on peut ajouter des guillemets :
222222

223223
`-A,//simple-hydro/simple-real-array="3.1 3.11 3.12"`
224224

225+
Dans le cas des attributs, ils sont désignés par un `@` (pour l'attribut `name`, on
226+
doit mettre `@name` dans l'adresse).
227+
Si l'on souhaite modifier l'attribut `name` d'un service, on peut le faire comme ceci :
228+
229+
`-A,//simple-hydro/post-processor/@name=VtkHdfV2PostProcessor`
230+
225231
### Les options multiples {#arcanedoc_execution_commandlineargs_addr_multi}
226232

227233
Mais un problème apparait assez vite : comment faire si on a des options multiples ?
@@ -250,7 +256,7 @@ Ainsi, pour les trois valeurs de `deltat-cp`, on les adresse comme ceci :
250256
`//simple-hydro/deltat-cp[3]`
251257

252258
\warning Il n'y a pas d'erreur au niveau des indices. En XML, les indices commencent
253-
à 1, et non 0 !
259+
à 1, et non 0.
254260

255261
On peut aussi les écrire comme ceci :
256262

@@ -275,6 +281,84 @@ Ou bien :
275281
dataset.arc
276282
```
277283

284+
### L'ajout d'options {#arcanedoc_execution_commandlineargs_addr_add_option}
285+
286+
Une chose que l'on peut faire aussi est d'ajouter des options.
287+
288+
Si l'on souhaite ajouter une quatrième option `deltat-cp`, il est possible d'ajouter l'argument :
289+
290+
`-A,//simple-hydro/deltat-cp[4]=9.0`
291+
292+
Il est aussi possible d'ajouter des options non présentes dans le jeu de données (mais présentes dans l'AXL) :
293+
294+
```xml
295+
<!--Fichier ARC-->
296+
<?xml version="1.0"?>
297+
<case codename="ArcaneTest" codeversion="1.0">
298+
<arcane/>
299+
<meshes/>
300+
301+
<simple-hydro>
302+
</simple-hydro>
303+
304+
</case>
305+
```
306+
307+
On pourrait ajouter les options via les arguments de la ligne de commande :
308+
309+
```sh
310+
./app \
311+
-A,//simple-hydro/deltat-cp[1]=3.0 \
312+
-A,//simple-hydro/deltat-cp[2]=6.0 \
313+
-A,//simple-hydro/deltat-cp[3]=7.0 \
314+
dataset.arc
315+
```
316+
317+
Ça fonctionne aussi pour les *options services*. Dans ce cas, il est nécessaire d'ajouter au moins l'attribut `name` :
318+
319+
```sh
320+
./app \
321+
-A,//simple-hydro/post-processor/@name=VtkHdfV2PostProcessor \
322+
dataset.arc
323+
```
324+
325+
Puis, on peut, par exemple, modifier les *options simples* de ce service ou l'attribut `mesh-name` :
326+
327+
```sh
328+
./app \
329+
-A,//simple-hydro/post-processor/@name=VtkHdfV2PostProcessor \
330+
-A,//simple-hydro/post-processor/@mesh-name=Mesh1 \
331+
-A,//simple-hydro/post-processor/max-write-size=50 \
332+
dataset.arc
333+
```
334+
335+
\warning Il n'est pas encore possible d'ajouter des *options complexes*.
336+
337+
#### Et si on commence à l'indice 2 ? {#arcanedoc_execution_commandlineargs_addr_add_option_default}
338+
339+
Si, au lieu de lancer notre application avec ces arguments :
340+
341+
```sh
342+
./app \
343+
-A,//simple-hydro/deltat-cp[1]=3.0 \
344+
-A,//simple-hydro/deltat-cp[2]=6.0 \
345+
-A,//simple-hydro/deltat-cp[3]=7.0 \
346+
dataset.arc
347+
```
348+
349+
on lançait ceci :
350+
351+
```sh
352+
./app \
353+
-A,//simple-hydro/deltat-cp[2]=6.0 \
354+
-A,//simple-hydro/deltat-cp[3]=7.0 \
355+
dataset.arc
356+
```
357+
358+
Dans ce cas, l'option `//simple-hydro/deltat-cp[1]`, qui n'est ni présente dans le jeu de
359+
données, ni présente dans les arguments de la ligne de commande, sera ajouté avec la valeur
360+
par défaut.
361+
278362
### Les syntaxes spéciales {#arcanedoc_execution_commandlineargs_addr_multi_special_syntax}
279363

280364
#### L'indice ANY {#arcanedoc_execution_commandlineargs_addr_multi_special_syntax_index_any}
@@ -295,21 +379,25 @@ Exemple de lancement :
295379
dataset.arc
296380
```
297381

298-
Et dans ce cas, les trois options `simple-hydro/deltat-cp` auront la valeur `2.0`.
382+
Et dans ce cas, les trois options `simple-hydro/deltat-cp` auraient la valeur `2.0`.
299383

384+
#### La balise ANY {#arcanedoc_execution_commandlineargs_addr_multi_special_syntax_tag_any}
300385

301-
#### Le tag ANY {#arcanedoc_execution_commandlineargs_addr_multi_special_syntax_tag_any}
386+
La balise ANY permet de changer la valeur d'une option présente à plusieurs endroits.
387+
Elle est représentée par une partie d'adresse vide (deux `/` sans rien entre)
388+
(donc `//module1/option1/option11`, si on veut remplacer `option1` par ANY, on fait `//module1//option11`).
302389

303-
Le tag ANY permet de traiter plusieurs options ayant des adresses différentes en une fois.
304-
Il est représenté par une partie d'adresse vide (donc `//module1/option1/option11`,
305-
si on veut remplacer `option1` par ANY, on fait `//module1//option11`).
306-
307-
\warning Le tag ANY ne remplace qu'une seule partie de l'adresse. Pour remplacer
390+
\note La balise ANY ne remplace qu'une seule partie de l'adresse. Pour remplacer
308391
plusieurs parties, il faut en mettre plusieurs. Reprenons l'exemple du dessus en
309392
remplaçant `module1` par ANY : `////option11`
310393

394+
\todo Doit-on garder cette syntaxe ou préférer utiliser `*` ? (exemple : `//*/*/option11`)
395+
Le `*` pouvant prêter à confusion (ça pourrait sous-entendre que l'on pourrait
396+
faire `//*/option*/option11` (comme une regex) alors que non), et la partie d'adresse vide
397+
paraissant plus claire, ce dernier fut choisi.
398+
311399
En reprenant l'exemple au-dessus, si l'on souhaite modifier toutes les options `deltat-cp[2]`,
312-
on peut utiliser l'adresse :
400+
quelque soit le module dans lequel cette option apparait, on peut utiliser l'adresse :
313401

314402
`///deltat-cp[2]`
315403

@@ -321,7 +409,8 @@ Exemple de lancement :
321409
dataset.arc
322410
```
323411

324-
\warning Le tag ANY ne peut pas être présent à la fin de l'adresse.
412+
\warning La balise ANY ne peut pas être présente à la fin de l'adresse
413+
(l'adresse `//module1/option11/` est invalide).
325414

326415

327416
#### Le mélange des deux ANY {#arcanedoc_execution_commandlineargs_addr_multi_special_syntax_mix_any}
@@ -335,19 +424,47 @@ Admettons que l'on ait le jeu de données :
335424
<meshes/>
336425

337426
<simple-hydro>
338-
<deltat-cp>3.0</deltat-cp>
339-
<deltat-cp>6.0</deltat-cp>
427+
<checkpoint>
428+
<deltat-cp>3.0</deltat-cp>
429+
<print-details-before-cp>true</print-details-before-cp>
430+
</checkpoint>
431+
432+
<checkpoint>
433+
<deltat-cp>6.0</deltat-cp>
434+
<print-details-before-cp>true</print-details-before-cp>
435+
</checkpoint>
436+
340437
<final-time>10.2</final-time>
438+
341439
<post-processor name="Ensight7PostProcessor">
342440
<fileset-size>10</fileset-size>
343441
<binary-file>false</binary-file>
344442
</post-processor>
443+
444+
<noidea-service name="StillNoIdea">
445+
<duration>-1</duration>
446+
<rewrite>false</rewrite>
447+
</noidea-service>
345448
</simple-hydro>
346449

347450
<pas-simple-hydro>
348-
<deltat-cp>1.0</deltat-cp>
349-
<deltat-cp>3.0</deltat-cp>
350-
<final-time>9.9</final-time>
451+
<checkpoint>
452+
<deltat-cp>1.0</deltat-cp>
453+
<print-details-before-cp>true</print-details-before-cp>
454+
</checkpoint>
455+
456+
<checkpoint>
457+
<deltat-cp>3.0</deltat-cp>
458+
<print-details-before-cp>true</print-details-before-cp>
459+
</checkpoint>
460+
461+
<checkpoint>
462+
<deltat-cp>7.0</deltat-cp>
463+
<print-details-before-cp>true</print-details-before-cp>
464+
</checkpoint>
465+
466+
<final-time>8.9</final-time>
467+
351468
<post-processor name="Ensight7PostProcessor">
352469
<fileset-size>10</fileset-size>
353470
<binary-file>false</binary-file>
@@ -357,23 +474,54 @@ Admettons que l'on ait le jeu de données :
357474
</case>
358475
```
359476

360-
TODO Continuer ici
477+
On pourrait commencer par vouloir modifier l'option `deltat-cp` du second
478+
checkpoint du module `pas-simple-hydro`.
479+
Pour cela, on peut utiliser l'argument : <br>
480+
`-A,//pas-simple-hydro/checkpoint[2]/delta-cp=4.0`.
481+
482+
Puis, on pourrait modifier le premier `deltat-cp` des deux modules : <br>
483+
`-A,///checkpoint[1]/delta-cp=2.0`.
484+
485+
Ensuite, on pourrait ne pas vouloir d'écriture entre les checkpoints : <br>
486+
`-A,///checkpoint[]/print-details-before-cp=false`.
361487

488+
Enfin, les services du module `simple-hydro` doivent agir sur le `Mesh0`
489+
et les services `pas-simple-hydro` sur le `Mesh1` : <br>
490+
`-A,//simple-hydro//@mesh-name=Mesh0` <br>
491+
`-A,//pas-simple-hydro//@mesh-name=Mesh1`
492+
493+
Finalement, on se retrouve avec la commande :
494+
495+
```sh
496+
./app \
497+
-A,//pas-simple-hydro/checkpoint[2]/delta-cp=4.0 \
498+
-A,///checkpoint[1]/delta-cp=2.0 \
499+
-A,///checkpoint[]/print-details-before-cp=false \
500+
-A,//simple-hydro//@mesh-name=Mesh0 \
501+
-A,//pas-simple-hydro//@mesh-name=Mesh1 \
502+
dataset.arc
503+
```
362504

363505
### Les syntaxes invalides {#arcanedoc_execution_commandlineargs_addr_invalid_syntax}
364506

365507
Pour cette partie, quelques containtes d'utilisations ont été mises en places :
366508

367509
- Les arguments commençants par `-A,//` sont réservés à cet usage.
368510
- Les adresses ne peuvent pas terminer par un `/`.
369-
Exemple invalide :
511+
Exemple invalide :
370512
```sh
371513
./app \
372514
-A,//simple-hydro/deltat-cp/=3.1 \
373515
dataset.arc
374516
```
375517
- Les indices doivent être des entiers supérieurs ou égals à 1.
376-
518+
- Lorsqu'un indice est présent (y compris l'indice ANY), une balise doit aussi être présente.
519+
Exemple invalide :
520+
```sh
521+
./app \
522+
-A,//simple-hydro/[2]/option=3.1 \
523+
dataset.arc
524+
```
377525

378526

379527

0 commit comments

Comments
 (0)