1 | \chapter{Installer le code}\label{chap_install}
2 |
3 | Dans ce chapitre, nous allons détailler toutes les étapes préparatoires afin de pouvoir utiliser le code \code. Dans un premier temps, nous verrons la configuration minimale requise pour pouvoir utiliser le code. Ensuite, nous expliquerons comment télécharger puis installer et compiler le code et toutes les routines qui l'accompagnent.
4 |
5 | \section{Configuration système requise}
6 | Le code a été compilé et testé sur des environnements de type Unix. Il doit être utilisable dans un environnement Windows, mais aucun test n'a été effectué.
7 |
8 | \subsection{Logiciels requis}
9 | Pour pouvoir télécharger et compiler le code ainsi que les routines qui l'accompagnent, il est nécessaire d'avoir les éléments suivants sur son système :
10 | \begin{description}
11 | \item[GCC (GNU Compiler Collection) :] la version minimale nécessaire est la 4.2.3 \footnote{La routine predatas que l'on présente plus loin utilise une fonctionnalité de la norme Fortran 2003 : l'allocation dynamique dans un typé dérivé qui ne fut introduit qu'à partir de la version 4.2.x de GCC.}
12 | \item[Open MPI :] une bibliothèque de fonctions qui permet de faire du calcul parallèle,
13 | \item[m4 :] un processeur de macros, il permet de remplacer du texte comme nous le verrons dans la partie \ref{subsec_def_host},
14 | \item[make :] un logiciel qui permet d'exécuter les différentes opérations nécessaires à la compilation du code et des routines qui l'accompagnent.
15 | \item[Subversion (SVN) :] un logiciel de suivi de version.
16 | \end{description}
17 |
18 | \subsection{Logiciels recommandés}
19 | Outre les logiciels requis, certains autres peuvent s'avérer nécessaires pour tirer profit pleinement des possibilités offertes par \code afin d'effectuer le post-traitement des solutions obtenues :
20 | \begin{description}
21 | \item[Grace :] un logiciel open source de tracé de courbes 2D,\footnotemark[2] ;
22 | \item[ParaView :] une application open source d'analyse de données et de visualisation 3D \footnotemark[3].
23 | \end{description}
24 | \footnotetext[2]{\urlcolor{http://plasma-gate.weizmann.ac.il/Grace/}}
25 | \footnotetext[3]{\urlcolor{http://www.paraview.org/}}
26 | \addtocounter{footnote}{2}
27 | Nous verrons au chapitre \ref{chap_tests} que les tests s'appuient sur Grace pour générer automatiquement le tracé des courbes.
28 |
29 | \subsection{Aide à l'installation}
30 | \subsubsection{sur Linux}
31 | Sur Linux, la plupart de ces logiciels sont soit installés par défaut sur le système soit disponibles via les dépôts associés aux distributions. La plupart des distributions récentes fournissent en standard GCC 4.3 ; sur les plus anciennes, il faudra vérifier que la version fournie est compatible : \newline
32 | \indent \cmd{gcc -\,-version} \newline
33 | et si nécessaire, télécharger et compiler GCC 4.2 (ou 4.3) ou éventuellement mettre à jour votre distribution Linux vers une version plus récente.
34 |
35 | \subsubsection{sur OS X}
36 | Sur OS X, les choses ne sont malheureusement pas aussi simples. Dans un premier temps, il est nécessaire d'installer les outils de développement Apple disponible à l'adresse suivante : \urlcolor{http://developer.apple.com/mac/} \footnote{Pour accéder au téléchargement, il est nécessaire de se créer un compte gratuit sur le site d'Apple.}, ne serait-ce que pour accéder à la commande \texttt{make}.
37 |
38 | Ensuite, le plus simple est d'installer GCC 4.3 et Open MPI en utilisant le projet MacPorts \footnote{\urlcolor{http://www.macports.org/}}. Une fois MacPorts installé, il est nécessaire d'ajouter les lignes suivantes au fichier \texttt{.bash\_profile} qui se trouve à la racine de votre compte utilisateur :
39 | \begin{verbatim}
40 | export PATH=/opt/local/bin:/opt/local/sbin:/usr/local/bin:$PATH
41 | export PATH=/opt/local/lib/openmpi/bin:/opt/local/include/openmpi:$PATH
42 | export MANPATH=$MANPATH:/opt/local/share/man
43 | export INFOPATH=$INFOPATH:/opt/local/share/info
44 | \end{verbatim}
45 |
46 | Ensuite dans le terminal, exécutez la commande suivante pour installer GCC 4.3 et Open MPI : \newline
47 | \indent \cmd{sudo port install openmpi +gcc43} \newline
48 |
49 | Le logiciel Grace est également disponible via MacPorts : \cmd{sudo port install grace}.
50 |
51 | \section{Téléchargement du code source}\label{sec_telechargementDOM}
52 | Le code est actuellement développé et maintenu par le CERFACS. Le projet s'appuie sur le logiciel Subversion pour gérer le suivi de version et permettre le téléchargement du code source. Le dépôt Subversion est à l'adresse suivante : \newline
53 | \indent \urlcolor{http://www.cerfacs.fr/domasiumsvn/trunk} \newline
54 | Le code n'est pas en accès libre, il est nécessaire de prendre contact avec la personne en charge du code. Actuellement, il s'agit de Jorge Amaya que l'on peut joindre par courriel à l'adresse \urlcolor{jorge.amaya@cerfacs.fr}.
55 |
56 | \subsection*{Utilisation de Subversion}
57 | La première fois que l'on veut récupérer une copie du code source, il faut effectuer l'opération SVN appelée \cmd{checkout}. On se place dans le répertoire dans lequel on veut effectuer le téléchargement et on lance la commande suivante : \newline
58 | \indent \cmd{svn co \url{http://www.cerfacs.fr/domasiumsvn/trunk .}} \newline
59 |
60 | \noindent Ensuite pour mettre à jour notre copie, on effectue l'opération SVN appelée \cmd{update} depuis le répertoire où se situe notre copie: \newline
61 | \indent \cmd{svn update}
62 |
63 | \section{Organisation du code}
64 | Le code source est organisée en cinq répertoires : HOSTS, SEQCODE, SOURCES, TOOLS, WORK.
65 |
66 | \subsubsection{HOSTS}
67 | Chaque sous-répertoire du répertoire HOSTS définit la configuration système d'une machine, notamment les compilateurs Fortran utilisés pour compiler le code séquentiel ou le code parallèle. On appellera par la suite ce sous-répertoire un « host ».
68 |
69 | \subsubsection{SEQCODE et SOURCES}
70 | Ces répertoires contiennent respectivement la version séquentielle et la version parallèle du code \code.
71 |
72 | \subsubsection{TOOLS}
73 | Ce répertoire contient les routines de pré et post-traitement. Leur utilisation sera détaillée au chapitre \ref{chap_calcul}.
74 |
75 | \subsubsection{WORK}
76 | Ce répertoire contient les données spectrales des mélanges considérés et les données des modèles de quadrature.
77 |
78 |
79 | \section{Installation}
80 | \subsection{Variables d'environnement}
81 | Trois variables d'environnement doivent être définis pour le bon fonctionnement du code :
82 | \begin{description}
83 | \item[DOMHOME] donne le chemin vers le répertoire \code,
84 | \item[DOM\_VERSION] définit la version de \code : actuellement 3.X,
85 | \item[DOM\_HOSTTYPE] définit le type de machine sur lequel on est et correspond au nom du sous-répertoire dans le répertoire HOSTS de \code.
86 | \end{description}
87 | Selon le type de shell disponible sur votre machine, vous déclarerez ces variables de la manière suivante pour les shell de type « Bourne shell » :
88 | \begin{verbatim}
89 | export DOMHOME=chemin/vers/\code
90 | export DOM_VERSION=numéro_de_version
91 | export DOM_HOSTTYPE=nom_du_type de_host
92 | \end{verbatim}
93 | et de la manière suivante pour les shell de type « C shell » :
94 | \begin{verbatim}
95 | setenv DOMHOME chemin/vers/\code
96 | setenv DOM_VERSION numéro_de_version
97 | setenv DOM_HOSTTYPE nom_du_type de_host
98 | \end{verbatim}
99 | dans le fichier de configuration correspondant, par exemple \texttt{.bashrc} pour le shell Bash ou \texttt{.cshrc} pour le C shell. \newline
100 |
101 | Pour une configuration de type « C shell » , il est possible d'utiliser le fichier \$DOM\_HOME/HOSTS/dom.cshrc pour definir le type de la machine utilisé à partir des types prédéfinis. Il suffit d'ajouter dans le fichier \texttt{.cshrc}, après la définition de la variable \textbf{DOM\_HOSTTYPE}~:
102 | \begin{verbatim}
103 | source $DOM_HOME/HOSTS/dom.cshrc
104 | \end{verbatim}
105 | Si la machine ne correspond pas à un type prédéfinit il faut ajouter un nouveau type dans le répertoire HOSTS.
106 |
107 | \subsection{Définition de son host}\label{subsec_def_host}
108 | Un host contient deux fichiers : \texttt{dom.inc} et \texttt{makefile.h}.
109 |
110 | Le fichier \texttt{dom.inc} contient essentiellement les valeurs utilisées pour les substitutions effectuées dans le code source par le processeur de macro m4. On peut ainsi modifier la précision des entiers et des réels dans le code. Il est toutefois recommandé de faire ce genre de modifications en toute connaissance de cause.
111 |
112 | Le fichier \texttt{makefile.h} permet de définir les compilateurs Fortran utilisés pour le code parallèle (variable FF) et le code séquentiel (variable FFS) ainsi que les options de compilation. \newline
113 |
114 | Pour chaque nouvelle machine ou type de machine, il est conseillé de se créer un host. Pour cela, on duplique un autre host et on le nomme du nom de la machine et on adapte le contenu à sa configuration système. Comme nous l'avons vu précédemment, le nom de ce répertoire est utilisé pour définir la variable d'environnement \textbf{DOM\_HOSTTYPE}. \newline
115 |
116 | \textbf{Remarque}~: Lors de la définition d'un nouveau type il est nécessaire d'ajouter également ce type dans le fichier~:
117 | \begin{verbatim}
118 | $DOM_HOME/TOOLS/EXTERNAL/ensightgold_writecbin.c
119 | \end{verbatim}
120 |
121 | Les fichiers de visualisation sont écrits en binaire dont le format dépend de la machine utilisée\footnote{\url{http://fr.wikipedia.org/wiki/Endianness}}. Il faut donc ajouter une définition correspondant au \og nouveautype \fg définit dans la section \texttt{/* Swtich to BigEndian if necessary */}~:
122 | \begin{verbatim}
123 | #elif defined (nouveautype)
124 | # define FWRITE fwrite_byteswap
125 | # define BYTESWAPIO TRUE
126 | ou
127 | #elif if defined (nouveautype)
128 | # define FWRITE fwrite
129 | # define BYTESWAPIO FALSE
130 | \end{verbatim}
131 | selon si la machine est de type \og Big Endian \fg ou \og Little Endian \fg. \\
132 | \textbf{Attention}~: Le nom \og nouveautype \fg utilisé ne doit pas contenir de tiret '-'.
133 |
134 | \section{Compilation}
135 | La compilation des divers programmes s'appuient comme nous allons le voir sur la commande \cmd{make}.
136 |
137 | \subsection{Compilation des outils}
138 | Chaque outil peut être compilé séparément, il suffit de se placer dans son répertoire et d'exécuter la commande : \newline
139 | \indent \cmd{make clean; make} \newline
140 |
141 | À la racine du répertoire TOOLS, on trouve deux scripts shell : \texttt{clean\_all} et \texttt{compile\_all} qui permettent respectivement de supprimer les compilations précédentes et de compiler tous les outils. On peut ainsi proprement compiler les outils en exécutant la commande : \newline
142 | \indent \cmd{clean\_all; compile\_all} \newline
143 |
144 | \subsection{Compilation du code séquentiel}
145 | Ce code est peu optimisé, des tests ont montré que le code parallèle tournant avec un seul processus est environ deux fois plus rapide. Nous vous conseillons donc d'utiliser plutôt la version parallèle même sur une machine ne comprenant qu'un simple processeur.
146 | Toutefois si vous souhaitez utiliser cette version, la compilation s'effectue en se plaçant dans le répertoire SEQCODE et en lançant la commande : \newline
147 | \cmd{make clean; make}
148 |
149 | \subsection{Compilation du code parallèle}
150 | De la même manière que pour le code séquentiel, il suffit de se placer dans le répertoire SOURCES et de lancer la commande : \newline
151 | \cmd{make clean; make}
152 |
153 | Si votre système est bien configuré, les compilations devraient se passer problème et nous allons pouvoir passer au chapitre suivant où nous allons voir comment effectuer un calcul avec \code.