| 1 | = Compilation = |
| 2 | [https://forge.ipsl.jussieu.fr/igcmg/wiki/ModipslBeginner1 Retour au sommaire du mode d'emploi] |
| 3 | [[BR]][[BR]] |
| 4 | [[PageOutline]] |
| 5 | |
| 6 | |
| 7 | == FCM == |
| 8 | Certains modèles de l'IPSL utilisent l'outil [http://www.metoffice.gov.uk/research/nwp/external/fcm/ FCM] pour gérer la création de leur makefile (modèle LMDZ, modèle INCA ...). |
| 9 | 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 : |
| 10 | {{{ |
| 11 | # sur mercure, platine et titane |
| 12 | PATH=~p86ipsl/fcm/bin:$PATH |
| 13 | # sur brodie |
| 14 | PATH=/home/rech/psl/rpsl035/fcm/bin:$PATH |
| 15 | # sur vargas |
| 16 | PATH=/homegpfs/rech/psl/rpsl035/FCM/bin/fcm:$PATH |
| 17 | }}} |
| 18 | [[BR]] |
| 19 | |
| 20 | [[BR]] [[BR]] |
| 21 | == Création du Makefile == |
| 22 | |
| 23 | Avant la première compilation des différents modèles de votre configuration |
| 24 | vous devez créer les makefiles adaptés à la machine sur laquelle vous travaillez. |
| 25 | {{{ |
| 26 | cd modipsl/util |
| 27 | ./ins_make |
| 28 | }}} |
| 29 | La commande ins_make permet de créer un makefile pour la config. Dans notre exemple '''modipsl/config/IPSLCM5A/Makefile'''. |
| 30 | 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 |
| 31 | changement de machine ou d'emplacement de modipsl dans votre architecture). |
| 32 | |
| 33 | |
| 34 | [[BR]][[BR]] |
| 35 | == Lancement de la compilation == |
| 36 | La commande gmake permet de lancer la compilation depuis le répertoire config/.../ [[BR]] |
| 37 | Par exemple pour IPSLCM5A (résolution par défaut soit ORCA2 et LMDZ 96x95x39) : |
| 38 | {{{ |
| 39 | cd modipsl/config/IPSLCM5A/ |
| 40 | gmake |
| 41 | }}} |
| 42 | |
| 43 | |
| 44 | [[BR]][[BR]] |
| 45 | == Choix de la résolution de compilation == |
| 46 | Suivant la configuration sur laquelle vous travaillez le Makefile peut vous proposer différentes résolutions. Pour les connaître vous devez |
| 47 | regarder les différentes target (normalement en lettres majuscules) dans le fichier Makefile. Pour IPSLCM5A ce sont les suivantes : |
| 48 | * ORCA2xLMD4443 |
| 49 | * ORCA2xLMD5655 |
| 50 | * ORCA2xLMD9671 |
| 51 | * ORCA2xLMD9695 |
| 52 | * '''ORCA2xLMD9695-L39''' |
| 53 | * ORCA2xLMD144142 |
| 54 | * ORCA2xLMD144142-L39 |
| 55 | Lorsque vous savez quelle résolution vous désirez vous pouvez alors lancer la compilation : |
| 56 | {{{ |
| 57 | cd modipsl/config/IPSLCM5A/ |
| 58 | gmake resolution_desirée |
| 59 | }}} |
| 60 | par exemple |
| 61 | {{{ |
| 62 | gmake ORCA2xLMD144142-L39 |
| 63 | }}} |
| 64 | |
| 65 | Petit truc : A la fin de la compilation le makefile crée un fichier .resol qui contiendra la résolution |
| 66 | de la dernière compilation. Une fois ce fichier créé vous pouvez ensuite relancer les compilations |
| 67 | juste avec la commande '''gmake''' vous n'êtes plus obligé de préciser la résolution. |
| 68 | |
| 69 | |
| 70 | [[BR]][[BR]] |
| 71 | == Options de compilations de LMDZ == |
| 72 | LMDZ propose les options de compilation suivantes : |
| 73 | {{{ |
| 74 | makelmdz_fcm [options] -m arch exec |
| 75 | [-h] : manuel abrégé |
| 76 | [-d [[IMx]JMx]LM] : IM, JM, LM sont les dims en x, y, z (def: $dim) |
| 77 | [-p PHYS] : compilation avec la physique libf/phyPHYS, (def: lmd) |
| 78 | [-prod / -dev / -debug] : compilation en mode production (default) / developpement / debug . |
| 79 | [-c false/MPI1/MPI2] : couplé océan : MPI1/MPI2/false (def: false) |
| 80 | [-v false/true] : avec ou sans végétation (def: false) |
| 81 | [-chimie INCA/false] : avec ou sans model de chimie INCA (def: false) |
| 82 | [-parallel none/mpi/omp/mpi_omp] : parallelisation (default: none) : mpi, openmp ou mixte mpi_openmp |
| 83 | [-g GRI] : conf. grille dans dyn3d/GRI_xy.h (def: reg inclue un zoom) |
| 84 | [-io IO] : choix d'une librairie I/O, experts (def: ioipsl) |
| 85 | [-include INCLUDES] : variables supplementaires pour include |
| 86 | [-cpp CPP_KEY] : cle cpp supplementaires |
| 87 | [-adjnt] : adjoint, a remettre en route ... |
| 88 | [-filtre NOMFILTRE] : prend le filtre dans libf/NOMFILTRE (def: filtrez) |
| 89 | [-link LINKS] : liens optionels avec d'autres librairies |
| 90 | [-fcm_path path] : chemin pour fcm (def: le chemin est suppose deja exister dans le PATH) |
| 91 | -arch nom_arch : nom de l'architecture cible |
| 92 | exec : exécutable généré |
| 93 | }}} |
| 94 | Ces options sont utilisées dans le fichier config/IPSLCM5A/Makefile. Notez que par défaut on demande la compilation en mode mpi. |
| 95 | |
| 96 | |
| 97 | [[BR]] [[BR]] |
| 98 | == Spécificité titane == |
| 99 | Pour compiler sur titane, il faut charger explicitement la bonne bibliothèque NetCDF. Faire : |
| 100 | {{{ |
| 101 | module load netcdf/3.6.3 |
| 102 | }}} |
| 103 | |
| 104 | Pour compiler le couplé, voir plus loin les détails : |
| 105 | * il faut supprimer les 2 clés : "key_vectopt_loop key_vectopt_memory" dans config/IPSLCM5A/AA_make |
| 106 | * il faut explicitement demander l'utilisation de 5 processeurs pour NEMO. Sinon le message est : |
| 107 | {{{ |
| 108 | xmlf90 ../../../lib/libioipsl.a -L/applications/netcdf-3.6.3/lib -lnetcdff -lnetcdf |
| 109 | /applications/intel/cprof/11.1.056/lib/intel64/libimf.so: warning: warning: feupdateenv is not implemented and will always fail |
| 110 | ../../../lib/libopa.a(opa.o): In function `opa_mp_opa_model_': |
| 111 | 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) |
| 112 | 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) |
| 113 | ... |
| 114 | opa.F90:(.text+0xa4d): additional relocation overflows omitted from the output |
| 115 | gmake[2]: *** [../../../bin/opa] Error 1 |
| 116 | }}} |
| 117 | La correction à faire est la suivante : |
| 118 | {{{ |
| 119 | dans modipsl/modeles/NEMO/WORK/par_oce.F90 (lignes 29-31) |
| 120 | jpni = 1, & !: number of processors following i |
| 121 | jpnj = 5, & !: number of processors following j |
| 122 | jpnij = 5 !: nb of local domain = nb of |
| 123 | processors |
| 124 | |
| 125 | }}} |
| 126 | |
| 127 | |
| 128 | [[BR]] [[BR]] |
| 129 | == Spécificité SX8 == |
| 130 | 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 : |
| 131 | {{{ |
| 132 | sx8 () { module load netcdf_sx8 ; export PS1="SX8"' - $PWD : ' ; } |
| 133 | }}} |
| 134 | |
| 135 | |
| 136 | [[BR]] [[BR]] |
| 137 | == Spécificité SX9 == |
| 138 | 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 : |
| 139 | {{{ |
| 140 | sx9 () { module switch SX8 SX9 ; module load netcdf_sx9 ; export PS1="SX9"' - $PWD : ' ; } |
| 141 | }}} |
| 142 | |
| 143 | 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. |
| 144 | {{{ |
| 145 | **************************************************************** |
| 146 | INFO - This Makefile is for host type : sx9mercure |
| 147 | INFO - Host used has type : sx8mercure |
| 148 | **************************************************************** |
| 149 | ERROR - This Makefile is not compatible whith the host ! |
| 150 | **************************************************************** |
| 151 | Makefile:22: *** . Stop. |
| 152 | }}} |
| 153 | |
| 154 | Plus d'informations sur la compilation SX9/SX8 : [http://wiki.ipsl.jussieu.fr/Pole/Couple/CCRT/SX9 là (Intranet)] |
| 155 | |
| 156 | |
| 157 | [[BR]] [[BR]] |
| 158 | == A qui signaler quand cela ne marche pas? == |
| 159 | Si il y a un problème de compilation vous pouvez vous adresser au ''model manager''. Il est indiqué lors de la commande |
| 160 | {{{ |
| 161 | ./model -h IPSLCM5A |
| 162 | }}} |