\documentclass[a4paper,12pt]{scrartcl}
%\usepackage{isolatin1}
\usepackage[latin1]{inputenc}
\usepackage[francais]{babel}
\usepackage{epsfig,color}
\usepackage{graphicx}
\usepackage{hyperref}
\usepackage{fancybox}
\usepackage{wrapfig}
%\usepackage{pslatex}
\usepackage{amsmath}
\usepackage{subfigure}
%\usepackage{/Users/troufflard/LATEX/BIBLIOTHEQUE/macro_figure}
%\usepackage{eurosym} 
\usepackage{calc}
%\usepackage{t1enc}
\usepackage{ifthen}

\usepackage{lscape}

\usepackage{float} % paquet pour placer les images correctement avec \begin{figure}[H]
\usepackage{enumitem}%package pour gérer la puce avec \begin{enumerate}[label={blabla-\arabic*}] (ce qui donne comme puces : blabla-1, blabla-2, etc...)

\usepackage{tabularx}
\usepackage{multirow}
\usepackage{colortbl}
%\newcolumntype{M}[1]{>{\raggedright}m{#1}}

\usepackage{tikz}
\usetikzlibrary{trees}


\addto\captionsfrench{\def\figurename{Figure}}
\addto\captionsfrench{\def\tablename{Tableau}}
%\usepackage{hangcaption}

\oddsidemargin 0.1cm
\evensidemargin -0.9cm
\topmargin -1cm
\headsep 1cm
\textwidth 17cm
\textheight 24cm
\parindent 0.5cm
\raggedbottom
\sloppy

\usepackage{hyperref}
\hypersetup{
colorlinks=true, %colorise les liens
breaklinks=true, %permet le retour à la ligne dans les liens trop longs
urlcolor= blue, %couleur des hyperliens
linkcolor= blue, %couleur des liens internes
citecolor= green %couleur citation biblio
}

%creation d une longueur egale a \baselineskip pour l utiliser dans les tabular (car un bug incroyable fait que \baselineskip est egal a 0 dans les tabular!!!!)
\newlength{\savebaselineskip}
\setlength{\savebaselineskip}{\baselineskip}


\newcommand{\ligne}[1]{
%on change l'unité de longueur "\unitlength" liée à l'environnement "picture"
%\baselineskip = distance entre la base d'une ligne et la base de la ligne suivante
%
% pour info, on a : 1cm = 3\baselineskip (sous réserve d'un changement de la valeur de \baselineskip)
%
\setlength{\unitlength}{\baselineskip}
%on declare un dessin de dimension #1 et de hauteur 0
\begin{picture}(#1,0.)
%on fait une ligne d'origine (0,0.25\baselineskip), dans la direction (1,0) et de longueur #1 (egale a la taille du dessin)
\put(0,0.25){\line(1,0){#1}}
\end{picture}
%Rq : on utilise 0.25\baselineskip pour l'origine afin d'avoir une ligne "centrée" en hauteur, ce qui permet de faire des trucs du genre :
%-------------------
%texte bla bla
%-------------------
%
%au lieu de :
%_____________
%texte bla bla
%_____________
}


\definecolor{greenOK}{RGB}{15 , 185 ,  15}





%
% titre, auteur, date
%
\title{Manuel d'utilisation de la procédure de vérification}
\author{Rédacteur principal: Julien Troufflard}
\date{\today}

%\pagestyle{arabic}
\pagenumbering{arabic}
\begin{document}
\maketitle

\tableofcontents

\clearpage

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Introduction {\small \it (Gérard Rio)}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


Ce manuel présente la procédure de vérification d'une série de tests dédié à Herezh++. Cette vérification est effectuée via principalement un script perl. La première version de ce script a été mise en place par Laurent Mahéo au cours de sa thèse au début des années 2000. Puis  plusieurs évolutions mineures ont été introduite. Enfin dernièrement, suite à un élargissement des objectifs, le script a été entièrement refondé par Julien Troufflard en 2015. On trouvera dans ce document une description de l'organisation de l'arborescence, du fonctionnement et enfin de la méthodologie nécessaire pour introduire un nouveau test.

Deux objectifs principaux sont recherchés: 
\begin{itemize}
	\item la détection d'évolutions malencontreuses dans le fonctionnement d'Herezh++
	\item la présentation d'exemples de fonctionnement et de mise en données des différentes possibilités offertes par Herezh++.
\end{itemize}

Enfin l'idée est que rien n'est définitif, et que des évolutions sont prévisibles en fonction des demandes et attentes des utilisateurs.









%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Personnes référentes}\label{section_personnes_referentes}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Liste des personnes référentes à contacter pour toute question/problème :
\begin{itemize}
\item[\textbullet] Gérard Rio (développeur \verb|Herezh++|)\\
\hspace*{1cm} mail : {\color{blue} gerard.rio@univ-ubs.fr}
\item[\textbullet] Julien Troufflard (développeur scripts procédure de vérification)\\
\hspace*{1cm} mail : {\color{blue} troufflard@univ-ubs.fr}
\end{itemize}











%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Arborescence du projet}\label{section_arborescence}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

L'arborescence du projet CVS est la suivante :\\

\begin{tikzpicture}[%
  grow via three points={one child at (0.5,-0.6) and
  two children at (0.5,-0.7) and (0.5,-1.5)},
  edge from parent path={(\tikzparentnode.south) |- (\tikzchildnode.west)}]
  \node[draw] {\bf Verif\_Herezh\rm}
    child { node[draw, anchor=west] {Batterie (répertoire contenant les répertoires de test)}}
    child { node[draw, anchor=west] {Doc (répertoire dédié à la rédaction de la documentation utilisateur)}}
    child { node[draw, anchor=west] {Perl (répertoire contenant divers scripts Perl pour exécuter la vérification)}}
    child { node[draw, anchor=west] {Rapport (répertoire contenant les rapports de vérification)}}
    child { node[draw, anchor=west] {Tests\_en\_attente\_debug (répertoire contenant des tests en attente pour cause de bugs)}}
    child { node[anchor=west] {verifier\_exeHZ.zsh (script de lancement de la vérification)}}
    child { node[anchor=west] {verifier\_exeHZ.pl (script de lancement de la vérification (nouvelle version)}
    };
\end{tikzpicture}\\














%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Lancement de la batterie de tests}\label{section_lancement_batterie_tests}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Procédure de lancement}

Il y a actuellement deux scripts permettant de lancer la batterie de tests. Le script \verb|verifier_exeHZ.zsh| est la version originale historique. Le script \verb|verifier_exeHZ.pl| est une version plus récente offrant plus de possibilités sous forme d'options. Pour l'instant, ces deux scripts existent. A terme, si \verb|verifier_exeHZ.pl| s'avère satisfaisant, la version \verb|.zsh| dispara\^itra du projet.\\

Avant de détailler l'utilisation de ces scripts, voici un résumé de la procédure pour lancer la batterie :
\begin{itemize}
\item[1-] se placer dans un répertoire contenant des tests et le répertoire \verb|Perl|
\item[2-] exécuter le script \verb|verifier_exeHZ.zsh| ou \verb|verifier_exeHZ.pl [...options...]| en lui indiquant l'exécutable à tester\\
\end{itemize}

Le rapport obtenu après exécution de la batterie indique pour chaque test si il est réussi ainsi que le temps de calcul obtenu par la commande \verb|time|.\\


\subsubsection*{\underline{Script \texttt{verifier\_exeHZ.zsh}} :}
Le script \verb|verifier_exeHZ.zsh| lance automatiquement tous les tests présents dans le répertoire courant et ses sous-répertoires. Un test est un répertoire dont le nom commence par \verb|Test_R| ou \verb|Test_L| (voir section \ref{section_organisation_tests}). Le script peut \^etre lancé dans n'importe quel répertoire contenant le répertoire \verb|Perl|. Il produit un rapport de tests pour les tests \verb|Test_R| (tests rapides) et un rapport pour les tests \verb|Test_L| (tests longs). Ces rapports sont contenus dans le répertoire \verb|Rapport| (éventuellement créé si il n'existe pas au lancement) sous le nom \verb|rapport_test_R.txt| et \verb|rapport_test_L.txt|. Le script affiche automatiquement ces rapports si l'éditeur de texte \verb|nedit| est disponible.

Comme mentionné précédemment, \verb|verifier_exeHZ.zsh| NE permet PAS d'interrompre correctement la batterie en cours avec \verb|ctrl+c|, avec pour conséquence un fort risque de modification des répertoires de test originaux.

Le script \verb|verifier_exeHZ.zsh| prend un argument : le nom de l'exécutable Herezh++. Typiquement, cet exécutable est présent dans un répertoire pointé par la variable environnement \verb|$PATH|. Mais on peut également donner un chemin absolu ou relatif.\\

Exemples :
\begin{itemize}
\item[$\bullet$] cas d'un exécutable accessible via la variable environnement \verb|$PATH| :
\begin{itemize}
\item[] \verb|verifier_exeHZ.zsh HZppfast_Vn-1|
\item[] \verb|verifier_exeHZ.zsh HZppfast64|
\end{itemize}
\item[$\bullet$] cas d'un exécutable spécifié par un chemin absolu ou relatif :
\begin{itemize}
\item[] \verb|verifier_exeHZ.zsh /Users/dupont/bin/HZpp|
\item[] \verb|verifier_exeHZ.zsh ./HZppfast|
\item[] \verb|verifier_exeHZ.zsh ../mon_rep/HZppfast|\\
\end{itemize}
\end{itemize}

\subsubsection*{\underline{Script \texttt{verifier\_exeHZ.pl}} :}
Le script \verb|verifier_exeHZ.pl| fonctionne de manière identique. Toutes les informations mentionnées pour \verb|verifier_exeHZ.zsh| sont valables pour \verb|verifier_exeHZ.pl|. Cette version offre des possibilités supplémentaires sous forme d'options. Ces options sont consultables en tapant \verb|verifier_exeHZ.pl -h| dans un terminal. En l'absence d'options, \verb|verifier_exeHZ.pl| fonctionne exactement comme \verb|verifier_exeHZ.zsh|. Comme mentionné précédemment, \verb|verifier_exeHZ.pl| permet d'interrompre correctement la batterie en cours avec \verb|ctrl+c|.\\

Exemples d'options :
\begin{itemize}
\item[$\bullet$] ne lancer que les tests rapides (option \verb|-R|) :
\begin{itemize}
\item[] \verb|verifier_exeHZ.pl -R HZppfast_Vn-1|
\end{itemize}
\item[$\bullet$] ne lancer que les tests longs (option \verb|-L|) :
\begin{itemize}
\item[] \verb|verifier_exeHZ.pl -L /Users/dupont/bin/HZpp|
\end{itemize}
\item[$\bullet$] ne lancer que les tests ayant un indicateur ECHEC dans un rapport de test (option \verb|-rpt nom_rapport|) :
\begin{itemize}
\item[] \verb|verifier_exeHZ.pl -rpt ./Rapport/rapport_test_R.txt HZppfast| \footnotesize (*)\normalsize
\item[] \hspace*{0.5cm} \footnotesize (*) Remarque : dans le cas de l'option \verb|-rpt|, le rapport de test s'appellera\\
\hspace*{3.1cm}\verb|Rapport/rapport_test_debugECHEC.txt|\normalsize\\
\end{itemize}
\end{itemize}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Procédure d'interruption}

L'utilisateur peut souhaiter stopper la batterie en cours. La commande usuelle d'interruption d'un processus UNIX/Linux est \verb|ctrl+c|.

{\color{greenOK} Le script \verb|verifier_exeHZ.pl| gère proprement une interruption de la batterie en cours par \verb|ctrl+c|.}

{\color{red} Le script \verb|verifier_exeHZ.zsh| ne gère pas correctement l'interruption \verb|ctrl+c| et il y a un risque d'avoir des fichiers et répertoires non effacés ou modifiés. Par sécurité, il est demandé de NE JAMAIS ACTUALISER le projet (cvs commit) après une interruption ctrl+c du script \verb|verifier_exeHZ.zsh|.}









%%
\clearpage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Organisation des tests}\label{section_organisation_tests}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Classement des tests}\label{section_classement_tests}
On distingue actuellement deux sortes de tests selon le temps de calcul : les tests "Rapides" et les tests "Longs". A titre indicatif, un test "Rapide" est supposé durer moins de 30 secondes. Chaque test est contenu dans un répertoire dont le nom commence par \verb|Test_R| (test rapide) ou par \verb|Test_L| (test long). Les répertoires de tests sont rangés dans le répertoire \verb|Batterie| selon l'arborescence montrée sur la figure \ref{arbo_tests}. Le classement actuel est le suivant :
\begin{itemize}
\item[$\bullet$] \verb|FONCTION_UNIQUE| : répertoire dédié au simple test d'une fonctionnalité (une loi de comportement, un mode de calcul, un type d'élément, ...). En général, ce sont des tests "Rapides".
\item[$\bullet$] \verb|CALCUL_COMPLET| : exemples complets issus par exemple de travaux de recherche ou applications industrielles (par exemple : une mise en forme de t\^ole, un essai de traction avec localisation, un déploiement de structure souple, ...). En général, ce sont des tests "Longs".
\item[$\bullet$] \verb|AUTRES| : tests difficiles à classer. Ce répertoire peut aussi servir de lieu de dép\^ot temporaire avant transfert vers une rubrique dédiée.
\end{itemize}

