Notice d'utilisation de la commande module


Avant propos

La commande module est là pour répondre au plus juste à vos besoins spécifiques, pour utiliser les compilateurs, bibilothèques mathématiques ou utilitaires sans que vous ayiez à en chercher l'emplacement sur les disques. Elle fonctionne en enrichissant à votre demande des variables d'environnement en fonction du produit (compilateur, débogueur, etc...) que vous souhaitez utiliser.

Après une rubrique syntaxique qui vous permettra d'utiliser cette commande à minima, nous vous proposons des exemples d'utilisation plus sophistiqués.

Syntaxe

module (avail [produit] | load produit[/version] | list | switch produit/version1 produit/version2 | display produit[/version] | help ...)

produit représente au choix : Pour en avoir la liste complète, tapez simplement module avail .

version représente les évolutions d'un même produit, elle peut être égale à :

Initialisation

Connectez-vous sur Vargas. Sans avoir rien fait, vous allez constater que des modules sont déjà chargés.
En effet, en tapant module list, s'affiche :

vargas : module list
Currently Loaded Modulefiles:
 1) c++/10.1.0.3(default)      3) compilerwrappers/yes      
 2) fortran/12.1.0.4(default) 
où:

1) c++/10.1.0.3(default) : compilateur C et C++ par défaut au moment de la rédaction de cette page,
2) fortran/12.1.0.4(default) : compilateur Fortran (de Fortran66 a Fortran2003) par défaut,
3) compilerwrappers/yes : édition de liens automatique en fonction des modules chargés.


NB: Si vous êtes vraiment nostalgiques des variables d'environnement positionnées "à la main" pour les compilations, vous pouvez choisir, comme nous le verrons plus bas, le module : compilerwrappers/no.


Disponibilité

Vous cherchez un produit spécifique, une version particulière d'une bibliothèque ? L'avons-nous à votre disposition ?
Pour répondre à cette question, la commande à exécuter est module avail :

vargas : module avail
------------ /usr/local/pub/Modules/IDRIS/modulefiles/environnement ------------ 
compilerwrappers/no           compilerwrappers/yes(default) 
------------ /usr/local/pub/Modules/IDRIS/modulefiles/compilateurs ------------ 
fortran/11.1.0.3(default) fortran/11.1.0.4          fortran/9.1.0.7           
------------ /usr/local/pub/Modules/IDRIS/modulefiles/bibliotheques ------------ 
arpack/96(default)       lapack95/3.0(default)    petsc/2.3.3(default)     
blas/4.3(default)        mumps/4.8.2(default)     phdf5/1.8.1(default)     
essl/4.3(default)        nag/21(default)          ptscotch/5.0.6(default)  
fftw/2.1.5(default)      netcdf/3.5.1             ptscotch/5.1             
fftw/3.1.2               netcdf/3.6.2(default)    scalapack/1.8.0(default) 
hdf5/1.8.1(default)      netcdf/3.6.3             scotch/5.0.6(default)    
lapack/3.1.1(default)    parpack/96(default)      scotch/5.1               
------------ /usr/local/pub/Modules/IDRIS/modulefiles/outils ------------ 
ihpct/2.2.3(default)       python/2.6(default)        
m4/1.4.11(default)         subversion/1.5.2(default)  
m4/1.4.9                   totalview/8.6.0-1(default) 
python/2.5.2               
------------ /usr/local/pub/Modules/IDRIS/modulefiles/applications ------------ 
abinit/5.4.4(default)     gaussian/g03_B04          molcas/7.2                 
adf/2007.01f(default)     gaussian/g03_D02(default) molpro/2006.1(default)    
adf/2007.01f_test         gaussian/g03_D02_typlss   namd/2.6(default)         
cp2k/21Sep08(default)     gaussian/g03_D02_zahir    openbabel/2.2.0(default)  
cpmd/3.13.1               lammps/21May08(default)   siesta/2.0.1(default)     
cpmd/3.13.2(default)      molcas/6.4                vasp/4.6.31(default)      
espresso/4.0.2(default)   molcas/7.0(default)        
------------ /usr/local/pub/Modules/DEISA/modulefiles/init ------------ 
deisa 

Cette liste évolue en permanence (la liste figurant ci-dessus est celle en date de novembre 2008).

Remarques : l'IDRIS peut redéfinir les liens existants dans les modules entre les emplacements réels des fichiers et les compilateurs ou bibliothèques fournis par les constructeurs et/ou installés par l'IDRIS. Régulièrement, nous mettons à jour les versions des produits afin de résoudre au mieux l'ensemble des problèmes rencontrés, ou pour suivre l'evolution des logiciels proposés. Aucune modification de l'environnement n'est faite si elle n'apporte pas un gain aux utilisateurs. Si vous souhaitez une version plus récente que celles proposées pour un produit, vous pouvez contacter l'Assistance et/ou le Comité des Utilisateurs en motivant votre demande.



