2
0
Fork 0
Verif_Herezh/Doc/doc_procedure_verification.tex

683 lines
39 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{Etude biblio}
\author{Julien Troufflard}
\date{\today}
%\pagestyle{arabic}
\pagenumbering{arabic}
\begin{document}
\maketitle
\tableofcontents
%
%
\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
\newpage
\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
\newpage
\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 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].
%%%%
\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]\\
\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éfini 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 lourd 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}
%%
\subsection{Ajout d'un nouveau test}
\subsubsection{Vue d'ensemble}
Globalement, 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$] tous les fichiers \verb|.CVisu|[i] et les fichiers facultatifs nécessaires à l'exécution d'un test (\verb|.verif|[i], \verb|[i].commande|, 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$] 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$] 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).\\
\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}
%%%%
\subsubsection{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. Les autres rubriques sont indiquées à titre de proposition et pour des questions d'harmonie sur la forme d'un test à l'autre.\\
\item[$\bullet$] \verb|.info| :\\
Ce fichier 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|).\\
\item[$\bullet$] \verb|.CVisu|[i] :\\
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}
%%%%
\subsubsection{Fichiers facultatifs}
\begin{itemize}
\item[$\bullet$] \verb|| :
\end{itemize}
%%%%
\subsubsection{Calcul classique : comparaison de données maple}
\clearpage
\newpage
\begin{figure}[!h]
{\color{blue}
\begin{verbatim}
------------------------------------------------------------
But du test
------------------------------------------------------------
du texte...
------------------------------------------------------------
Description du calcul
------------------------------------------------------------
du texte...
\end{verbatim}
}
\begin{verbatim}
------------------------------------------------------------
Mots-cles
------------------------------------------------------------
du texte...
------------------------------------------------------------
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. \underline{Les deux rubriques en bleu sont obligatoires}}
\label{format_fichier_README}
\end{figure}
\clearpage
\newpage
{\color{red} Le document "???toto.pdf???" est le catalogue des tests actuellement présents dans la batterie. Il décrit succinctement la nature d'un test (but du test et description du calcul). Dans chaque répertoire de test, un fichier 1README.txt donne des informations sur le test (But du test, Description du calcul, Grandeurs de comparaison, Informations sur les fichiers facultatifs, Comparaison avec des solutions analytiques, Comparaison avec des codes de calcul). C'est à partir de cette documentation locale que le document global "???toto.pdf???" est construit, en reprenant le contenu des rubriques "But du test" et "Description du calcul".\\
Le fichier 1README.txt de chaque test a le format montré sur la figure \ref{formet_fichier_1README}. {\color{red} Problème des accents dans un fichier ASCII. Les accents et apostrophes sont reconnus pour poser des problèmes dans les fichiers ASCII. Mais si on choisit de ne pas les mettre, la construction du catalogue de test va \^etre rédigée dans un mauvais français. proposition : écrire les fichiers 1README.txt, donc le catalogue des tests, en anglais (risqué mais efficace) et sans apostrophes}.\\
Détail du contenu des rubriques :
\begin{itemize}
\item[$\bullet$] But du test (rubrique obligatoire) :
\begin{itemize}
\item[ ] Indiquer de manière précise et concise quelle est la ou les fonctionnalités de Herezh qui sont testées et préciser si une grandeur de sortie est particulièrement à surveiller (à noter que le test n'a pas forcément pour but de tester une fonction particulièrement, voir le 3ème exemple ci-dessous)
\item[+] Exemples :
\begin{itemize}
\item[-] test du mot-cle non\_dynamique
\item[-] test de la loi de comportement MOONEY\_RIVLIN\_3D en cisaillement simple
\item[-] exemple d application industrielle : pas de test particulier
\item[-] verification de la contrainte SIG11 apres 3 cycles charge-decharge pour une loi additive ISOHYPER3DORGEAS1 + HYSTERESIS\_3D
\end{itemize}
\end{itemize}
\item[$\bullet$] Description du calcul (rubrique obligatoire) :
\begin{itemize}
\item[ ] Détails techniques sur le calcul (résumé du problème, conditions limites (symétries), loi de comportement, chargement, etc...). Dans cette rubrique, on explique ce qui est simulé et comment avec toutes les informations nécessaires pour comprendre le calcul et pointer des points particuliers. On peut par exemple décrire le calcul en quelques phrases et ensuite s'inspirer de l'ordre du fichier \verb|.info| pour hiérarchiser les détails techniques
\item[+] Exemple :
\begin{itemize}
\item[ ] simulation d un essai de traction uniaxiale jusqu a striction sur une eprouvette de longueur 200, de largeur 50 et d epaisseur 1.5 pour une loi de comportement [type de loi]. La striction est obtenue en appliquant une loi de comportement legerement differente dans la zone ou on souhaite obtenir la striction. Pour les elements de cette zone, la loi de comportement a le parametre [nom du parametre] egal a [valeur] tandis qu il est egal a [valeur] pour tous les autres elements. Par symetrie, seul un huitieme de la geometrie est modelise, ce qui donne une geometrie de longueur 100 (suivant X), de largeur 25 (suivant Y) et d epaisseur 0.75 (suivant Z).
\begin{itemize}
\item[-] maillage (avec Gmsh) constitue de 5000 elements HEXAEDRE LINEAIRE a un seul point d integration (maille plus finement dans la zone de striction)
\item[-] loi de comportement de type [indiquer les mot-cles Herezh par exemple] pour le set d element [nom du set 1]
\item[-] loi de comportement de meme type que precedemment mais avec [decrire le parametre different] pour le set d element [nom du set 2]
\item[-] chargement par deplacement impose de 9.5 suivant X des noeuds en X=100 (la courbe de charge [nom de la courbe] pilote ce deplacement)
\item[-] conditions de blocage prenant en compte les symetries :\\
- blocage suivant X des noeuds du plan X=0\\
- blocage suivant Y des noeuds du plan Y=0\\
- blocage suivant Z des noeuds du plan Z=0
\end{itemize}
\end{itemize}
\end{itemize}
\item[$\bullet$] Grandeurs de comparaison :
\begin{itemize}
\item[ ] Il s'agit de résumer les grandeurs importantes du \verb|.maple|. L'utilisateur voulant conna\^itre l'ensemble des grandeurs pourra toujours consulter le fichier \verb|.maple.ref|. Cette rubrique est l'occasion de donner des détails supplémentaires à ceux déjà présents dans le \verb|.maple.ref|.
\begin{itemize}
\item[+] Exemples :
\begin{itemize}
\item[ ] deplacement au noeud [no] (noeud au fond de l entaille)\\
\hspace*{1.2cm}- grandeur : U2
\item[ ] contrainte dans le sens de traction au point d integration [no] de l element [no]\\
\hspace*{1.2cm}- grandeur : SIG22
\end{itemize}
\end{itemize}
\end{itemize}
\item[$\bullet$] Informations sur les fichiers facultatifs :
\begin{itemize}
\item[ ] Il s'agit de donner une description succinte des fichiers non indispensables au calcul Herezh
\end{itemize}
\item[$\bullet$] Comparaison avec des solutions analytiques :
\begin{itemize}
\item[ ] Cette rubrique permet de donner toutes les informations nécessaires à la comparaison entre le calcul Herezh et des solutions analytiques. Soit on écrit directement ici les formules et résultats, soit on fait référence à des fichiers présents dans le répertoire. Ne pas oublier de nommer explicitement les grandeurs Herezh à comparer (SIG11, X1, etc...) et les valeurs obtenues avec la solution analytique.
\end{itemize}
\item[$\bullet$] Comparaison avec des codes de calcul :
\begin{itemize}
\item[ ] Cette rubrique permet de donner toutes les informations nécessaires à la comparaison entre le calcul Herezh et le calcul avec d'autres codes de calcul. Soit on écrit directement ici les résultats, soit on fait référence à des fichiers présents dans le répertoire. Ne pas oublier de nommer explicitement les grandeurs Herezh à comparer (SIG11, X1, etc...) et les valeurs obtenues par l'autre code de calcul.
\end{itemize}
\end{itemize}
}
%%
\section{Fonctionnement}\label{section_2}
\subsection{Importation du répertoire de vérification depuis CVS}
\begin{verbatim}
> cvs co Verif_Herezh
\end{verbatim}
%%
\subsection{Execution de la vérification}
Le script \verb|verifier_exeHZ| permet de lancer la vérification en utilisant l'exécutable Herezh++ de son choix. Le premier argument donné est le nom de cet exécutable. Par exemple :
\begin{verbatim}
> verifier_exeHZ HZppfast_Vn-1
\end{verbatim}
{\color{red} On aimerait que ce script puisse avoir deux r\^oles} :
\begin{itemize}
\item r\^ole principal : lancer la vérification du code (tous les tests {\color{red} ou une partie seulement des tests})
\item {\color{red} r\^ole secondaire : permettre à quelqu'un qui vient d'ajouter un test de vérifier si ce test fonctionne (sans lancer toute la batterie)}\\
\end{itemize}
Le script \verb|verifier_exeHZ| cherche les répertoires de tests dans \underline{toute l'arborescence depuis l'endroit où la commande est exécutée}. Tout répertoire dont le nom commene par \verb|Test_R| ou \verb|Test_L| est considéré comme étant un répertoire de test. {\color{red} Actuellement, il n'est pas possible de lancer cette commande ailleurs que dans le répertoire où se trouve les répertoires \verb|Perl| et \verb|Rapport|. Moyens d'y remédier :
\begin{itemize}
\item solution 1 : utiliser les scripts actuels mais c'est à la charge de l'utilisateur de faire en sorte que \verb|verifier_exeHZ| trouve l'accès aux scripts contenus dans \verb|Perl| (légère modif de \verb|verifier_exeHZ| pour pouvoir renseigner des variables de chemin par exemple)\\
Inconvénient : il y a le risque qu'un utilisateur qui "commit" le projet avec certains paramètres dans \verb|verifier_exeHZ|, modifie les paramètres de \verb|verifier_exeHZ| des autres membres du projet lorsqu'ils feront un "update -dP"
\item solution 2 : plut\^ot que d'avoir plusieurs scripts, on les concatène en un seul script auto-suffisant (le script s'appellera toujours \verb|verifier_exeHZ| mais réécrit en perl et les scripts contenus dans le répertoire \verb|Perl| seront disponibles sous forme de subroutine au sein de \verb|verifier_exeHZ|)\\
\end{itemize}
}%fin color{red}
Un répertoire de test contient un ou plusieurs fichiers de sortie \verb|.CVisu[no]| (numéroté à partir de 1). Un calcul par fichier \verb|.CVisu[no]| est fait lors de la vérification. {\color{red} A l'origine, le fonctionnement était de vérifier une seule valeur à la fois. Mais ce mode de fonctionnement n'est pas forcément utile désormais car le script \verb|test.pl| peut désormais comparer plusieurs valeurs à la fois. Donc, autant faire un seul \verb|.CVisu| avec toutes les valeurs d'un coup.} Chaque calcul génère un fichier \verb|.maple|. Un fichier de référence d'extension \verb|.maple.ref[no]| sert de comparaison (un fichier de référence par \verb|.CVisu|). Le nombre de grandeur en sortie est quelconque mais les fichiers \verb|.maple| ne doivent contenir qu'une seule ligne de données.
%%
\subsection{Rapport de vérification}
Pour chaque grandeur de sortie de chaque calcul de chaque test, la comparaison est valide si l'écart entre la grandeur en sortie du calcul et celle écrite dans le fichier de référence est inférieur à une tolérance absolue et une tolérance relative. Le script \verb|verifier_exeHZ| génère un rapport pour les tests rapides et un rapport pour les tests longs. Les rapports générés indiquent la validité (indicateur : OK) ou l'échec (indicateur : ECHEC) pour chaque grandeur (repérée par son numéro de colonne dans le fichier \verb|.maple|). L'affichage produit indique le chemin du répertoire de test, le no du fichier \verb|.CVisu| et les numéros de colonnes de chaque grandeur. Par exemple :
\begin{verbatim}
./[chemin]/Test_[type]_[nom]/.CVisu[no]
-> grandeur testee : colonne [1]
- comparaison absolue (precision : 1e-12) -> OK
- comparaison relative (precision : 1e-05%) -> OK
.
.
.
-> grandeur testee : colonne [ième colonne]
- comparaison absolue (precision : 1e-12) -> ECHEC
- comparaison relative (precision : 1e-05%) -> OK
\end{verbatim}
Les précisions figurent dans le script \verb|Perl/test.pl| et les valeurs de tolérance actuelles sont :
\begin{verbatim}
my $PREC_ABSOLU = 1.e-12;#precision pour la comparaison absolue
my $PREC_RELATIVE_POURCENT = 1.e-5;#precision pour la comparaison relative (en pourcent)
\end{verbatim}
{\color{red} }
%%
\section{Définition d'un répertoire de test}\label{section_3}
Un test est constitué d'un répertoire contenant des fichiers obligatoires et des fichiers facultatifs. Les fichiers obligatoires sont destinés à comparer deux versions de Herezh et sont les fichiers utilisés pour le fonctionnement de la vérification automatisée.
{\color{red} Dans les fichiers facultatifs, on trouve le ou les fichiers permettant d'affecter des valeurs particulières aux précisions pour la comparaison (fichiers \verb|.precision|). Les fichiers facultatifs sont aussi destinés à la comparaison avec d'autres codes de calcul ou des solutions analytiques. La comparaison avec d'autres codes ou des solutions analytiques n'est pas automatisée. C'est l'utilisateur qui doit faire cette comparaison "manuellement". Dans la mesure du possible, il faut fournir les fichiers permettant de re-générer les résultats (une mise en données Abaqus \verb|.inp| par exemple, ou un script de calcul d'une solution analytique) et surtout une synthèse des résultats donnés sous forme de texte (soit un fichier séparé pdf ou texte, soit directement dans le fichier obligatoire 1README.txt) et préciser la version du logiciel de comparaison.}\\
Un test a les caractéristiques suivantes :
\begin{itemize}
\item un nom de répertoire choisi en respectant certaines règles
\item des fichiers
\end{itemize}
%%
\subsection{Nom du répertoire}\label{section_3_subsection_1}
Un répertoire de test a un nom de la forme (respecter la casse) : \verb|Test_[duree]|{\color{red} \verb|_[dim]|}\verb|_[nom]|
avec :
\begin{itemize}
\item \verb|[duree]| : indicateur de la durée du calcul (Rapide ou Long) ; valeur = R ou L
\item (*) {\color{red} \verb|[dim]| : indication sur la dimension du problème ; valeur = 1D, 2D, 3D ou AXI}
\item (**) \verb|[nom]| : nom du test
\item[ ]
\item[ ] \footnotesize (*) le champ \verb|[dim]| n'existe pas si on utilise une arborescence de classement avec des répertoires 1D, 2D, 3D, AXI (voir section \ref{section_1_subsection_2})\normalsize
\item[ ] \footnotesize (**) le champ \verb|[nom]| est choisi librement exceptées les règles suivantes : ne doit pas contenir d'espaces, éviter si possible d'utiliser un mot-clé Herezh, {\color{red} autres règles...}\normalsize\\
\end{itemize}
%%
\subsection{Choix de son emplacement dans l'arborescence de la batterie}\label{section_3_subsection_2}
\begin{itemize}
\item[$\bullet$] tests rapides dédiés à la vérification d'un mot-clé\\
$\Rightarrow$ répertoire \verb|Batterie/FONCTION_UNIQUE|.
\item[$\bullet$] tests rapides dédiés à la vérification d'une combinaison de mot-clés\\
$\Rightarrow$ répertoire \verb|Batterie/FONCTIONS_COMBINEES|
\item[$\bullet$] calculs complets (exemples complexes)\\
$\Rightarrow$ répertoire \verb|Batterie/CALCUL_COMPLET|
\end{itemize}
%%
\subsection{Contenu du répertoire}\label{section_3_subsection_3}
Un répertoire de test contient les fichiers suivants :
\begin{itemize}
\item[$\bullet$] FICHIERS OBLIGATOIRES :
\begin{itemize}
\item un fichier nommé \verb|1README.txt| donnant des informations sur le test (voir section \ref{section_1_subsection_3})
\item un seul fichier de calcul \verb|.info| (*) de nom : \verb|[nom_calcul].info| (**)
\item un ou plusieurs fichiers \verb|.CVisu| numérotés à partir de 1 : \verb|[nom_calcul].CVisu1|, \verb|[nom_calcul].CVisu2|, ...
\item autant de fichiers de référence \verb|.maple.ref| qu'il y a de fichiers \verb|.CVisu| avec la m\^eme numérotation que les fichiers \verb|.CVisu| : \verb|[nom_calcul].maple.ref1|, \verb|[nom_calcul].maple.ref2|, ...
\item tous les fichiers nécessaires au fonctionnement du calcul (fichiers appelés dans le fichier \verb|.info|. Par exemple : les fichiers de maillage). Attention à l'extension de ces fichiers (*) (***)
\item[ ]
\item[ ] \footnotesize (*) le répertoire doit absolument contenir \underline{un seul fichier ayant l'extension .info} pour des raisons de fonctionnement des scripts de vérification\normalsize
\item[ ] \footnotesize (**) le champ \verb|[nom_calcul]| est choisi librement exceptées les règles suivantes : ne doit pas contenir d'espaces, éviter si possible d'utiliser un mot-clé Herezh, {\color{red} autres règles...}\normalsize
\item[ ] \footnotesize (***) Attention : l'extension \verb|.precision| est réservée aux fichiers définissant les précisions de test\normalsize\\
\end{itemize}
{\color{red}
\item[$\bullet$] FICHIERS FACULTATIFS :
\begin{itemize}
\item {\color{red} fichiers d'extension \verb|.precision[no]| contenant les précisions absolue et relative de chaque grandeur (à numéroter pour affecter un fichier de précision à tel ou tel fichier \verb|.CVisu|)}
\item des fichiers de calcul et de résultats issus d'autres codes de calcul (****)
\item des fichiers donnant une solution analytique du test (par exemple : documentation en pdf, script de calcul, etc...)
\item[ ]
\item[ ] \footnotesize (****) Ne pas oublier de préciser la version de ces codes de calcul (par exemple dans le fichier 1README.txt dans la rubrique "Comparaison avec des codes de calcul")\normalsize
\item[ ]
\item[ ] \footnotesize \underline{Remarque} : que soit pour une comparaison avec un autre code de calcul ou une solution analytique, il faut faire attention au fait que Herezh fait toujours des calculs non-linéaires et que par défaut la mesure de déformation est celle d'Almansi\normalsize\\
\end{itemize}
}
\end{itemize}
{\color{red}
Les fichiers facultatifs de précision ont le format suivant :
\begin{verbatim}
#eventuellement des commentaires...
[no colonne] prec_absolue prec_relative
.
.
.
#eventuellement des commentaires...
[no colonne] prec_absolue prec_relative
\end{verbatim}
Il n'est pas nécessaire de fournir une précision pour chacune des grandeurs. Par contre, pour chaque ligne déclarée, il faut fournir la précision absolue et la précision relative. Par défaut, les précisions sont \verb|prec_absolue|=1.e-12 et \verb|prec_relative|=1.e-5. Par exemple, si un fichier \verb|.maple| contient les grandeurs suivantes à un point d'intégration :
\begin{verbatim}
temps X Y Z SIG11
\end{verbatim}
\verb|X|, \verb|Y|, \verb|Z| sont les positions du point d'intégration.\\
On peut ne spécifier les précisions que pour la contrainte \verb|SIG11| en créant le fichier suivant :
\begin{verbatim}
#precision pour la contrainte SIG11
[5] 1.e-6 1.e-3
\end{verbatim}
Les autres grandeurs \verb|temps|, \verb|X|, \verb|Y| et \verb|Z| seront comparées en utilisant les précisions par défaut.
}
%%
\section{Ajout d'un nouveau test}\label{section_4}
Pour ajouter un test, il est nécessaire de conna\^itre quelques commandes CVS de base et de suivre une procédure d'ajout.
%%
\subsection{Commandes usuelles CVS}\label{section_4_subsection_1}
\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{Procédure d'ajout}\label{section_4_subsection_2}
\begin{itemize}
\item[$\bullet$] créer les fichiers de calcul, de sortie et de référence
\begin{itemize}
\item[] Dans un répertoire quelconque n'appartenant pas au projet CVS, on crée un fichier de calcul \verb|.info|, un ou plusieurs fichiers de sortie \verb|.CVisu[no]| (numérotés à partir de 1) ainsi que tous les fichiers indispensables au lancement du calcul. Les fichiers \verb|.CVisu[no]| sont créés de manière à ne faire que des sorties \verb|.maple| (choix 4 dans le menu interactif Herezh). Dans le fichier \verb|.info|, on spécifie l'option "\verb|avec plus visualisation|" ou "\verb|avec plus lectureCommandesVisu|". Pour chaque fichier \verb|.CVisu[no]|, on lance le calcul pour générer un fichier \verb|.maple| auquel on ajoute l'extension \verb|.ref[no]| après \verb|.maple| (où \verb|[no]| est le m\^eme numéro que le \verb|.CVisu| correspondant).
\end{itemize}
\item[$\bullet$] se positionner dans le répertoire \verb|Batterie| du projet CVS
\item[$\bullet$] actualiser la version du projet : \verb|cvs update -dP|
\item[$\bullet$] créer un répertoire dédié au test en respectant la convention sur le nom : \verb|Test_[duree]_[dimension]_[nom]|
\item[$\bullet$] recopier les fichiers de calcul, de sortie \verb|.CVisu[no]| et de référence \verb|.maple.ref[no]| dans ce répertoire
\item[$\bullet$] recopier d'éventuels fichiers facultatifs (fichier de précision \verb|.precision|, solutions analytiques, mises en données et résultats pour d'autres codes de calcul, ...)
\item[$\bullet$] créer le fichier 1README.txt selon la trame donnée en section \ref{section_1_subsection_3}
\item[$\bullet$] ajouter le nouveau répertoire et ses fichiers au projet CVS : \verb|cvs add ...|
\item[$\bullet$] enregistrer les modifications du projet (se placer dans le répertoire \verb|Batterie|, puis \verb|cvs commit -m 'ajout nouveau test dans Batterie, ... autres commentaires ...'|\\
\end{itemize}
Voir section \ref{section_3} pour plus d'informations notamment sur la convention sur le nom du répertoire (section \ref{section_3_subsection_1}), le choix de l'emplacement du test dans l'arborescence (section \ref{section_3_subsection_2}) ou le contenu du répertoire de test (section \ref{section_3_subsection_3}).
%%
\end{document}