\color{red} Dans le cas d'un nouveau test révélant un bug encore non résolu dans Herezh++, le test doit \^etre stocké dans le répertoire \verb|Tests_en_attente_debug| (merci d'en informer un référent du projet).
\color{black}

\begin{figure}[H]
\centering
\begin{tikzpicture}[%
  grow via three points={one child at (0.5,-0.7) and
  two children at (0.5,-0.7) and (0.5,-1.5)},
  edge from parent path={(\tikzparentnode.south) |- (\tikzchildnode.west)}]
  \node[draw] {Batterie}
    child { node[draw, anchor=west] {FONCTION\_UNIQUE}
      child { node[draw, anchor=west] {CHARGEMENT}}
      child { node[draw, anchor=west] {CONTACT}}
      child { node[draw, anchor=west] {CONDITIONS\_LIMITES}}
      child { node[draw, anchor=west] {LOI\_DE\_COMPORTEMENT}}
      child { node[draw, anchor=west] {PARAMETRES}}
      child { node[draw, anchor=west] {SORTIES}}
      child { node[draw, anchor=west] {TYPE\_DE\_CALCUL}}
      child { node[draw, anchor=west] {TYPE\_CHARGEMENT}}
      child { node[draw, anchor=west] {UTILITAIRES}}
    }
    child[missing] { }
    child[missing] { }
    child[missing] { }
    child[missing] { }
    child[missing] { }
    child[missing] { }
    child[missing] { }
    child[missing] { }
    child[missing] { }
    child { node[draw, anchor=west] {CALCUL\_COMPLET}}
    child { node[draw, anchor=west] {AUTRES}};
\end{tikzpicture}
\caption{Arborescence des tests dans le répertoire Batterie}
\label{arbo_tests}
\end{figure}


%%
\clearpage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Lancement et vérification d'un test}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsubsection{Lancement d'un test}
Le script \verb|verifier_exeHZ.zsh| ou \verb|verifier_exeHZ.pl| a pour fonction de rechercher les répertoires de tests (répertoires commençant par \verb|Test_R| ou \verb|Test_L|). Chaque répertoire de test contient un unique fichier \verb|.info| (vide ou non) et un certain nombre $N$ de fichiers \verb|.CVisu|[i] où [i] est un numéro de 1 à $N$. Pour chaque fichier \verb|.CVisu|[i], un calcul est lancé. Le premier calcul est celui correspondant au fichier \verb|.CVisu1|. Les calculs suivants pour [i]$>$1 sont des RESTART (si possible) du calcul précédent à partir du dernier incrément sauvegardé (selon option \verb|SAUVEGARDE| du fichier \verb|.info|).\\

Pour chaque calcul, un éventuel fichier d'extension \verb|.commande|[i] contient des commandes interactives pour répondre aux différents menus interactifs proposés par Herezh++. Par défaut, un calcul Herezh est exécuté avec l'option \verb|-f| suivie du nom du fichier \verb|.info| (calcul classique). Si le fichier \verb|.info| ne contient pas le mot-clé \verb|dimension|, l'option utilisée est \verb|-n| suivie du fichier \verb|.info| (création interactive d'un fichier .info). Il est également possible de définir complètement les arguments donnés à Herezh++ dans un fichier \verb|.argument|[i]. Pour plus d'informations sur les fichiers facultatifs, on peut se référer à la section \ref{section_fichiers_facultatifs}.\\

L'exécution d'un test se fait dans un répertoire temporaire dans \verb|/tmp|. On s'assure ainsi que le contenu du répertoire d'origine ne sera jamais altéré, quelque soit le déroulement du test.\\
 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsubsection{Vérification}\label{subsubsection_verification}

Pour chaque calcul, une vérification est faite pour déterminer si le test est réussi ou non. Le rapport de test contient les indicateurs \verb|OK| ou \verb|ECHEC|. Il y a actuellement 3 types de vérification possible :
\begin{itemize}
\item[$\bullet$] comparaison des données sorties au format maple :
\begin{itemize}
\item[] il s'agit du mode de vérification par défaut. Le fichier \verb|.CVisu|[i] définit les sorties au format maple. Le répertoire de test contient alors un fichier \verb|.maple.ref|[i] qui définit les valeurs de référence. Si l'écart absolu et relatif entre les données de référence et les données du calcul sont inférieures à une tolérance, alors le test est réussi. Les tolérances par défaut sont en absolu 1e-6 et en relatif 1e-3. Il est possible de choisir librement les tolérances dans un fichier \verb|.precision|[i]. Pour une grandeur $X$ générée à l'issue du calcul [i] et sa valeur de référence $X_{ref}$ contenue dans le fichier \verb|.maple.ref|[i], le test est réussi si les relations de comparaison suivantes sont respectées :
\begin{equation}
\begin{array}{rrcl}
\text{comparaison absolue :} & |X - X_{ref}| & \leq & \varepsilon_{absolu}\\
\text{comparaison relative :} & \left|\dfrac{X - X_{ref}}{X_{ref}}\right| & \leq & \varepsilon_{relatif}\:\:\:\forall X_{ref} \neq 0
\end{array}
\end{equation}
\\
\bf IMPORTANT : \rm si les fichiers \verb|.maple| et \verb|.maple.ref| contiennent plusieurs lignes de données, seule la dernière ligne est traitée\\
\end{itemize}
\item[$\bullet$] comparaison libre définie par un script :
\begin{itemize}
\item[] la vérification peut \^etre librement définie par un script qui a pour fonction de renvoyer \verb|OK| ou \verb|ECHEC|. Ce script est un fichier exécutable d'extension \verb|.verif|[i], signifiant que le calcul n°[i] sera vérifié par un script libre.\\
\end{itemize}
\item[$\bullet$] vérification simple de l'exécution :
\begin{itemize}
\item[] en l'absence de fichier \verb|.maple.ref| ou de script \verb|.verif|, la vérification est considérée \verb|OK| si le calcul s'est lancé normalement et terminé normalement (que le calcul ait convergé ou non).
\end{itemize}
\end{itemize}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Contenu d'un répertoire de test}\label{section_contenu_repertoire_test}
Un répertoire de tests contient des fichiers obligatoires et des fichiers facultatifs.\\

Les fichiers obligatoires sont :
\begin{itemize}
\item[$\bullet$] un fichier \verb|README| (informations sur le test, voir trame figure \ref{format_fichier_README})
\item[$\bullet$] un \bf unique \rm fichier \verb|.info| (éventuellement vide dans certains cas)
\item[$\bullet$] les fichiers \verb|.CVisu|[i] (éventuellement vides dans certains cas)
\item[$\bullet$] tous les fichiers nécessaires à l'exécution des calculs (maillage \verb|.her|, etc...)\\
\end{itemize}

