wiki:Modipsl_compil

Version 1 (modified by acosce, 13 years ago) (diff)

--

Compilation

Retour au sommaire du mode d'emploi

FCM

Certains modèles de l'IPSL utilisent l'outil FCM pour gérer la création de leur makefile (modèle LMDZ, modèle INCA ...). FCM n'est pas accessible par défaut sur les machines de calcul. Il est disponible sur les machines de l'IDRIS et du CCRT et vous devez l'ajouter à votre PATH :

# sur mercure, platine et titane
PATH=~p86ipsl/fcm/bin:$PATH
# sur brodie
PATH=/home/rech/psl/rpsl035/fcm/bin:$PATH
# sur vargas
PATH=/homegpfs/rech/psl/rpsl035/FCM/bin/fcm:$PATH




Création du Makefile

Avant la première compilation des différents modèles de votre configuration vous devez créer les makefiles adaptés à la machine sur laquelle vous travaillez.

cd modipsl/util
./ins_make

La commande ins_make permet de créer un makefile pour la config. Dans notre exemple modipsl/config/IPSLCM5A/Makefile. Ce Makefile contrôle tous les makefiles des différents modèles utilisés. Une fois qu'il est créé vous n'avez pas besoin de le regénérer (sauf changement de machine ou d'emplacement de modipsl dans votre architecture).



Lancement de la compilation

La commande gmake permet de lancer la compilation depuis le répertoire config/.../
Par exemple pour IPSLCM5A (résolution par défaut soit ORCA2 et LMDZ 96x95x39) :

cd modipsl/config/IPSLCM5A/
gmake



Choix de la résolution de compilation

Suivant la configuration sur laquelle vous travaillez le Makefile peut vous proposer différentes résolutions. Pour les connaître vous devez regarder les différentes target (normalement en lettres majuscules) dans le fichier Makefile. Pour IPSLCM5A ce sont les suivantes :

  • ORCA2xLMD4443
  • ORCA2xLMD5655
  • ORCA2xLMD9671
  • ORCA2xLMD9695
  • ORCA2xLMD9695-L39
  • ORCA2xLMD144142
  • ORCA2xLMD144142-L39

Lorsque vous savez quelle résolution vous désirez vous pouvez alors lancer la compilation :

cd modipsl/config/IPSLCM5A/
gmake resolution_desirée

par exemple

gmake ORCA2xLMD144142-L39 

Petit truc : A la fin de la compilation le makefile crée un fichier .resol qui contiendra la résolution de la dernière compilation. Une fois ce fichier créé vous pouvez ensuite relancer les compilations juste avec la commande gmake vous n'êtes plus obligé de préciser la résolution.



Options de compilations de LMDZ

LMDZ propose les options de compilation suivantes :

makelmdz_fcm [options] -m arch exec
[-h]                       : manuel abrégé
[-d [[IMx]JMx]LM]          : IM, JM, LM sont les dims en x, y, z (def: $dim)
[-p PHYS]                  : compilation avec la physique libf/phyPHYS, (def: lmd)
[-prod / -dev / -debug]    : compilation en mode production (default) / developpement / debug .
[-c false/MPI1/MPI2]       : couplé océan : MPI1/MPI2/false (def: false)
[-v false/true]            : avec ou sans végétation (def: false)
[-chimie INCA/false]       : avec ou sans model de chimie INCA (def: false)
[-parallel none/mpi/omp/mpi_omp] : parallelisation (default: none) : mpi, openmp ou mixte mpi_openmp
[-g GRI]                   : conf. grille dans dyn3d/GRI_xy.h  (def: reg inclue un zoom)
[-io IO]                   : choix d'une librairie I/O, experts (def: ioipsl)
[-include INCLUDES]        : variables supplementaires pour include
[-cpp CPP_KEY]             : cle cpp supplementaires
[-adjnt]                   : adjoint, a remettre en route ...
[-filtre NOMFILTRE]        : prend le filtre dans libf/NOMFILTRE (def: filtrez)
[-link LINKS]              : liens optionels avec d'autres librairies
[-fcm_path path]           : chemin pour fcm (def: le chemin est suppose deja exister dans le PATH)
 -arch nom_arch            : nom de l'architecture cible
 exec                      : exécutable généré

Ces options sont utilisées dans le fichier config/IPSLCM5A/Makefile. Notez que par défaut on demande la compilation en mode mpi.



Spécificité titane

Pour compiler sur titane, il faut charger explicitement la bonne bibliothèque NetCDF. Faire :

module load netcdf/3.6.3

Pour compiler le couplé, voir plus loin les détails :

  • il faut supprimer les 2 clés : "key_vectopt_loop key_vectopt_memory" dans config/IPSLCM5A/AA_make
  • il faut explicitement demander l'utilisation de 5 processeurs pour NEMO. Sinon le message est :
    xmlf90 ../../../lib/libioipsl.a -L/applications/netcdf-3.6.3/lib -lnetcdff -lnetcdf
    /applications/intel/cprof/11.1.056/lib/intel64/libimf.so: warning: warning: feupdateenv is not implemented and will always fail
    ../../../lib/libopa.a(opa.o): In function `opa_mp_opa_model_':
    opa.F90:(.text+0x2a5): relocation truncated to fit: R_X86_64_PC32 against symbol `dom_oce_mp_narea_' defined in COMMON section in ../../../lib/libopa.a(dom_oce.o)
    opa.F90:(.text+0x8bb): relocation truncated to fit: R_X86_64_PC32 against symbol `in_out_manager_mp_nprint_' defined in COMMON section in ../../../lib/libopa.a(in_out_manager.o)
    ...
    opa.F90:(.text+0xa4d): additional relocation overflows omitted from the output
    gmake[2]: *** [../../../bin/opa] Error 1
    

La correction à faire est la suivante :

dans modipsl/modeles/NEMO/WORK/par_oce.F90 (lignes 29-31)
      jpni   = 1,                   &  !: number of processors following i
      jpnj   = 5,                   &  !: number of processors following j
      jpnij  = 5                       !: nb of local domain = nb of
processors



Spécificité SX8

Pour compiler pour la SX8, il faut explicitement charger netcdf pour SX8. Le plus simple est de se préparer une fonction pour cela, par exemple sx8 :

sx8 () {  module load netcdf_sx8 ; export PS1="SX8"' - $PWD : ' ; }



Spécificité SX9

Pour compiler pour la SX9, il faut vous placer dans l'environnement SX9. Le plus simple est de se préparer une fonction pour cela, par exemple sx9 :

sx9 () { module switch SX8 SX9 ; module load netcdf_sx9 ; export PS1="SX9"' - $PWD : ' ; }

A noter : si vous recompilez en restant en SX8 alors que tout a été fait en SX9 jusque là, vous aurez le message suivant d'erreur et aucune recompilation ne se fera.

****************************************************************
INFO -  This Makefile is for host type : sx9mercure
INFO -  Host used has type :             sx8mercure
****************************************************************
ERROR - This Makefile is not compatible whith the host !
****************************************************************
Makefile:22: *** .  Stop.

Plus d'informations sur la compilation SX9/SX8 : là (Intranet)



A qui signaler quand cela ne marche pas?

Si il y a un problème de compilation vous pouvez vous adresser au model manager. Il est indiqué lors de la commande

 ./model -h IPSLCM5A