2
0
Fork 0
Verif_Herezh/Doc/doc_procedure_verification.tex

629 lines
34 KiB
TeX

\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{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
%_____________
}
%
% 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{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] {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[anchor=west] {verifier\_exeHZ (script de lancement de la vérification)}
};
\end{tikzpicture}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Lancement de la batterie de tests}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Le script \verb|verifier_exeHZ| permet de lancer la batterie de tests. Il 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.
Le script \verb|verifier_exeHZ| 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 HZppfast_Vn-1|
\item[] \verb|verifier_exeHZ HZppfast64|
\end{itemize}
\item[$\bullet$] cas d'un exécutable spécifié par un chemin absolu ou relatif :
\begin{itemize}
\item[] \verb|verifier_exeHZ /Users/dupont/bin/HZpp|
\item[] \verb|verifier_exeHZ ./HZppfast|
\item[] \verb|verifier_exeHZ ../mon_rep/HZppfast|\\
\end{itemize}
\end{itemize}
La procédure pour lancer la batterie est donc :
\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| en lui indiquant l'exécutable à tester
\end{itemize}
%%
\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|AUTRE| : 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}
\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] {TYPE\_DE\_CALCUL}}
child { node[draw, anchor=west] {UTILITAIRES}}
}
child[missing] { }
child[missing] { }
child[missing] { }
child[missing] { }
child[missing] { }
child[missing] { }
child { node[draw, anchor=west] {CALCUL\_COMPLET}}
child { node[draw, anchor=west] {AUTRE}};
\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 des calculs}
Le script \verb|verifier_exeHZ| a pour fonction de rechercher tous 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| 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}.\\
Une fois un test terminé, le répertoire du test est restauré dans son état d'origine (restauration de l'état initial du fichier \verb|.info| et suppression de tous les fichiers qui n'étaient pas présents à l'origine).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsubsection{Vérification}
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 tests}\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])\\
\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}
\clearpage
\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|documentation_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 contenus des fichiers README montré sur la figure \ref{format_fichier_README}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Ajout d'un nouveau test}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Vue d'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, 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|.
\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|).
\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 \it But du test \rm et \it Description du calcul \rm 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 \it Auteur \rm et \it Mots-cles\rm, qui ne sont pas obligatoires, donnent des informations précieuses (merci de les renseigner).
\item[] Remarque importante : ne pas écrire des lignes de tirets (\verb|---| et plus) dans le corps d'une rubrique.\\
\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[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[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[missing] { }
child { node[draw, anchor=west] {(*) autres fichiers facultatifs}};
\end{tikzpicture}\\
\hspace*{-5.cm}\small (*) fichiers facultatifs\normalsize
\caption{Contenu d'un répertoire de test}
\label{arbo_repertoire_test}
\end{figure}
La sous-section \ref{section_commandes_CVS} est un rappel des commandes CVS de base. Les sous-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 sous-section \ref{section_exemples_tests} a pour but de balayer les cas les plus courant de tests et de donner des exemples.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Commandes usuelles CVS}\label{section_commandes_CVS}
\begin{itemize}
\item[$\bullet$] importer le projet : \verb|cvs co 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 (*) \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\normalsize\\
\end{itemize}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Fichiers obligatoires}\label{section_fichiers_obligatoires}
\begin{itemize}
\item[$\bullet$] \verb|README| :\\
La trame du fichier est montrée sur la figure \ref{format_fichier_README}. La syntaxe de l'intitulé des deux rubriques obligatoires (en bleu) doit \^etre strictement respectée. Il est fortement encouragé de renseigner les rubriques \it Auteur \rm et \it Mots-cles\rm. 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 de la documentation!!).\\
\item[$\bullet$] \verb|.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}
\item[$\bullet$] \verb|.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}
\end{itemize}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Fichiers facultatifs en rapport avec l'exécution du test}\label{section_fichiers_facultatifs}
\begin{itemize}
%%
\item[$\bullet$] \verb|.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}
%%
\item[$\bullet$] \verb|.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}
%%
\item[$\bullet$] \verb|.verif| :
\begin{itemize}
\item[] Ce fichier est un exécutable dont la fonction est de fournir le résultat de la vérification. Pour cela, il effectue les traitements nécessaires pour déterminer si le test est \verb|OK| ou \verb|ECHEC|. Il indique ce résultat en affichant la ligne suivante :
\hspace*{2cm}\begin{minipage}{\textwidth}
\begin{verbatim}
resultat verification : OK (ou 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 2 arguments lorsqu'il est appelé par le script \verb|Perl/test.pl| :
\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|)
\end{itemize}
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...).\\
\end{itemize}
%%
\item[$\bullet$] \verb|.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}
%%
\item[$\bullet$] \verb|.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é.
\end{itemize}
\end{itemize}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Exemples de tests}\label{section_exemples_tests}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsubsection{Calcul classique : comparaison de données maple}
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}
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|").
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsubsection{Calcul utilisant un script libre de vérification}
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|).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsubsection{Calcul consistant à créer un fichier .info (Herezh -n)}
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 créé à un fichier de référence. Attention au fait que le fichier 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|.\\
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}
%%
\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
\end{itemize}%bullet
\end{document}