Les fichiers facultatifs en lien avec l'exécution d'un test sont :
\begin{itemize}
\item[$\bullet$] les fichiers maple de référence (fichiers d'extension \verb|.maple.ref|[i])
\item[$\bullet$] les fichiers de précision (fichiers d'extension \verb|.precision|[i])
\item[$\bullet$] les fichiers de commandes interactives (fichiers d'extension \verb|.commande|[i])
\item[$\bullet$] les scripts de vérification libre (fichiers exécutables d'extension \verb|.verif|[i])
\item[$\bullet$] les fichiers donnant les arguments à l'exécutable Herezh++ (fichiers~d'extension~\verb|.argument|[i])
\item[$\bullet$] les scripts de pré et post traitement (respectivement les fichiers d'extension \verb|.pretrait|[i]  et \verb|.posttrait|[i])\\
\end{itemize}

D'autres fichiers facultatifs peuvent \^etre contenus dans un répertoire de test. Il n'y a pas de restriction mis à part qu'un répertoire de test ne doit pas contenir des fichiers trop lourds en terme d'espace disque. Typiquement, il peut \^etre utile d'ajouter les fichiers suivants :
\begin{itemize}
\item[$\bullet$] des fichiers de mise en données du test pour d'autres codes de calcul (par exemple : fichier \verb|.inp| pour Abaqus)
\item[$\bullet$] des fichiers donnant des résultats donnés par d'autres codes de calcul ou par des solutions analytiques (bien que le fichier \verb|README| puisse \^etre utilisé pour écrire ces données)
\end{itemize}

\begin{figure}[H]
{\color{brown} 
\begin{verbatim}
------------------------------------------------------------
Auteur
------------------------------------------------------------
liste des auteurs sous la forme : Prenom Nom (email)
remarque : un auteur par ligne

------------------------------------------------------------
Mots-cles
------------------------------------------------------------
liste des mots-cles (un par ligne)
remarque : un mot-cle peut contenir des espaces
           (exemple : contraintes planes)
\end{verbatim}
}
{\color{blue} 
\begin{verbatim}
------------------------------------------------------------
But du test
------------------------------------------------------------
du texte...

------------------------------------------------------------
Description du calcul
------------------------------------------------------------
du texte...
\end{verbatim}
}
\begin{verbatim}
------------------------------------------------------------
Grandeurs de comparaison
------------------------------------------------------------
du texte...

------------------------------------------------------------
Informations sur les fichiers facultatifs
------------------------------------------------------------
du texte...

------------------------------------------------------------
Comparaison avec des solutions analytiques
------------------------------------------------------------
du texte...

------------------------------------------------------------
Comparaison avec des codes de calcul
------------------------------------------------------------
du texte...

\end{verbatim}
\caption{Trame du fichier README présent dans chaque répertoire de test. {\color{blue} Les rubriques en bleu sont \underline{obligatoires}.} {\color{brown} Les rubriques en marron sont importantes pour la traçabilité des tests mais non obligatoires.}}
\label{format_fichier_README}
\end{figure}
\clearpage


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Recherche de tests}\label{section_recherche_de_tests}

Un document pdf de nom \verb|catalogue_tests.pdf| est présent à la racine du projet CVS. Il dresse la liste actuelle des tests et résume en quelques phrases leur contenu. Un index en fin de document permet de faire une recherche par mot-clé.\\

Ce document est rédigé automatiquement sur la base du contenu des rubriques "Auteur", "Mots-cles", "But du test" et "Description du calcul" des fichiers README (voir figure \ref{format_fichier_README}).















%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Ajout d'un nouveau test}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Vue d'ensemble}\label{subsection_vue_ensemble}
Créer un nouveau test consiste à ajouter un nouveau répertoire dans le répertoire \verb|Batterie|. Le choix de son emplacement dans l'arborescence est libre en s'inspirant tout de m\^eme des descriptifs donnés en section \ref{section_classement_tests}. Le contenu du répertoire est celui défini en section \ref{section_contenu_repertoire_test}. 
Les fichiers facultatifs dépendent du type de traitement Herezh++. Dans tous les cas, l'arborescence du répertoire de test est de la forme montrée sur la figure \ref{arbo_repertoire_test} et les règles suivantes sont à respecter :
\begin{itemize}
\item[$\bullet$] Le nom du nouveau répertoire est choisi en utilisant uniquement les lettres de a à z (sans accent), les chiffres de 0 à 9, le signe moins "-" et le tiret bas "\_". Si le test est un test "Rapide" (moins de 30 secondes), le nom commence par \verb|Test_R|, sinon il commence par \verb|Test_L|. Pour savoir si un nom de répertoire existe déjà, il y a un script dédié présent dans le répertoire \verb|Perl| : \verb|verif_existence_repertoire_test.pl| (option \verb|-h| pour l'aide). Pour l'utiliser, il faut se placer à la racine du projet (c'est-à-dire au m\^eme niveau que le répertoire \verb|Batterie|) et taper \verb|Perl/verif_existence_repertoire_test.pl nom_repertoire|.
\item[$\bullet$] Un seul fichier d'extension \verb|.info| doit \^etre présent dans le répertoire. Ce fichier doit \^etre présent m\^eme s'il est vide.
\item[$\bullet$] Pour chaque calcul, il est nécessaire de créer un fichier \verb|.CVisu| (\verb|.CVisu1|, \verb|.CVisu2|, etc...) m\^eme si celui-ci est vide. Ces fichiers servent non seulement à Herezh++ mais également au script \verb|Perl/test.pl| pour repérer les calculs à lancer (un calcul par fichier \verb|.CVisu|[i]).
\item[$\bullet$] tous les fichiers \verb|.CVisu|[i] et les fichiers facultatifs nécessaires à l'exécution d'un test (\verb|.verif|[i], \verb|.commande|[i], etc...) ont la m\^eme racine que le fichier \verb|.info| (par exemple, si on a le fichier \verb|nom_fichier.info|, l'éventuel fichier \verb|.verif1| doit avoir pour nom \verb|nom_fichier.verif1|)
\item[$\bullet$] le fichier \verb|README| contient obligatoirement les rubriques "But du test" et "Description du calcul" montrées sur la figure \ref{format_fichier_README}. Ces deux rubriques serviront à générer automatiquement une documentation pdf (catalogue de tests). Dans le m\^eme but, les rubriques "Auteur" et "Mots-cles", qui ne sont pas obligatoires, donnent des informations utiles (merci de les renseigner).
\item[] \bf Remarque importante : \rm ne pas écrire des lignes de 3 tirets ou plus (\verb|---| ou plus) dans le corps d'une rubrique. Ces lignes servent à repérer les titres de rubriques.\\
\end{itemize}


\begin{figure}[H]
\centering
\begin{tikzpicture}[%
  grow via three points={one child at (0.5,-0.7) and
  two children at (0.5,-0.7) and (0.5,-1.5)},
  edge from parent path={(\tikzparentnode.south) |- (\tikzchildnode.west)}]
  \node[draw] {Test\_[RL]\_nom\_repertoire}
    child { node[draw, anchor=west] {README}}
    child { node[draw, anchor=west] {nom\_calcul{\color{blue}.info}}}
    child[missing] { }
    child { node[draw, anchor=west] {nom\_calcul{\color{blue}.CVisu}{\color{red}1}}}
    child { node[draw, anchor=west] {(*) nom\_calcul{\color{blue}.maple.ref}{\color{red}1}}}
    child { node[draw, anchor=west] {(*) nom\_calcul{\color{blue}.precision}{\color{red}1}}}
    child { node[draw, anchor=west] {(*) nom\_calcul{\color{blue}.commande}{\color{red}1}}}
    child { node[draw, anchor=west] {(*) nom\_calcul{\color{blue}.verif}{\color{red}1}}}
    child { node[draw, anchor=west] {(*) nom\_calcul{\color{blue}.argument}{\color{red}1}}}
    child { node[draw, anchor=west] {(*) nom\_calcul{\color{blue}.pretrait}{\color{red}1}}}
    child { node[draw, anchor=west] {(*) nom\_calcul{\color{blue}.posttrait}{\color{red}1}}}
    child[missing] { }
    child { node[draw, anchor=west] {nom\_calcul{\color{blue}.CVisu}{\color{red}2}}}
    child { node[draw, anchor=west] {(*) nom\_calcul{\color{blue}.maple.ref}{\color{red}2}}}
    child { node[draw, anchor=west] {(*) nom\_calcul{\color{blue}.precision}{\color{red}2}}}
    child { node[draw, anchor=west] {(*) nom\_calcul{\color{blue}.commande}{\color{red}2}}}
    child { node[draw, anchor=west] {(*) nom\_calcul{\color{blue}.verif}{\color{red}2}}}
    child { node[draw, anchor=west] {(*) nom\_calcul{\color{blue}.argument}{\color{red}2}}}
    child { node[draw, anchor=west] {(*) nom\_calcul{\color{blue}.pretrait}{\color{red}2}}}
    child { node[draw, anchor=west] {(*) nom\_calcul{\color{blue}.posttrait}{\color{red}2}}}
    child { node[anchor=west] {.}}
    child { node[anchor=west] {.}}
    child { node[anchor=west] {.}};
\end{tikzpicture}
\hspace*{0.8cm}
\begin{tikzpicture}[%
  grow via three points={one child at (0.5,-0.7) and
  two children at (0.5,-0.7) and (0.5,-1.5)},
  edge from parent path={(\tikzparentnode.south) |- (\tikzchildnode.west)}]
  \node[] {}
    child { node[anchor=west] {.}}
    child { node[anchor=west] {.}}
    child { node[anchor=west] {.}}
    child { node[draw, anchor=west] {nom\_calcul{\color{blue}.CVisu}{\color{red}N}}}
    child { node[draw, anchor=west] {(*) nom\_calcul{\color{blue}.maple.ref}{\color{red}N}}}
    child { node[draw, anchor=west] {(*) nom\_calcul{\color{blue}.precision}{\color{red}N}}}
    child { node[draw, anchor=west] {(*) nom\_calcul{\color{blue}.commande}{\color{red}N}}}
    child { node[draw, anchor=west] {(*) nom\_calcul{\color{blue}.verif}{\color{red}N}}}
    child { node[draw, anchor=west] {(*) nom\_calcul{\color{blue}.argument}{\color{red}N}}}
    child { node[draw, anchor=west] {(*) nom\_calcul{\color{blue}.pretrait}{\color{red}N}}}
    child { node[draw, anchor=west] {(*) nom\_calcul{\color{blue}.posttrait}{\color{red}N}}}
    child[missing] { }
    child { node[draw, anchor=west] {(*) autres fichiers facultatifs}};
    
\end{tikzpicture}\\
\vspace*{0.5cm}
\hfill\small (*) fichiers facultatifs\normalsize
\caption{Contenu d'un répertoire de test}
\label{arbo_repertoire_test}
\end{figure}

La section \ref{subsection_methodologie} propose une méthodologie de travail pour construire un nouveau test. La section \ref{section_commandes_CVS} est un rappel des commandes CVS de base. Les sections \ref{section_fichiers_obligatoires} et \ref{section_fichiers_facultatifs} donnent des informations sur les fichiers obligatoires et les fichiers facultatifs en lien avec l'exécution du test. Notamment, certains fichiers ont un format bien précis pour \^etre exploitables. Ensuite, la section \ref{section_exemples_tests} a pour but de balayer les cas les plus courants de test et de donner des exemples.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Méthodologie}\label{subsection_methodologie}

Avant l'ajout définitif du répertoire de test dans la batterie, il est plus que conseillé de construire pas à pas le test dans un répertoire en dehors du projet CVS. Dans ce répertoire, on pourra tester son fonctionnement sans risquer d'altérer le reste du projet. La méthodologie préconisée est :
\begin{enumerate}[label={\arabic*})]
\item créer un répertoire quelconque (appelons ce répertoire : \verb|rep_tmp|)
\item copier le répertoire \verb|Perl| et le script \verb|verifier_exeHZ.pl| (ou \verb|verifier_exeHZ.zsh|) dans \verb|rep_tmp|
\item choisir un nom de répertoire de test (voir section \ref{subsection_vue_ensemble}) et le créer dans \verb|rep_tmp| (appelons ce répertoire : \verb|Test_R_nom_test|)\\
(au besoin, pour choisir le nom du test :\\
utiliser le script \verb|verif_existence_repertoire_test.pl| au niveau du répertoire \verb|Verif_Herezh/Batterie|)
\item créer tous les fichiers nécessaires au calcul dans \verb|Test_R_nom_test| (voir sections \ref{section_fichiers_obligatoires} et \ref{section_fichiers_facultatifs})\\
\underline{Remarque} : Ne pas hésiter à s'inspirer des répertoires déjà existants dans la batterie
\item se placer dans \verb|rep_tmp| et exécuter le script \verb|verifier_exeHZ.pl(.zsh)|\\
(si le test fonctionne, un rapport de test en bonne et due forme est produit)
\item si il y a un disfonctionnement : modifier les fichiers de calcul jusqu'à ce que le test fonctionne
\item créer le fichier \verb|README| dans \verb|Test_R_nom_test| (voir section \ref{section_fichiers_obligatoires})
\item nettoyer le répertoire \verb|Test_R_nom_test| pour qu'il ne contienne que les fichiers utiles (fichiers définis aux sections \ref{section_fichiers_obligatoires} et \ref{section_fichiers_facultatifs}, voir aussi figure \ref{arbo_repertoire_test})
\item choisir un répertoire de destination dans la batterie (voir section \ref{section_classement_tests})\\
(appelons ce répertoire \verb|rep_dest|)
\item enregistrer le test dans le projet CVS (voir section \ref{section_commandes_CVS}) :
\begin{itemize}
\item[$>$] Recopie du répertoire de test vers le projet :\\
\verb|cp -R rep_tmp/Test_R_nom_test Verif_Herezh/Batterie/.../rep_dest/.|
\item[$>$] Ajout du répertoire sous CVS :\\
\verb|cvs add Verif_Herezh/Batterie/.../rep_dest/Test_R_nom_test|
\item[$>$] Ajout de son contenu :\\
fichiers ASCII : \verb|cvs add ...liste des fichiers ASCII...|\\
fichiers binaire : \verb|cvs add -kb ...liste des fichiers binaires...|\\
\item[$>$] Actualisation définitive du projet CVS en se plaçant dans le répertoire du projet :\\
\verb|cvs commit -m 'ajout nouveau test etc...'|
\end{itemize}
\end{enumerate}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Commandes usuelles CVS}\label{section_commandes_CVS}

\begin{itemize}
\item[$\bullet$] importer le projet : \verb|cvs co -P Verif_Herezh| (*)
\item[$\bullet$] actualiser sa version locale du projet : \verb|cvs update -dP| (**)
\item[$\bullet$] ajouter un fichier ou un répertoire :
\begin{itemize}
\item fichier texte : \verb|cvs add nom_fichier|
\item fichier binaire : \verb|cvs add -kb nom_fichier|
\end{itemize}
\item[$\bullet$] effacer un fichier (***) :
\begin{itemize}
\item[1)] effacer le fichier \verb|nom_fichier|
\item[2)] \verb|cvs remove nom_fichier|
\end{itemize}
\item[]
\item[] \footnotesize (*) l'option \verb|-P| est très recommandée car elle permet de supprimer automatiquement les répertoires vides dès l'import du projet (voir également remarque (***)).
\item[] \footnotesize (**) \underline{Toujours actualiser sa version locale avant de modifier le projet}. Cette commande actualise le répertoire courant ainsi que tous ses sous-répertoires\normalsize
\item[] \footnotesize (***) a priori, c'est la m\^eme démarche pour effacer un répertoire, bien qu'il soit souvent constaté que le répertoire effacé persistait m\^eme si il est vide.\normalsize\\
\end{itemize}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Fichiers obligatoires}\label{section_fichiers_obligatoires}

\subsubsection*{$\bullet$ \texttt{README} :}
1) La trame du fichier est montrée sur la figure \ref{format_fichier_README}. La syntaxe de l'intitulé des deux rubriques obligatoires "But du test" et "Description du calcul" doit \^etre strictement respectée. Il est fortement encouragé de renseigner les rubriques "Auteur" et "Mots-cles". Les autres rubriques sont indiquées à titre de proposition et pour des questions d'harmonie sur la forme d'un test à l'autre. Comme montré sur la figure \ref{format_fichier_README}, chaque titre de rubrique est précédé et suivi d'une ligne d'au moins trois tirets (\verb|---| et plus). Les lignes de tirets  doivent \^etre réservées aux titres des rubriques (Ce motif sert à repérer la fin d'une rubrique. L'insertion d'une ligne de tirets dans le corps d'une rubrique mettra en défaut le script de génération automatique du catalogue de tests!!).\\