Activation d'un produit et édition de liens automatique

Vous faites appel dans votre programme mon_prog.f90 à la librairie NetCDF existant dans la liste ci-dessus. Il convient avant de lancer la compilation de charger le module par la commande module load :

vargas : module load netcdf
(load) netcdf version 3.6.2
Ne vous souciez plus de rien, compilez simplement en faisant :
vargas: xlf90 mon_prog.f90
les références à NetCDF seront trouvées automatiquement à l'édition de liens.
C'est la magie de la commande module !


Changement de version d'un produit

Cela n'est bien entendu envisageable que si une version alternative apparaît dans la liste donnée par module avail. Par exemple, la version par défaut de Gaussian ne vous convient pas ? Vous pouvez la remplacer par une autre version disponible en utilisant l'argument switch de la commande module.

vargas : module switch gaussian gaussian/g03_B04
(unload) gaussian version g03_D02
(load) gaussian version g03_B04
Avec cette commande, l'appel à Gaussian correspond à la version g03_B04, au lieu de la version par défaut g03_D02.
Pour rétablir la version par défaut, et c'est une autre façon de faire, vous pouvez aussi utiliser explicitement les numéros des versions :

vargas : module switch gaussian/g03_B04 gaussian/g03_D02
(unload) gaussian version g03_B04
(load) gaussian version g03_D02
Remarquez qu'un switch est une désactivation (unload) du produit suivie d'une ré-activation (load) d'une autre version du même produit. Enfin, des fois ça se complique...
Imaginons maintenant que vous ne souhaitiez plus bénéficier de l'édition de liens automatique pour compiler. Vous allez basculer du compilerwrappers par défaut (yes) au module compilaterwrappers/no :
vargas : module switch compilerwrappers compilerwrappers/no 
(load) Édition de liens explicite par variables d'environnement
Un "désempilement" des modules est effectué jusqu'à parvenir au module sur lequel porte la bascule. La bascule faite, un rechargement des modules est effectué en fonction du changement demandé.

Usage des variables d'environnement

Vous faites appel dans votre programme mon_prog.f90 à une bibliothèque bibli supposée chargée. Dans la mesure où compilerwrappers/no a été sélectionné explicitement, des variables d'environnement sont automatiquement générées ayant pour nom :
bibli_LDFLAGS et bibli_FFLAGS.
La compilation s'effectue alors de la façon suivante :

vargas: xlf90 -c $bibli_FFLAGS mon_prog.f90
vargas: xlf90 $bibli_LDFLAGS mon_prog.o

ou, en condensé :

vargas: xlf90 $bibli_FFLAGS mon_prog.f90 $bibli_LDFLAGS 

En savoir plus

Vous souhaitez avoir plus d'informations sur un module particulier : l'argument display de la commande module vous indique les modifications de votre environnement réalisées lors du chargement de ce module. Par exemple que ce cache-t-il derrière le module netcdf (par defaut) ?

vargas : module display netcdf
-------------------------------------------------------------------
/usr/local/pub/Modules/IDRIS/modulefiles/bibliotheques/netcdf/3.6.2:

conflict        netcdf
prepend-path    PATH    /usr/local/pub/NetCDF/3.6.2/bin :
prepend-path    PATH    /usr/local/pub/Modules/IDRIS/wrappers/fortran:/usr/local/pub/Modules/IDRIS/wrappers/c++ :
prepend-path    WRAPPER_CXXFLAGS        -I/usr/local/pub/NetCDF/3.6.2/include    
prepend-path    WRAPPER_FFLAGS  -I/usr/local/pub/NetCDF/3.6.2/include    
prepend-path    WRAPPER_LDFLAGS -L/usr/local/pub/NetCDF/3.6.2/lib -lnetcdf -lnetcdf_c++  
prepend-path    MANPATH /usr/local/pub/NetCDF/3.6.2/share/man   :
module-whatis   netcdf version 3.6.2
-------------------------------------------------------------------

Attention


Dans l'état actuel, du point de vue du shell, la commande module est une fonction . C'est à dire qu'elle n'est connue qu'à l'ouverture de vos fenêtres interactives ou de vos sessions en batch et ce, quelque soit type de shell.
Néanmoins, les utilisateurs des shells csh ou tcsh qui réalisent des "empilements" de shells rencontrent des difficultés, notamment avec les r-commandes (par ex. rcp) parce que le chargement des modules est "bavard" et utilise à la fois la sortie standard et la sortie d'erreur standard.


© CNRS - IDRIS, 23/04/2012