Cette page décrit les outils disponibles dans ARCANE pour effectuer des comparaisons bit à bit des valeurs des variables gérées par ARCANE. Les comparaisons suivantes sont possibles :
Il est important de noter que la comparaison n'est possible que sur les variables gérées par Arcane (comme #VariableCellReal, #VariableScalarInt32, ...). Dans l'implémentation actuelle, seules les variables ayant un type de donnée numérique sont comparées (donc par exemple par les types de données 'String').
Ce mécanisme permet de déterminer la liste des variables Arcane qui sont différentes entre deux exécutions. Il ne fonctionne que sur les variables Arcane.
Le principe de fonctionnement est le suivant :
Toutes les variables Arcane sont comparées sauf celles qui ont la propriété IVariable::PExecutionDepend à vrai. En comparaison parallèle/sequentiel, celles qui ont aussi la propriété IVariable::PSubDomainDepend ne sont pas comparées.
Pour sauvegarder les informations de référence, il suffit de lancer le cas après avoir positionné la variable d'environnement STDENV_VERIF à la valeur WRITE. Dans ce cas, les valeurs de toutes les variables seront sauvées à chaque itération. Il est possible de le faire pour chaque point d'entrée en positionnant la variable d'environnement STDENV_VERIF_ENTRYPOINT mais cela augmente beaucoup le volume des informations à sauver.
Par défaut, les informations sont sauvées dans le répertoire /tmp/$USER/verif
mais il est possible de changer cela en spécifiant un autre chemin dans la variable d'environnement STDENV_VERIF_PATH
/tmp
.Une fois la référence exécutée, il suffit de positionner la variable d'environnement STDENV_VERIF à READ et de lancer une nouvelle exécution. Il est possible de changer le nombre de sous-domaines par rapport à l'exécution de référence et ainsi faire des comparaisons entre parallèle et séquentiel (dans ce cas, l'exécution séquentielle doit être celle de référence et être exécutée en premier) ou des comparaisons parallèles/parallèles.
Dans le listing de l'exécution, apparait alors pour chaque itération (ou pour chaque point d'entrée si STDENV_VERIF_ENTRYPOINT est définie) la liste des variables qui sont différentes entre cette exécution et la référence, ainsi que leurs valeurs, comme suit :
Pour chaque variable et chaque sous-domaine est indiqué son nom, le Item::uniqueId() et le Item::localId() de l'entité ainsi que si elle est fantôme ((G)) ou appartenant au sous-domaine ((O)) , la valeur actuelle (val), la valeur de référence (ref) et la différence relative (rdiff). Pour ne pas alourdir le listing, seules les 10 différences les plus importantes en valeur absolue sont affichées.
Lorsque la variable est une variable tableau et n'est pas sur une entité du maillage, le (G) ou (O) n'apparait pas et au lieu du numéro local de l'entité, c'est l'indice de l'élément dans le tableau qui est affiché.
En parallèle, il peut être normal que les valeurs sur les mailles fantômes soient différentes de la référence si la variable n'est pas synchronisée. Comme cela peut être le cas pour de nombreuses variables, il est possible de n'afficher les différences que sur les mailles appartenant au sous-domaine, en positionnant la variable d'environnement STDENV_VERIF_SKIP_GHOSTS.
De la même manière qu'il est possible de faire des comparaisons bit à bit, il est possible de vérifier que les variables sont bien synchronisées entre les sous-domaines. Pour cela, il suffit de spécifier la valeur CHECKSYNC à la variable d'environnement STDENV_VERIF. Les valeurs avec l'attribut IVariable::PNoNeedSync et les variables partielles ne sont pas comparées.
Il est aussi possible de vérifier que les valeurs d'une variable sont les mêmes sur tous les replica d'un sous-domaine. Pour cela, il faut spécifier la valeur CHECKREPLICA à la variable d'environnement STDENV_VERIF. Les variables avec l'attribut IVariable::PNoReplicaSync et les variables partielles ne sont pas comparées.