2) Dans les rubriques obligatoires, il est possible d'insérer des figures gr\^ace à l'utilisation des balises \verb|\figures:|, \verb|\legende:| et \verb|\fin_legende|. Ces figures appara\^itront dans le catalogue de tests. Une figure est constituée de un ou plusieurs fichiers image et d'une légende. Pour déclarer une figure, la ligne doit commencer par la balise "\verb|\figures:|" suivie du noms des fichiers image (il peut y en avoir plusieurs). Ensuite, sur la m\^eme ligne, on doit trouver la balise de début de légende "\verb|\legende:|". La légende est constituée de tout le texte compris entre les balises "\verb|\legende:|" et "\verb|\fin_legende|". A noter que le texte de cette légende peut \^etre écrit sur plusieurs lignes mais ces retours à la ligne ne seront pas pris en compte dans la mise en forme du document pdf. Les formats d'images sont ceux supportés par \verb|pdflatex| et \verb|\includegraphics|, c'est-à-dire typiquement : \verb|.pdf|, \verb|.png| et \verb|.jpg|. Les fichiers image doivent \^etre situés dans le répertoire du test (c'est-à-dire le m\^eme répertoire que le fichier \verb|README|). Concernant les dimensions des images, il faut savoir que le corps du texte du catalogue pdf a une largeur de 17cm et une hauteur de 24cm. Il est donc nécessaire de soit redimensionner les figures en fonction de ces longueurs, soit indiquer un facteur d'échelle entre crochets à la fin du nom de fichier (pas d'espace entre la fin du nom de fichier et les crochets : \verb|nom_fichier.pdf[0.5]|). On peut également insérer un espace entre 2 figures, tout simplement en mettant une valeur en cm entre crochets et pas de nom de figure (voir exemples ci-dessous).\\
Exemples :\\
\hspace*{0.5cm} $>$ Exemple sur une ligne :\\
     \hspace*{1.5cm} \verb|\figures: maillage.pdf \legende: Aperçu du maillage \fin_legende|\\
\hspace*{0.5cm} $>$ Exemple sur une ligne avec facteur d'échelle de 60\% :\\
     \hspace*{1.5cm} \verb|\figures: maillage.pdf[0.6] \legende: Aperçu du maillage \fin_legende|\\
\hspace*{0.5cm} $>$ Exemple sur une ligne avec 2 figures échelle 40\% et un espace de 1.2cm entre elles :\\
     \hspace*{1.5cm} \verb|\figures: fig_1.pdf[0.4] [1.2] fig_2.pdf[0.4] \legende: ... \fin_legende|\\
\hspace*{0.5cm} $>$ Exemple multilignes :\\
     \hspace*{1.5cm} \verb|\figures: coupe_SIG11.pdf \legende: Vue en coupe de|\\
     \hspace*{1.5cm} \verb|la répartition des contraintes x \fin_legende|\\
\hspace*{0.5cm} $>$ Exemple multilignes avec plusieurs fichiers image :\\
     \hspace*{1.5cm} \verb|\figures: vue_dessus.png vue_cote.png \legende: Vue de dessus|\\
     \hspace*{1.5cm} \verb|(à gauche) et vue de côté (à droite) \fin_legende|\\

3) Dans les rubriques obligatoires, il est possible d'insérer des formules mathématiques Latex entre \$ ou \$\$.\\
Exemples :\\
\hspace*{0.5cm} $>$ caractère mathématique dans le texte :\\
     \hspace*{1.5cm} - dans le \verb|README| :\\
le coefficient de Poisson est \${\textbackslash}nu=0.3\$, ce qui est classique pour un acier\\
     \hspace*{1.5cm} - résultat dans le catalogue :\\
le coefficient de Poisson est $\nu=0.3$, ce qui est classique pour un acier\\
~\\
\hspace*{0.5cm} $>$ formule mathématique écrite après un passage à la ligne :\\
     \hspace*{1.5cm} - dans le \verb|README| :\\
la loi de Hooke 1D s'écrit :\$\${\textbackslash}sigma = E{\textbackslash}varepsilon\$\$\\
     \hspace*{1.5cm} - résultat dans le catalogue :\\
la loi de Hooke 1D s'écrit :$$\sigma = E\varepsilon$$

4) Il est également possible d'écrire du code latex directement en utilisant les balises \verb|\latex_brut| et \verb|\fin_latex_brut|. D'une manière générale, on peut écrire entre ces 2 balises tout ce que Latex accepte dans un corps de document. Les balises \verb|\latex_brut| et \verb|\fin_latex_brut| doivent appara\^itre seules sur une ligne sans aucun autre mot.\\
Exemple :\\
\hspace*{0.5cm} $>$ Exemple de bonne syntaxe :\\
     \hspace*{1.5cm} \verb|\latex_brut|\\
     \hspace*{1.7cm} \verb|ceci est un url : \url{http://....com}|\\
     \hspace*{1.7cm} \verb|ceci est une équation :|\\
     \hspace*{1.7cm} \verb|\begin{equation}|\\
     \hspace*{1.7cm} \verb|\sin{\pi}/2 = 1|\\
     \hspace*{1.7cm} \verb|\end\{equation}|\\
     \hspace*{1.5cm} \verb|\fin_latex_brut|\\
\hspace*{0.5cm} $>$ Exemple de mauvaise syntaxe 1 :\\
     \hspace*{1.5cm} \verb|\latex_brut  ceci est un url : \url{http://....com}  \fin_latex_brut|\\
\hspace*{0.5cm} $>$ Exemple de mauvaise syntaxe 2 :\\
     \hspace*{1.5cm} \verb|L'équation de ce plan s'écrit : \latex_brut|\\
     \hspace*{1.5cm} \verb|\begin{equation}|\\
     \hspace*{1.5cm} \verb|z = 1|\\
     \hspace*{1.5cm} \verb|\end\{equation} \fin_latex_brut|\\

\subsubsection*{$\bullet$ \texttt{.info} :}
\begin{itemize}
\item[] Ce fichier est l'unique fichier d'extension \verb|.info| présent dans le répertoire. Il est obligatoire mais peut \^etre vide (par exemple dans le cas d'un création de fichier \verb|.info| avec l'option Herezh \verb|-n|).\\
Il n'y a pas de restriction majeure sur le contenu de ce fichier mais il est important de noter que dans le cas d'un test avec plusieurs fichiers \verb|.CVisu|, chaque calcul ultérieur au n°1 tentera de faire un \verb|RESTART| du calcul précédent. C'est pourquoi il faut faire attention au paramètre \verb|controle|$\rightarrow$\verb|SAUVEGARDE|. Le paramètre suffisant est :\\
\hspace*{2cm}\begin{minipage}{\textwidth}
\begin{verbatim}

controle
    SAUVEGARDE  DERNIER_CALCUL
  
\end{verbatim}
\end{minipage}
Si le calcul utilise un menu interactif, un fichier \verb|.commande| sera nécessaire.\\
\end{itemize}

\subsubsection*{$\bullet$ \texttt{.CVisu[i]} :}
\begin{itemize}
\item[] La présence de ces fichiers est obligatoire mais ils peuvent \^etre vides à partir du moment où le but du test n'est pas de comparer des résultats Herezh maple ou Gmsh
\end{itemize}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Fichiers facultatifs en rapport avec l'exécution du test}\label{section_fichiers_facultatifs}



%%
\subsubsection*{$\bullet$ \texttt{.precision} :}
\begin{itemize}
\item[] Ce fichier permet de modifier les précisions par défaut pour la comparaison des données au format maple pour un certain nombre de colonnes du fichier \verb|.maple|. Par défaut, les précisions sont 1e-6 en absolu, 1e-3 en relatif. Le format du fichier est le suivant :\\
\hspace*{2cm}\begin{minipage}{\textwidth}
\begin{verbatim}

#eventuellement des commentaires...
[no colonne]   prec_absolue  prec_relative
  .
  .
  .
#eventuellement des commentaires...
[no colonne]   prec_absolue  prec_relative

\end{verbatim}
\end{minipage}
Il est important de noter que les crochets autour d'un numéro de colonne sont obligatoires. Par exemple, si le fichier \verb|.maple| contient une ligne de la forme :\\
\hspace*{2cm}\begin{minipage}{\textwidth}
\begin{verbatim}

temps X Y Z SIG11

\end{verbatim}
\end{minipage}
Il est possible de modifier les précisions uniquement pour la colonne 5 avec le fichier \verb|.precision| suivant :\\
\hspace*{2cm}\begin{minipage}{\textwidth}
\begin{verbatim}

#precisions pour la contrainte SIG11
#          absolue   relative
[5]         1.e-2      5.e-2

\end{verbatim}
\end{minipage}
\end{itemize}

%%
\subsubsection*{$\bullet$ \texttt{.commande} :}
\begin{itemize}
\item[] Le but de ce fichier est de fournir automatiquement les réponses à un menu interactif. Sa présence équivaut à lancer un calcul Herezh++ de la manière suivante :\\
\hspace*{2cm}\begin{minipage}{\textwidth}
\begin{verbatim}

HZppfast [-f|-n] nom_calcul.info < nom_calcul.commande

\end{verbatim}
\end{minipage}

Chaque ligne contient une réponse suivie par un retour à la ligne. En particulier, il ne faut pas oublier le retour à la ligne à la fin de la dernière ligne.\\
\end{itemize}

%%
\subsubsection*{$\bullet$ \texttt{.verif} :}
\begin{itemize}
\item[] Ce fichier est un exécutable dont la fonction est de fournir le résultat de la vérification. Il doit effectuer les traitements nécessaires pour déterminer si le test est \verb|OK| ou \verb|ECHEC|. Le contenu du script est totalement libre mais il doit obligatoirement indiquer le résultat de la vérification en affichant une des 2 lignes suivantes :
\hspace*{2cm}\begin{minipage}{\textwidth}
\begin{verbatim}

resultat verification : OK
resultat verification : ECHEC

\end{verbatim}
\end{minipage}

En plus de cette ligne, cet exécutable peut tout à fait afficher d'autres informations à titre facultatif.\\

Il est important de noter que cet exécutable reçoit 3 arguments lorsqu'il est appelé. Le programmeur pourra donc utiliser s'il le souhaite les arguments suivants :

\noindent\rule{0.8\textwidth}{0.5pt}\\
\hspace*{2cm}\begin{minipage}{0.6\textwidth}
\begin{itemize}
\item[- argument 1 :] nom de l'exécutable Herezh++ (en chemin absolu)
\item[- argument 2 :] nom du fichier de redirection de l'affichage du calcul Herezh++ (fichier \verb|.log|)
\item[- argument 3 :] nom du fichier \verb|.info|
\end{itemize}
\end{minipage}
\noindent\rule{0.8\textwidth}{0.5pt}\\

Cet exécutable peut \^etre programmé dans n'importe quel langage, mais pour éviter les problèmes de compilateur, il est préférable d'éviter les langages nécessitant une compilation (par exemple : C, C++, Fortran, etc...). Il est préférables d'utiliser les langages interprétés (par exemple : sh, zsh, Perl, Python, etc...). Pour augmenter la portabilité de ces scripts, il faut éviter de mettre un chemin absolu vers l'interpréteur dans l'en-t\^ete. On utilisera la forme : \verb|#!/usr/bin/env| suivi du nom de l'interpréteur (exemples : \verb|#!/usr/bin/env perl| ou bien \verb|#!/usr/bin/env python|).

\end{itemize}

%%
\subsubsection*{$\bullet$ \texttt{.argument} :}
\begin{itemize}
\item[] Ce fichier permet de définir librement les arguments donnés à l'exécutable Herezh++. Il peut contenir autant de lignes que nécessaire. Il est important de noter que l'affichage produit par Herezh++ est toujours redirigé dans un fichier \verb|.log| avec la commande \verb|tee|. Il est donc inutile voire bloquant de rajouter une redirection supplémentaire parmi les arguments. Au final, pour un fichier contenant N lignes, la commande Herezh++ lancée sera :\\
\hspace*{2cm}\begin{minipage}{\textwidth}
\begin{verbatim}

HZppfast ligne_1 ligne_2 ... ligne_N | tee nom_calcul.log

\end{verbatim}
\end{minipage}
\end{itemize}

%%
\subsubsection*{$\bullet$ \texttt{.maple.ref} :}
\begin{itemize}
\item[] Ce fichier est utile pour la comparaison de données au format maple. Le nombre de colonnes de ce fichier doit \^etre en accord avec le fichier \verb|.maple| produit par la lecture du \verb|.CVisu| associé. Il peut contenir un nombre quelconque de lignes de données mais seule la dernière sera utilisée pour la comparaison de \verb|.maple| explicitée à la section \ref{subsubsection_verification}.
\end{itemize}

%%
\subsubsection*{$\bullet$ \texttt{.pretrait} :}
\begin{itemize}
\item[] Le but de ce fichier est d'effectuer des traitements juste \bf avant \rm le calcul. Ce fichier doit \^etre un exécutable programmé dans un langage quelconque mais le mieux est de suivre les m\^emes recommandations que pour le fichier \verb|.verif|. Le script \verb|.pretrait| fournit un indicateur de réussite ou d'échec. Il doit donc afficher une des 2 lignes suivantes :\\
\hspace*{2cm}\begin{minipage}{\textwidth}
\begin{verbatim}

resultat pretrait : OK
resultat pretrait : ECHEC

\end{verbatim}
\end{minipage}

Ce script reçoit 2 arguments :\\
\noindent\rule{0.8\textwidth}{0.5pt}\\
\hspace*{2cm}\begin{minipage}{0.6\textwidth}
\begin{itemize}
\item[- argument 1 :] nom de l'exécutable Herezh++ (en chemin absolu)
\item[- argument 2 :] nom du fichier \verb|.info|
\end{itemize}
\end{minipage}
\noindent\rule{0.8\textwidth}{0.5pt}\\
\end{itemize}

%%
\subsubsection*{$\bullet$ \texttt{.posttrait} :}
\begin{itemize}
\item[] Le but de ce fichier est d'effectuer des traitements juste \bf après \rm le calcul. Il suit la m\^eme logique que le fichier \verb|.pretrait| avec 3 différences : 1) le message de réussite/échec n'a pas la m\^eme syntaxe, 2) il reçoit 3 arguments, 3) il est exécuté après le calcul Herezh++. Ce fichier doit \^etre un exécutable programmé dans un langage quelconque mais le mieux est de suivre les m\^emes recommandations que pour le fichier \verb|.verif|. Le script \verb|.posttrait| fournit un indicateur de réussite ou d'échec. Il doit donc afficher une des 2 lignes suivantes :\\
\hspace*{2cm}\begin{minipage}{\textwidth}
\begin{verbatim}

resultat posttrait : OK
resultat posttrait : ECHEC

\end{verbatim}
\end{minipage}

Ce script reçoit 3 arguments :\\
\noindent\rule{0.8\textwidth}{0.5pt}\\
\hspace*{2cm}\begin{minipage}{0.6\textwidth}
\begin{itemize}
\item[- argument 1 :] nom de l'exécutable Herezh++ (en chemin absolu)
\item[- argument 2 :] nom du fichier \verb|.info|
\item[- argument 3 :] nom du fichier de redirection de l'affichage du calcul Herezh++ (fichier \verb|.log|)
\end{itemize}
\end{minipage}
\noindent\rule{0.8\textwidth}{0.5pt}\\
\end{itemize}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Exemples de tests}\label{section_exemples_tests}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsubsection{Calcul classique : comparaison de données maple}\label{section_exemple_test_1}

Il s'agit du cas le plus courant consistant à réaliser des calculs générant des données au format maple à comparer avec les données contenues dans un fichier \verb|.maple.ref|. Les fichiers \verb|.CVisu|[i] définissent des sorties au format maple. Le calcul n°[i] utilise le fichier \verb|.CVisu|[i] pour générer un fichier \verb|.maple| qui sera comparé au fichier \verb|.maple.ref|[i] qui doit contenir exactement le m\^eme nombre de colonnes que le fichier \verb|.maple|.\\

Le fichier \verb|.info| doit générer automatiquement les sorties maple en choisissant parmi les 2 possibilités suivantes :
\begin{itemize}
\item[1-] lecture automatique : \verb|TYPE_DE_CALCUL|$\rightarrow$\verb|avec plus lectureCommandesVisu|
\item[2-] sortie au fil du calcul : \verb|para_affichage|$\rightarrow$\verb|FREQUENCE_SORTIE_FIL_DU_CALCUL|\\
\end{itemize}

 A noter que quelque soit la fréquence de sortie des résultats, seule la dernière ligne de données du fichier \verb|.maple| est vérifiée.\\

Le test \verb|Batterie/FONCTION_UNIQUE/TYPE_DE_CALCUL/Test_R_non_dynamique| est un exemple de calcul classique utilisant les précisions par défaut pour la comparaison des données.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsubsection{Calcul utilisant un fichier de commandes interactives}\label{section_exemple_test_2}

Le test \verb|Batterie/FONCTION_UNIQUE/UTILITAIRES/Test_R_fusion-maillage| est un exemple de calcul utilisant un fichier de commandes interactives (réponses au menu interactif de l'utilitaire "\verb|avec plus fusion_maillages|"). Ce fichier spécial est le fichier d'extension \verb|.commande1|.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsubsection{Calcul utilisant un script libre de vérification}\label{section_exemple_test_3}

Le test \verb|Batterie/FONCTION_UNIQUE/UTILITAIRES/Test_R_suppression-noeuds-non| \verb|-references| est un exemple de calcul utilisant un script de vérification (comparaison entre deux fichiers \verb|.her|). Ce fichier spécial est le fichier d'extension \verb|.verif1|.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsubsection{Calcul consistant à créer un fichier .info (Herezh -n)}\label{section_exemple_test_4}

Le script \verb|Perl/test.pl| lance un calcul Herezh++ avec l'option \verb|-n| si le fichier \verb|.info| ne contient pas le mot-clé \verb|dimension|. Pour cela, on crée simplement un fichier \verb|.info| vide. Un fichier \verb|.commande| sera forcément nécessaire pour répondre au menu interactif de création.

Il ne s'agit pas d'un calcul classique. Donc, sauf cas particulier, la vérification sera faite via un script \verb|.verif| afin de comparer le fichier \verb|.info| créé à un fichier \verb|.info| de référence. Attention au fait que le fichier \verb|.info| de référence ne doit pas avoir l'extension \verb|.info| car il ne peut y avoir qu'un seul fichier \verb|.info| dans le répertoire. On peut par exemple utiliser l'extension \verb|.info.ref1|.\\

Actuellement, il n'y a pas d'exemple dans le répertoire \verb|Batterie| mais l'arborescence pour ce genre de test devrait avoir la forme suivante :\\
\hspace*{2cm}\begin{minipage}{\textwidth}
\vspace*{0.2cm}
\begin{tikzpicture}[%
  grow via three points={one child at (0.5,-0.7) and
  two children at (0.5,-0.7) and (0.5,-1.5)},
  edge from parent path={(\tikzparentnode.south) |- (\tikzchildnode.west)}]
  \node[draw] {Test\_[RL]\_nom\_repertoire}
    child { node[draw, anchor=west] {README}}
    child { node[draw, anchor=west] {nom\_calcul{\color{blue}.info} (fichier vide)}}
    child[missing] { }
    child { node[draw, anchor=west] {nom\_calcul{\color{blue}.CVisu}{\color{red}1} (fichier vide)}}
    child { node[draw, anchor=west] {nom\_calcul{\color{blue}.commande}{\color{red}1}}}
    child { node[draw, anchor=west] {nom\_calcul{\color{blue}.verif}{\color{red}1}}}
    child[missing] { }
    child { node[draw, anchor=west] {nom\_calcul.info.ref1}};
\end{tikzpicture}
\end{minipage}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsubsection{Exemple complexe effectuant des pré-traitements et des post-traitements}\label{section_exemple_test_5}

Il est parfois utile d'exécuter des actions avant et/ou après le calcul Herezh++. Les fichiers \verb|.pretrait| et \verb|.posttrait| sont là dans ce but. La séquence sera :
\begin{itemize}
\item[1)] lancement du script \verb|.pretrait| (+ vérification de la réussite de ce script)
\item[2)] lancement du calcul Herezh
\item[3)] lancement du script \verb|.posttrait| (+ vérification de la réussite de ce script)
\item[4)] Vérification du calcul par les moyens habituels (comparaison \verb|.maple.ref|, script \verb|.verif|, pas de vérification, etc...)\\
\end{itemize}

Le script \verb|.pretrait| peut par exemple servir à modifier des paramètres dans le fichier \verb|.info| avant le calcul. Mais on peut aussi imaginer d'autres situations plus complexes. 

Par exemple le test \verb|Batterie/FONCTION_UNIQUE/LOI_DE_COMP|ORTE\-\verb|MENT/Test_R_LOI_VIA_UMAT_1| est un test nécessitant un pré et un post-traitement pour réaliser un dialogue entre 2 processus Herezh++. La vérification est une comparaison classique de résultats \verb|.maple|. Cet exemple très particulier montre que l'on peut lancer un autre calcul Herezh++ dans un script \verb|.pretrait| ou \verb|.posttrait| (attention : il faut s'assurer que ce processus ne tournera plus après la fin du test).


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Actualisation du catalogue de tests}\label{section_actualisation_catalogue_tests}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsubsection{Principe}
Le document \verb|catalogue_tests.pdf| présent à la racine du projet CVS est construit sur la base du fichier \verb|README| présent dans chaque répertoire de test. Ce fichier pdf est créé via \LaTeX. Le script \verb|genere_catalogue_tests.pl|, présent dans le répertoire \verb|Perl|, automatise le traitement en regroupant le contenu des fichiers \verb|README| au sein d'un fichier \verb|.tex| qui est ensuite compilé avec la commande \verb|pdflatex|.

Une fois un nouveau test pr\^et à l'emploi avec un fichier \verb|README| conforme, l'utilisateur peut actualiser ce catalogue en exécutant le script \verb|genere_catalogue_tests.pl|. Ce script recherche tous les répertoires de test depuis son répertoire de lancement. Cela veut dire que l'utilisateur peut très bien tester, dans un répertoire séparé, si ce script fonctionne correctement pour son nouveau test avant d'actualiser la totalité du catalogue. Notamment, si le fichier \verb|README| contient une insertion de figure, cela permet de tester au préalable si les dimensions de la figure sont bien configurées.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsubsection{Exécution}
Pour exécuter le script \verb|genere_catalogue_tests.pl|, les commandes suivantes doivent \^etre disponibles :
\begin{itemize}
\item[-] \verb|pdflatex|
\item[-] \verb|makeindex|
\end{itemize}
~\\
La procédure de lancement dans un terminal est :
\begin{itemize}
\item[1-] se placer dans un répertoire contenant des tests et le répertoire \verb|Perl|
\item[2-] exécuter le script \verb|Perl/genere_catalogue_tests.pl|
\end{itemize}
~\\
Si tout se passe normalement, le fichier \verb|catalogue_tests.pdf| a été créé dans le répertoire de lancement du script. La version finale actualisée du catalogue (celle regroupant l'ensemble des tests) doit \^etre placée à la racine du projet CVS.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsubsection{Procédure en cas d'erreur}

Il est possible que la commande \verb|pdflatex| rencontre des problèmes pour générer le fichier pdf. Tout ce qui met en défaut une compilation \LaTeX{} avec \verb|pdflatex| provoquera un échec. Les problèmes possibles identifiés à l'heure actuelle sont :
\begin{itemize}
\item[-] des caractères ou un encha\^inement de caractères ingérables par \LaTeX{} sont présents dans un fichier \verb|README|
\item[-] problème d'accès aux librairies. Une compilation \LaTeX{} requiert la présence de certaines librairies, et parfois ces librairies ne sont pas présentes sur la machine de l'utilisateur.
\end{itemize}
~\\
En cas de problème, le script \verb|genere_catalogue_tests.pl| signale l'échec de la création du fichier pdf et fournit deux fichiers :
\begin{itemize}
\item[-] \verb|catalogue_tests.tex|
\item[-] \verb|catalogue_tests.error_log|
\end{itemize}
~\\
A partir de ces deux fichiers, l'utilisateur peut commencer un débuggage manuel. Le fichier \verb|catalogue_tests.tex| est le fichier source pr\^et à la compilation (avec \verb|pdflatex| ou n'importe quel autre moyen pour compiler un fichier \LaTeX). Le fichier \verb|catalogue_tests.error_log| contient l'affichage qui a été produit par \verb|pdflatex|, ce qui permet de prendre connaissance des éventuels message d'erreur. En première approche, le script \verb|genere_catalogue_tests.pl| affiche dans le terminal certaines lignes de ce fichier \verb|.error_log| (celle contenant le mot \verb|error|).\\

\color{blue}
\noindent\bf Remarque importante :\rm\\
\indent Le fichier \verb|catalogue_tests.tex| étant pr\^et à la compilation, il est tout à fait possible de s'en servir pour aboutir manuellement à la création du fichier \verb|catalogue_tests.pdf|. Il n'est pas absolument indispensable que ce fichier pdf soit créé par une exécution sans erreur du script \verb|genere_catalogue_tests.pl|. Néanmoins, merci de signaler tout problème d'exécution.
\color{black}
~\\

La figure \ref{exemple_erreur_genereation_catalogue} montre un exemple d'affichage produit en cas d'erreur.


\begin{figure}[H]
\footnotesize
\begin{verbatim}
Erreur (prog:genere_catalogue_tests.pl) : erreur a l execution de pdflatex
        Les fichiers suivants ont ete crees pour chercher manuellement la source de l erreur :
              - catalogue_tests.tex (fichier .tex pret a la compilation)
              - catalogue_tests.error_log (affichage renvoye par pdflatex)

         (vous pouvez essayer de compiler vous-meme le fichier .tex pour
          finaliser la creation du catalogue)

        Notamment, le fichier catalogue_tests.error_log contient les erreurs :
-------------------------------------------------------------------------------------------------
 > ! LaTeX Error: File `subfiguressss.sty' not found.
 > Package: infwarerr 2010/04/08 v1.3 Providing info/warning/error messages (HO)
 > ! LaTeX Error: File `subfiguressss.sty' not found.
-------------------------------------------------------------------------------------------------
\end{verbatim}
\normalsize
\caption{Exemple d'erreur produit par le script \texttt{genere\_catalogue\_test.pl} (cas d'une librairie .sty introuvable)}
\label{exemple_erreur_genereation_catalogue}
\end{figure}



%%
\clearpage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{FAQ} \label{section_FAQ}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\subsection{Les tests ne se lancent pas correctement (problème d'exécution)}
Compte-tenu des diverses architectures des machines utilisateur, il est possible que certains détails manquent au bon fonctionnement (informatiquement parlant). Voici une liste des causes possibles :
\begin{itemize}[label=\textbullet]
\item la variable environnement \verb|PATH| ne contient pas le chemin vers le répertoire courant ./ :\\
\hspace*{0.5cm} $\Rightarrow$ Il faut ajouter le caractère "." à votre variable environnement \verb|PATH|
\item le répertoire \verb|/tmp| n'existe pas (Les tests sont lancés dans ce répertoire) :\\
\hspace*{0.5cm} $\Rightarrow$ Pour résoudre ce problème, cela suppose une modification des programmes actuels. Contactez un membre approprié du projet pour signaler ce besoin
\item votre machine n'a pas la commande \verb|tcsh| :\\
\hspace*{0.5cm} $\Rightarrow$ Tapez "\verb|which tcsh|" dans un terminal. Si il n'y a aucun résultat ou un affichage du style "\verb|not found|", la commande \verb|tcsh| n'existe pas. Installez-là car elle est indispensable au fonctionnement
\end{itemize}





%%
\clearpage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Évolution des mises à jour}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{itemize}

\item[$\bullet$] 2015-06-29 (Julien Troufflard) :
\begin{itemize}
\item[-] création d'un nouveau script (\verb|Perl/genere_catalogue_tests.pl|). Il génère automatiquement une documentation sur les tests (résumé et index pour recherche par mots-clés). Ce document est placé à la racine du projet sous le nom \verb|documentation_tests.pdf|. Le mode de fonctionnement (lecture des fichiers README de chaque test) impose une nouvelle contrainte sur la forme des fichiers README (interdiction d'utiliser des lignes de 3 tirets ou plus dans le corps d'une rubrique README car ce motif signifie la fin d'une rubrique). Cette contrainte est le choix actuel mais peut \^etre modifié à tout moment en définissant une balise de fin de rubrique à utiliser dans les fichiers README (par exemple : \verb|fin_rubrique|) et en indiquant sa syntaxe dans la variable \verb|$MOTIF_FIN_RUBRIQUE| du script \verb|Perl/genere_catalogue_tests.pl|.\\
\item[-] Apparition d'une nouvelle rubrique README : \it Auteur \rm (renseigne le ou les auteurs du test avec prénom, nom, adresse mail). rubrique qui appara\^it dans la documentation des tests.
\end{itemize}%tiret

~\\
\item[$\bullet$] 2015-07-13 (Julien Troufflard) :
\begin{itemize}
\item[-] changement du nom du fichier de catalogue de tests (désormais s'appellera \verb|catalogue_test.pdf| au lieu de \verb|documentation_tests.pdf|)\\
\item[-] le fichier .pdf de la document utilisateur principale est désormais archivé sous CVS. Il s'appelle \verb|doc_procedure_verification.pdf| et est placé à la racine du projet (il s'agit simplement du fichier généré par \verb|Doc/doc_procedure_verification.tex|)
\end{itemize}%tiret

~\\
\item[$\bullet$] 2015-07-15 (Julien Troufflard) :
\begin{itemize}
\item[-] ajout d'une nouvelle version du script de lancement de la batterie. Cette nouvelle version en Perl s'appelle \verb|verifier_exeHZ.pl|. Elle reproduit la m\^eme chose que la version actuelle en zsh mais propose en plus des options pour éviter de lancer tous les tests. La version précédente \verb|verifier_exeHZ| est conservée mais renommée en \verb|verifier_exeHZ.zsh|. A terme, cette version zsh sera supprimée du projet CVS.
\end{itemize}%tiret

~\\
\item[$\bullet$] 2015-07-16 (Julien Troufflard) :
\begin{itemize}
\item[-] modif du script de génération automatique du catalogue de tests (script \verb|Perl/genere_catalogue_tests.pl|). Désormais, il est possible d'insérer des figures via une syntaxe par balises dans les fichiers README des tests. La méthode est expliquée à la section \ref{section_fichiers_obligatoires} "Fichiers obligatoires" (fichier \verb|README|)\\
\item[-] ajout du script \verb|Perl/verif_existence_repertoire_test.pl|. Permet de savoir si un nom de répertoire de test existe déjà dans la batterie. Est utile au moment de l'ajout d'un nouveau test pour aider à choisir le nom et éviter de choisir un nom déjà existant (m\^eme si ce n'est pas dans le m\^eme répertoire de destination car le catalogue des tests ne tient pas compte du chemin complet). Explication de son utilisation à la section \ref{subsection_vue_ensemble}\\
\item[-] méthodologie pour ajouter un nouveau test : il n'y avait aucune section exposant clairement les étapes à suivre pour créer et ajouter un test, d'où la création de la section \ref{subsection_methodologie}
\end{itemize}%tiret

~\\
\item[$\bullet$] 2015-09-29 (Julien Troufflard) :
\begin{itemize}
\item[-] modif du script \verb|Perl/verifier_exeHZ.pl| : le package \verb|Term::ReadKey| n'est pas forcément installé sur toutes les machines. Pour éviter d'\^etre pénalisé par ce package, son existence est vérifiée via la subroutine \verb|check_install| du package  \verb|Module::Load::Conditional| et, si il existe, l'appel à \verb|Term::ReadKey| est fait via \verb|require| au lieu de \verb|use|. Cette manière de faire pourra \^etre appliquée partout où il y a un doute sur l'existence d'un package et définir ainsi un moyen de contourner l'absence d'un package.\\
\item[-] modif du script \verb|Perl/test.pl| : il y avait une faille dans la subroutine \verb|lancement_commande|. Sur certaines machines, la redirection \verb|tee| ne se fait pas instantanément. Ceci conduisait à croire que le fichier de redirection n'était pas créé et donc renvoyait un problème lié à la redirection de l'affichage. Désormais, un délai est accordé pour attendre la création de ce fichier (environ 2 secondes maximum avec un check de l'existence du fichier de redirection toutes les millisecondes). De manière indirecte, ceci a conduit à créer un nouvel indicateur de status pour signaler si le calcul ne se lance pas (\verb|probleme lancement calcul|).
\end{itemize}%tiret

~\\
\item[$\bullet$] 2015-09-30 (Julien Troufflard) :
\begin{itemize}
\item[-] modif de l'en-t\^ete de tous les scripts perl (y compris les \verb|.verif| de la batterie) : amélioration de la portabilité en modifiant le shebang selon \url{https://en.wikipedia.org/wiki/Shebang_\%28Unix\%29#Portability}. Désormais, les scripts commencent par \verb|#!/usr/bin/env perl| au lieu du chemin absolu \verb|#!/usr/bin/perl| qui pourrait ne pas fonctionner sur certaines machines à l'architecture atypique (et actualisation de la section \ref{section_fichiers_facultatifs} pour signaler cette habitude à prendre pour les fichiers \verb|.verif|).\\
remarque : modif également pour le script zsh \verb|verifier_exeHZ.zsh|
\end{itemize}%tiret

~\\
\item[$\bullet$] 2015-11-24 (Julien Troufflard) :
\begin{itemize}
\item[-] modif script \verb|Perl/genere_catalogue_tests.pl| :\\
1) possibilité d'insérer un espace "{\textbackslash}hspace" entre les figures \verb|\figures| (voir section \ref{section_fichiers_obligatoires} concernant le fichier \verb|README|)\\
2) possibilité d'insérer des formules et caractères mathématiques dans les fichiers \verb|README| entre simples \$ ou doubles \$\$ (voir section \ref{section_fichiers_obligatoires} concernant le fichier \verb|README|)
\end{itemize}%tiret

~\\
\item[$\bullet$] 2015-11-25 (Julien Troufflard) :
\begin{itemize}
\item[-] modif script \verb|Perl/genere_rapport.pl| : modifification de l'en-t\^ete du rapport de tests avec notamment l'affichage du nom de la machine (via variable environnement \$HOST)
\item[-] modif script \verb|Perl/test.pl| :\\
  1) gestion de bugs et améliorations diverses :\\
    - remplacement de "\verb|cp -nf|" par l'encha\^inement "\verb|rm -f|" + "\verb|cp|" (car dans certaines versions de \verb|cp|, l'option \verb|-n| n existe pas)\\
    - modification majeure : désormais, un test s'éxecute dans un repertoire de travail sur \verb|/tmp| (voir variable \verb|$repertoire_de_travail|). L'intér\^et majeur est de ne jamais modifier le répertoire d'origine du test quelque soit le déroulement du test. Cette stratégie permet actuellement d'interrompre la batterie avec \verb|ctrl+c| sans conséquence sur le contenu des répertoires de test (voir procédure d'interruption à la section \ref{section_lancement_batterie_tests}). De plus, une conséquence indirecte bénéfique de ceci est que m\^eme quand un test se déroule correctement, il se pouvait que certains fichiers soient légèrement modifiés (par exemple : le numéro de version Herezh en en-t\^ete du fichier \verb|cube_soude.her| du test \verb|FONCTION_UNIQUE/UTILITAIRES/Test_R_fusion-noeuds-voisins|). En conséquence, cela générait un archivage CVS supplémentaire avec envoi intempestif d'un mail aux membres du projet pour chacun de ces fichiers, alors qu'en realité, ils n'étaient pas fondamentalement et sciemment modifiés. Ce problème mineur est désormais résolu.\\
   - comparaison maple : désormais, si toutes les grandeurs d'un test sont OK, un affichage allégé est produit dans le rapport (juste une ligne pour indiquer que toutes les grandeurs sont OK sans détailler les comparaisons)\\
  2) affichage des temps de calcul :\\
    - dans la subroutine \verb|lancement_commande()| : lancement de Herezh via la tournure \verb/tsch -c "time HZ -f fic.info" | tee fic.log/ pour récuperer le temps CPU dans le fichier .log (l'utilisation de \verb|tcsh -c|, c'est uniquement pour que le résultat de \verb|time| soit bien récupéré sur \verb|STDOUT|, donc dans \verb|fic.log|)\\
    - juste après l'appel à \verb|lancement_commande()| $\Rightarrow$ saisie du temps de calcul dans le \verb|.log| et affichage dans le rapport de test (juste après le nom du test)
\end{itemize}%tiret

~\\
\item[$\bullet$] 2015-11-25(bis) (Julien Troufflard) :
\begin{itemize}
\item[-] modif scripts \verb|Perl/genere_catalogue_tests.pl| et \verb|Perl/genere_rapport.pl| : suppression de l'option \verb|-s| dans le shebang (inutile et en plus génère un bug sur Linux quand on utilise la tournure \verb|#/usr/bin/env perl -s|)
\item[-] modif script \verb|Perl/test.pl| :\\
- remplacement de la subroutine \verb|return_nb_decimales()| par la subroutine \verb|return_nb_decimales_first()| (m\^eme chose mais en mieux : renvoie la position de la première décimale non nulle au lieu du nombre total de décimales). Pour rappel, ce traitement n'a pas pour but d'arrondir les résultats pour la comparaison. Il s'agit juste d'un arrondi à but cosmétique pour afficher, dans le rapport, la grandeur avec un nombre de décimales adapté à la précision.\\
- comparaison maple :\\
1) modification de la comparaison pour gérer le cas où le nombre est très petit (par exemple : 1.e-15 comparé à 1.e-30 génère une erreur relative énorme). Ce problème avait été déjà pensé dans la version historique de la vérification Herezh (Laurent Mahéo) mais malheureusement non traité dans la nouvelle version. Désormais, on traite ce problème en arrondissant les grandeurs à 1.e-12 près.\\
2) correction d'une erreur dans la comparaison absolue : par erreur, la comparaison se faisait toujours par rapport à la précision absolue par défaut (\verb|$PREC_ABSOLU|) sans tenir compte de l'éventuelle modification par fichier \verb|.precision|
\end{itemize}%tiret

~\\
\item[$\bullet$] 2016-02-12 (Julien Troufflard) :
\begin{itemize}
\item[-] modif script \verb|Perl/genere_catalogue_tests.pl| :\\
1) suppression du lancement de la commande \verb|makeindex| (en fait, le package imakeidx lance déjà cette commande sous forme d'un appel system par Latex lui-e\^eme. Cette opération était donc redondante)\\
2) meilleure gestion des erreurs de compilation pdflatex :\\
    \begin{itemize}
    \item[$>$] utilisation de l'option \verb|-interaction=nonstopmode| en plus de \verb|-halt-on-error|, ce qui évite à pdflatex de s'arr\^eter sans rendre la main en cas d'absence de fichiers (package .sty introuvable, fichier image introuvable avec \verb|\includegraphics|, etc...)
    \item[$>$] le script fournit à l'utilisateur le fichier \verb|catalogue_tests.tex| pr\^et à la compilation. Ce qui permet d'une part de chercher manuellement la source des erreurs de compilation, et d'autre part, de donner la possibilité à l'utilisateur de terminer manuellement la compilation du catalogue de tests m\^eme si \verb|Perl/genere_catalogue_tests.pl| n'a pas pu aller jusqu'au bout.
    \end{itemize}
\item[-] ajout dans la documentation d'un paragraphe concernant la génération du catalogue de tests (section \ref{section_actualisation_catalogue_tests})
\item[-] ajout dans la documentation d'un paragraphe regroupant les personnes référentes à contacter (section \ref{section_personnes_referentes})
\end{itemize}%tiret

~\\
\item[$\bullet$] 2016-03-11 (Julien Troufflard) :
\begin{itemize}
\item[-] modif des scripts \verb|verifier_exeHZ.pl| et \verb|Perl/test.pl| dans le but de permettre un arr\^et Ctrl-c propre en cours de batterie :\\
pour ces 2 scripts, une gestion des signaux d'interruption \verb|INT| et \verb|TERM| a été introduite (subroutine \verb|arret_force()| et un fichier (texte) temporaire est utilisé pour permettre un dialogue entre les 2 processus (fichier de nom \verb|//tmp/verifier_exeHZ_2_test_$PID.com/| où \verb|$PID| est le pid du processus \verb|verifier_exeHZ.pl|). Un nouveau status de test existe désormais dans le rapport de test : \verb|ECHEC : ***INTERRUPTION PAR L UTILISATEUR***|. A noter que le rapport de test est tout de m\^eme généré en bonne et due forme pour les tests déjà terminés avant Ctrl-c (mais le rapport n'est pas automatiquement affiché). A noter également que, étant données les modifs de \verb|Perl/test.pl|, l'interruption \verb|ctrl+c| n'est pas trop mal avec la version \verb|zsh| \verb|verifier_exeHZ.zsh| mais c'est tout de m\^eme moins bien ma\^itrisé (à éviter).
\item[-] la section \ref{section_lancement_batterie_tests} de ce document a été divisé en 2 sous-sections. Une section est dédiée à la procédure d'interruption \verb|ctrl+c| (pour expliquer mais aussi pour pointer du doigt le fait qu'une interruption volontaire n'est pas toujours une opération sans conséquences).
\end{itemize}%tiret

~\\
\item[$\bullet$] 2016-03-24 (Julien Troufflard) :
\begin{itemize}
\item[-] modif du script \verb|Perl/test.pl| : ajout de la possibilité de faire des traitements avant et après calcul via un script \verb|.pretrait| et \verb|.posttrait| (voir section \ref{section_fichiers_facultatifs})
\end{itemize}%tiret

~\\
\item[$\bullet$] 2016-07-01 (Julien Troufflard) :
\begin{itemize}
\item[-] ajout d'une section FAQ dans cette doc (section \ref{section_FAQ})
\item[-] modif du script \verb|Perl/test.pl| : affichage du répertoire de travail dans le terminal (répertoire \verb|$repertoire_de_travail|)
\end{itemize}%tiret

~\\
\item[$\bullet$] 2016-08-30 (Julien Troufflard) :
\begin{itemize}
\item[-] modif du script \verb|Perl/genere_catalogue_tests.pl| : Désormais, on peut écrire directement du code latex dans les fichiers \verb|README| en utilisant les balises \verb|\latex_brut| et \verb|\fin_latex_brut| (voir section \ref{section_fichiers_obligatoires})
\end{itemize}%tiret

~\\
\item[$\bullet$] 2016-09-07 (Julien Troufflard) :
\begin{itemize}
\item[-] ajout d'un nouveau répertoire dans l'arborescence : le répertoire \verb|Tests_en_attente_debug/| est créé dans le but d'y placer des nouveaux tests qui ne fonctionnent pas encore. Ils sont en attente de debuggage pour \^etre à terme déplacés dans un endroit approprié du répertoire \verb|Batterie/| une fois résolu. \bf {\color{red} Attention :} \rm il s'agit bien d'y placer des \underline{nouveaux} tests qui ne marchent pas encore. Il n'est pas question d'y déplacer d'anciens tests déjà présents dans \verb|Batterie/| sous le prétexte qu'ils ne fonctionnent plus suite à un changement de version Herezh
\item[-] modif des scripts \verb|verifier_exeHZ.pl|, \verb|verifier_exeHZ.zsh|, \verb|Perl/genere_catalogue_tests.pl|, \verb|Perl/verif_existence_repertoire_test.pl| : on omet le répertoire \verb|Tests_en_attente_debug/| pour lister les tests de la batterie (via l'option \verb|-not -path| dans la commande linux \verb|find|)
\item[-] modif du script \verb|Perl/test.pl| : ajout d'un 3ème argument pour le script \verb|.verif|. Désormais, le nom du fichier \verb|.info| est fourni en 3ème argument (voir la partie relative au script \verb|.verif| en section \ref{section_fichiers_facultatifs})
\end{itemize}%tiret

~\\
\item[$\bullet$] 2016-09-19 (Julien Troufflard) :
\begin{itemize}
\item[-] modif du script \verb|test.pl| : légère modif sans conséquence (petit changement dans le message d'erreur en lien avec un problème d'exécution Herezh)
\end{itemize}%tiret

~\\
\item[$\bullet$] 2016-09-26 (Julien Troufflard) :
\begin{itemize}
\item[-] modif du script \verb|test.pl| : désormais, la vérification du status d'un calcul se fait avant l'exécution d'un éventuel script de post-traitement. Concernant le status, il y a désormais une vérification de la présence de messages d'erreur dans la subroutine \verb|lancement_calcul()|. Pour l'instant, seul le message \verb|Segmentation fault| figure dans cette liste. Cette liste a vocation à répertorier les messages d'erreur d'ordre "informatique", pas d'ordre "mécanique" ou en lien avec les éléments finis (la logique veut que les aspects numériques ou mécaniques sont des domaines qui doivent \^etre vérifiés par un \verb|.maple.ref|). La raison de cette nouvelle vérification est que les tests ayant \verb|Segmentation fault| étaient considérés comme réussis d'un point de vue informatique... ce qui pouvait conduire à croire qu'un test n'avait pas de problème.
\end{itemize}%tiret

~\\
\item[$\bullet$] 2016-09-27 (Julien Troufflard) :
\begin{itemize}
\item[-] modif du script \verb|test.pl| : ajout d'un nouveau message d'erreur fatal dans la liste des erreurs à repérer dans le fichier de redirection \verb|.log|. Désormais, si Herezh++ produit un message de la forme "\verb|erreur (...message...) detectee|", le test est considéré comme \verb|ECHEC|
\end{itemize}%tiret

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%template d ajout d une nouvelle mise à jour (composé d'une puce "bullet" avec Date et auteur de la modif, suivie d une série de puce "-"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\item[$\bullet$] AAAA-MM-JJ (Prénom Nom) :
%\begin{itemize}
%\item[-] blabla 1
%\item[-] blabla 2
%.
%.
%.
%\item[-] blabla N
%\end{itemize}%tiret
%~\\

\end{itemize}%bullet








\end{document}
