COFFRE ET NEMO
COFFRE avec le modèle NEMO
Un outil de développement donnant accès à un ensemble de modèles à partir d'un même gabarit.
COFFRE se présente sous la forme d'un dépôt git qui permet d'utiliser des codes centralisés (e.g., modèles NEMO, CICE,...).
Tous les codes centralisés viennent se greffer à la copie de travail sous forme de sous-modules git. L'utilisation des sous-modules offre les fonctionnalités suivantes :
- Le code des sous-modules ne peut pas être modifiés par l'utilisateur
- Seules les modifications apportées à notre clone du coffre sont conservées
- La version utilisée des sous-modules se résume à une révision spécifique sans branche associée (mode HEAD détaché de GIT)
- Les révisions des sous-modules utilisés lors d'un git commit du COFFRE sont mémorisées. On peut ainsi extraire une révision quelconque du COFFRE et récupérer les révisions exactes des sous-modules qui lui sont associées.
Cette page du WIKI documente l'utilisation de COFFRE avec la modèle NEMO couplé à CICE4. Soit, la branche nemo_cice4 et toutes les branches qui sont ou seront créées à partir de celle-ci.
Première utilisation du projet COFFRE
Pour une première utilisation de l'environnement COFFRE, il faut procéder de la façon suivante:
- Sur le site gitlasso, faire un FORK du projet coffre afin de s'en faire un projet personnel.
Lorsque l'on dispose de sa propre copie du coffre il suffit alors de faire un git clone de son projet coffre personnel et d'extraire la branche sur laquelle on veut travailler. On travaille toujours avec le même projet coffre du gitlasso.
Exemple d'utilisation
À partir d'ici, on suppose qu'un fork de COFFRE a déjà été effectué et sauvegardé sur gitlasso sous le nom de projet coffre dans son espace de nommage personnel.
On veut travailler avec le modèle NEMO version 3.6 couplé au modèle de glace CICE4. La configuration nécessaire se trouve sur la branche nemo-cice4'
Les exemples présentent deux variantes des commandes git utilisables:
- Commandes git classiques : git checkout ... , git submodule ...
- Outils git-submodule-tools : un ensemble de scripts facilitant l'emploi des sous-modules git
Avec les commandes git classiques
$>git clone git@gitlasso.uqar.ca:caveenj/coffre.git $>cd coffre $>git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/master remotes/origin/nemo-cice4 remotes/origin/pre_par_nc_io $>git checkout nemo-cice4 Basculement sur la branche 'nemo-cice4' Votre branche est à jour avec 'origin/nemo-cice4'.
On vérifie l'état de nos sous-module:
$>git submodule status --recursive -064dfe692fcac64be8e4c67b16a02cdf3c5e3878 nemo/NEMOGCM -58e7bc2e2750b0c231e82542649f757b810d7ae6 outils_ISMER
Nous allons greffer les sous-modules NEMO et outils_ISMER. Note : Le sous-module NEMO utilise lui-même son propre sous-module CICE qui sera automatiquement extrait
$>git submodule update --init --recursive Submodule 'nemo/NEMOGCM' (git@gitlasso.uqar.ca:caveenj/NEMOGCM.git) registered for path 'nemo/NEMOGCM' Submodule 'outils_ISMER' (git@gitlasso.uqar.ca:sennevil/outils_ISMER.git) registered for path 'outils_ISMER' Cloning into 'nemo/NEMOGCM'... remote: Counting objects: 1263, done. remote: Compressing objects: 100% (993/993), done. remote: Total 1263 (delta 255), reused 1238 (delta 242) Receiving objects: 100% (1263/1263), 9.83 MiB | 11.17 MiB/s, done. Resolving deltas: 100% (255/255), done. Submodule path 'nemo/NEMOGCM': checked out '064dfe692fcac64be8e4c67b16a02cdf3c5e3878' Submodule 'NEMO/CICE_SRC' (git@gitlasso.uqar.ca:sennevil/CICE.git) registered for path 'NEMO/CICE_SRC' Cloning into 'NEMO/CICE_SRC'... remote: Counting objects: 79, done. remote: Compressing objects: 100% (75/75), done. remote: Total 79 (delta 10), reused 0 (delta 0) Receiving objects: 100% (79/79), 480.64 KiB | 0 bytes/s, done. Resolving deltas: 100% (10/10), done. Submodule path 'nemo/NEMOGCM/NEMO/CICE_SRC': checked out '43b997a57fca9c2cf89406c13bcfc8e710ddeb5f' Cloning into 'outils_ISMER'... remote: Counting objects: 236, done. remote: Compressing objects: 100% (221/221), done. remote: Total 236 (delta 77), reused 0 (delta 0) Receiving objects: 100% (236/236), 763.65 MiB | 8.50 MiB/s, done. Resolving deltas: 100% (77/77), done. Submodule path 'outils_ISMER': checked out '58e7bc2e2750b0c231e82542649f757b810d7ae6'
$> git submodule status --recursive 064dfe692fcac64be8e4c67b16a02cdf3c5e3878 nemo/NEMOGCM (r5744-3-g064dfe6) 43b997a57fca9c2cf89406c13bcfc8e710ddeb5f nemo/NEMOGCM/NEMO/CICE_SRC (heads/master) 58e7bc2e2750b0c231e82542649f757b810d7ae6 outils_ISMER (remotes/origin/dev-3-g58e7bc2) Ici, l'absence du symbole - en début de ligne indique que les sous-modules ont bien été récupérés à la révision requise.[1]
|
Avec les outils git-submodule-tools
$>module load git-submodule-tools $>git clone git@gitlasso.uqar.ca:caveenj/coffre.git $>cd coffre $>git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/master remotes/origin/nemo-cice4 remotes/origin/pre_par_nc_io $>git-rcheckout nemo-cice4 Basculement sur la branche 'nemo-cice4' Votre branche est à jour avec 'origin/nemo-cice4'. Submodule 'NEMO/CICE_SRC' (git@gitlasso.uqar.ca:sennevil/CICE.git) registered for path 'nemo/NEMOGCM/NEMO/CICE_SRC' Cloning into '/home/caveenj/projets/coffre/nemo/NEMOGCM/NEMO/CICE_SRC'... Submodule path 'nemo/NEMOGCM/NEMO/CICE_SRC': checked out '43b997a57fca9c2cf89406c13bcfc8e710ddeb5f' On vérifie l'état de nos sous-modules : $> git submodule status --recursive 064dfe692fcac64be8e4c67b16a02cdf3c5e3878 nemo/NEMOGCM (r5744-3-g064dfe6) 43b997a57fca9c2cf89406c13bcfc8e710ddeb5f nemo/NEMOGCM/NEMO/CICE_SRC (heads/master) 58e7bc2e2750b0c231e82542649f757b810d7ae6 outils_ISMER (remotes/origin/dev-3-g58e7bc2) Ici on voit que la commande git-rcheckout extrait automatiquement les sous-modules requis en basculant sur la branche. On peut aussi vérifier l'état des sous-modules avec la commande git-rstatus : $>git-rstatus SUBMODULE WISU <> HEAD state nemo/NEMOGCM (064dfe6...) nemo/NEMOGCM/NEMO/CICE_SRC (43b997a...) outils_ISMER (58e7bc2...) |
Structure de COFFRE avec le modèle NEMO
Dans l'arborescence ci-dessous, seules les composantes précédées des symboles ** font partie de notre projet COFFRE. Toutes les autres composantes proviennent de sous-modules git. On y voit aussi que le répertoire CONFIG qu'on retrouve habituellement sous NEMOGCM a été remplacé par un simple lien symbolique qui pointe vers le répertoire ISMER_NEMO_CONFIG. Le contenu de ISMER_NEMO_CONFIG fait partie du projet COFFRE et non de NEMOGCM.
**coffre **├── nemo **│ ├── ISMER_NEMO_CONFIG **│ │ ├── AMM12 **│ │ ├── C1D_PAPA **│ │ ├── cfg.txt **│ │ ├── CREG025_CMC **│ │ ├── GYRE **│ │ ├── makenemo **│ │ ├── ORCA2_OFF_PISCES **│ │ ├── ORCA2_SAS_LIM **│ │ ├── SHARED **│ │ └── uspcfg.txt │ └── NEMOGCM │ ├── ARCH │ ├── CONFIG -> ../ISMER_NEMO_CONFIG │ ├── EXTERNAL │ ├── fcm-make │ ├── License_CeCILL.txt │ ├── MY_SRC_RPN_ORIG │ ├── NEMO │ ├── SETTE │ └── TOOLS ├── outils_ISMER │ ├── Fortran │ ├── Matlab │ └── Python **├── README.md **└── .gitmodules
On peut en tout temps vérifier si notre répertoire de travail courant fait partie de *coffre* ou non.
$> pwd coffre $> git remote -v origin git@gitlasso.uqar.ca:caveenj/coffre.git (fetch) origin git@gitlasso.uqar.ca:caveenj/coffre.git (push) $> git status Sur la branche nemo-cice4 Votre branche est à jour avec 'origin/nemo-cice4'. $> cd outils_ISMER $> git remote -v origin git@gitlasso.uqar.ca:sennevil/outils_ISMER.git (fetch) origin git@gitlasso.uqar.ca:sennevil/outils_ISMER.git (push) $> git status HEAD détachée sur 58e7bc2 rien à valider, la copie de travail est propre $> cd ../nemo/ISMER_NEMO_CONFIG $> git remote -v origin git@gitlasso.uqar.ca:caveenj/coffre.git (fetch) origin git@gitlasso.uqar.ca:caveenj/coffre.git (push) $> cd ../NEMOGCM $> git remote -v origin git@gitlasso.uqar.ca:caveenj/NEMOGCM.git (fetch) origin git@gitlasso.uqar.ca:caveenj/NEMOGCM.git (push) $> git status HEAD détachée sur 064dfe6
On voit ici que seul notre projet coffre est sur une branche sur laquelle on peut faire des git commit car les sous-modules ont un statut HEAD détaché[2] et ont été extraits à une révision spécifique.
NOTES IMPORTANTES
- Tel que mentionné plus haut, le sous-répertoire CONFIG de NEMOGCM est un lien symbolique pointant vers le répertoire ISMER_NEMO_CONFIG de coffre. Ceci a pour conséquence que lorsqu'on passe du répertoire NEMOGCM au répertoire NEMOGCM/CONFIG on passe du sous-module git NEMOGCM au projet coffre :
$> cd coffre/nemo/NEMOGCM $> git remote -v origin git@gitlasso.uqar.ca:caveenj/NEMOGCM.git (fetch) origin git@gitlasso.uqar.ca:caveenj/NEMOGCM.git (push) $> git status HEAD détachée sur 064dfe6 $> cd CONFIG # répertoire coffre/nemo/NEMOGCM/CONFIG $> git remote -v origin git@gitlasso.uqar.ca:caveenj/coffre.git (fetch) origin git@gitlasso.uqar.ca:caveenj/coffre.git (push) $> git status Sur la branche nemo-cice4 Votre branche est à jour avec 'origin/nemo-cice4'.
- Lorsqu'on travaille avec le modèle NEMO, on doit se placer dans le répertoire coffre/nemo/NEMOGCM/CONFIG pour que le tout fonctionne (makenemo, etc...).
- Lorsqu'on veut utiliser git add, commit, et al pour sauvegarder nos configurations, on doit être dans notre projet coffre et non dans un sous-module.
Créer un nouveau projet utilisant NEMO et CICE4
Dans cet exemple nous allons créer une nouvelle configuration ayant pour nom GSL2KM. Nous allons nous placer à la racine de coffre et créer une nouvelle branche gsl2km à partir de la branche nemo-cice4 :
Avec les commandes git classiques
$>cd coffre $>pwd /home/caveenj/projets/coffre $>git branch master * nemo-cice4 $> git checkout -b gsl2km M nemo/NEMOGCM Basculement sur la nouvelle branche 'gsl2km' $> git submodule status --recursive 064dfe692fcac64be8e4c67b16a02cdf3c5e3878 nemo/NEMOGCM (r5744-3-g064dfe6) 43b997a57fca9c2cf89406c13bcfc8e710ddeb5f nemo/NEMOGCM/NEMO/CICE_SRC (heads/master) 58e7bc2e2750b0c231e82542649f757b810d7ae6 outils_ISMER (remotes/origin/dev-3-g58e7bc2) |
Avec les outils git-submodule-tools
$>module load git-submodule-tools $>cd coffre $>pwd /home/caveenj/projets/coffre $>git branch -a master * nemo-cice4 $> git-rcheckout -b gsl2km M nemo/NEMOGCM Basculement sur la nouvelle branche 'gsl2km' $>git-rstatus SUBMODULE WISU <> HEAD state nemo/NEMOGCM (064dfe6...) nemo/NEMOGCM/NEMO/CICE_SRC (43b997a...) outils_ISMER (58e7bc2...) |
Nous allons créer une nouvelle configuration à partir de GSL5KM en utilisant les codes sources de NEMO et CICE4. Pour la vraie méthode à suivre, consultez la page de documentation NEMO@POLR.
$>cd nemo/NEMOGCM/CONFIG $>./makenemo -n gsl2km -d "OPA_SRC CICE_SRC" -m mpiifort_parallel_linux -r GSL5KM_CICE4
Pour sauvegarder notre nouvelle configuration et toutes les expériences s'y rattachant, on retourne dans notre projet coffre :
$>cd coffre $> git status Sur la branche gsl2km Modifications qui ne seront pas validées : (utilisez "git add <fichier>..." pour mettre à jour ce qui sera validé) (utilisez "git checkout -- <fichier>..." pour annuler les modifications dans la copie de travail) (valider ou annuler le contenu non suivi ou modifié dans les sous-modules) modifié : nemo/ISMER_NEMO_CONFIG/cfg.txt modifié : nemo/NEMOGCM (contenu non suivi) Fichiers non suivis: (utilisez "git add <fichier>..." pour inclure dans ce qui sera validé) nemo/ISMER_NEMO_CONFIG/gsl2km/ aucune modification n'a été ajoutée à la validation (utilisez "git add" ou "git commit -a")
Dans l'exemple ci-dessus, nous remarquons que git considère que le répertoire nemo/NEMOGCM a été modifié. En effet, des fichiers temporaires y ont été créés dans le répertoire TOOLS/COMPILE lors de la compilation du modèle. Puisque ce répertoire fait partie d'un sous-module, nous n'avons pas à nous préoccuper de ces nouveaux fichiers. La commande git diff nous indique que git voit bien que le sous-module a été modifié:
$> git diff nemo/NEMOGCM/ diff --git a/nemo/NEMOGCM b/nemo/NEMOGCM --- a/nemo/NEMOGCM +++ b/nemo/NEMOGCM @@ -1 +1 @@ -Subproject commit 064dfe692fcac64be8e4c67b16a02cdf3c5e3878 +Subproject commit 064dfe692fcac64be8e4c67b16a02cdf3c5e3878-dirty $>
On ajoute le dossier et les fichiers requis par notre nouvelle configuration:
$> git add nemo/ISMER_NEMO_CONFIG/cfg.txt $> git add nemo/ISMER_NEMO_CONFIG/gsl2km $> git status Sur la branche gsl2km Modifications qui seront validées : (utilisez "git reset HEAD <fichier>..." pour désindexer) modifié : nemo/ISMER_NEMO_CONFIG/cfg.txt nouveau fichier : nemo/ISMER_NEMO_CONFIG/gsl2km/EXP00/domain_def.xml nouveau fichier : nemo/ISMER_NEMO_CONFIG/gsl2km/EXP00/field_def.xml nouveau fichier : nemo/ISMER_NEMO_CONFIG/gsl2km/EXP00/iodef.xml nouveau fichier : nemo/ISMER_NEMO_CONFIG/gsl2km/EXP00/namelist_cfg ... lignes escamotées ... nouveau fichier : nemo/ISMER_NEMO_CONFIG/gsl2km/MY_SRC/tranxt.F90 nouveau fichier : nemo/ISMER_NEMO_CONFIG/gsl2km/MY_SRC/trasdmp.F90 nouveau fichier : nemo/ISMER_NEMO_CONFIG/gsl2km/MY_SRC/updtide.F90 nouveau fichier : nemo/ISMER_NEMO_CONFIG/gsl2km/MY_SRC/wrk_nemo.F90 nouveau fichier : nemo/ISMER_NEMO_CONFIG/gsl2km/MY_SRC/zdfgls.F90 nouveau fichier : nemo/ISMER_NEMO_CONFIG/gsl2km/cpp_gsl2km.fcm $> git commit -m'Ajout configuration gsl2km' [gsl2km ab6e27d] Ajout configuration gsl2km 90 files changed, 74342 insertions(+) create mode 100644 nemo/ISMER_NEMO_CONFIG/gsl2km/EXP00/domain_def.xml create mode 100644 nemo/ISMER_NEMO_CONFIG/gsl2km/EXP00/field_def.xml create mode 100644 nemo/ISMER_NEMO_CONFIG/gsl2km/EXP00/iodef.xml create mode 100644 nemo/ISMER_NEMO_CONFIG/gsl2km/EXP00/namelist_cfg ... lignes escamotées ... create mode 100644 nemo/ISMER_NEMO_CONFIG/gsl2km/MY_SRC/wrk_nemo.F90 create mode 100644 nemo/ISMER_NEMO_CONFIG/gsl2km/MY_SRC/zdfgls.F90 create mode 100644 nemo/ISMER_NEMO_CONFIG/gsl2km/cpp_gsl2km.fcm $> git push origin gsl2km Énumération des objets: 738, fait. Décompte des objets: 100% (738/738), fait. Delta compression using up to 40 threads. Compression des objets: 100% (443/443), fait. Écriture des objets: 100% (737/737), 4.81 MiB | 17.34 MiB/s, fait. Total 737 (delta 294), reused 726 (delta 291) To gitlasso.uqar.ca:caveenj/coffre.git * [new branch] gsl2km -> gsl2km
Extraire une configuration existante
Lorsque nous voudrons ultérieurement réutiliser cette configuration à partir du serveur gitlasso, on procérera de la façon suivante:
Avec les commandes git classiques
$>git clone git@gitlasso.uqar.ca:caveenj/coffre.git Clonage dans 'coffre'... remote: Counting objects: 746, done. remote: Compressing objects: 100% (448/448), done. remote: Total 746 (delta 297), reused 737 (delta 294) Réception d'objets: 100% (746/746), 4.81 MiB | 36.79 MiB/s, fait. Résolution des deltas: 100% (297/297), fait. $> cd coffre $>git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/gsl2km remotes/origin/master remotes/origin/nemo-cice4 $> git checkout gsl2km Extraction des fichiers: 100% (1348/1348), fait. La branche 'gsl2km' est paramétrée pour suivre la branche distante 'gsl2km' depuis 'origin'. Basculement sur la nouvelle branche 'gsl2km' $>git submodule status --recursive -064dfe692fcac64be8e4c67b16a02cdf3c5e3878 nemo/NEMOGCM -58e7bc2e2750b0c231e82542649f757b810d7ae6 outils_ISMER $> git submodule update --init --recursive Sous-module 'nemo/NEMOGCM' (git@gitlasso.uqar.ca:caveenj/NEMOGCM.git) enregistré pour le chemin 'nemo/NEMOGCM' Sous-module 'outils_ISMER' (git@gitlasso.uqar.ca:sennevil/outils_ISMER.git) enregistré pour le chemin 'outils_ISMER' Clonage dans '/home/caveenj/projets/coffre/coffre/nemo/NEMOGCM'... Clonage dans '/home/caveenj/projets/coffre/coffre/outils_ISMER'... Chemin de sous-module 'nemo/NEMOGCM' : '064dfe692fcac64be8e4c67b16a02cdf3c5e3878' extrait Sous-module 'NEMO/CICE_SRC' (git@gitlasso.uqar.ca:sennevil/CICE.git) enregistré pour le chemin 'nemo/NEMOGCM/NEMO/CICE_SRC' Clonage dans '/home/caveenj/projets/coffre/coffre/nemo/NEMOGCM/NEMO/CICE_SRC'... Chemin de sous-module 'nemo/NEMOGCM/NEMO/CICE_SRC' : '43b997a57fca9c2cf89406c13bcfc8e710ddeb5f' extrait Chemin de sous-module 'outils_ISMER' : '58e7bc2e2750b0c231e82542649f757b810d7ae6' extrait $> git submodule status --recursive 064dfe692fcac64be8e4c67b16a02cdf3c5e3878 nemo/NEMOGCM (r5744-3-g064dfe6) 58e7bc2e2750b0c231e82542649f757b810d7ae6 outils_ISMER (remotes/origin/dev-3-g58e7bc2) 43b997a57fca9c2cf89406c13bcfc8e710ddeb5f nemo/NEMOGCM/NEMO/CICE_SRC (heads/master) $> |
Avec les outils git-submodule-tools
$>module load git-submodule-tools $> git clone git@gitlasso.uqar.ca:caveenj/coffre.git Clonage dans 'coffre'... remote: Counting objects: 758, done. remote: Compressing objects: 100% (451/451), done. remote: Total 758 (delta 307), reused 750 (delta 304) Réception d'objets: 100% (758/758), 4.82 MiB | 32.88 MiB/s, fait. Résolution des deltas: 100% (307/307), fait. $> cd coffre/ $>git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/gsl2km remotes/origin/master remotes/origin/nemo-cice4 $> git-rcheckout gsl2km Checking out files: 100% (1261/1261), done. Branch 'gsl2km' set up to track remote branch 'gsl2km' from 'origin'. Switched to a new branch 'gsl2km' Submodule 'nemo/NEMOGCM' (git@gitlasso.uqar.ca:caveenj/NEMOGCM.git) registered for path 'nemo/NEMOGCM' Submodule 'outils_ISMER' (git@gitlasso.uqar.ca:sennevil/outils_ISMER.git) registered for path 'outils_ISMER' Cloning into '/home/caveenj/projets/coffre/nemo/NEMOGCM'... Cloning into '/home/caveenj/projets/coffre/outils_ISMER'... Submodule path 'nemo/NEMOGCM': checked out '064dfe692fcac64be8e4c67b16a02cdf3c5e3878' Submodule 'NEMO/CICE_SRC' (git@gitlasso.uqar.ca:sennevil/CICE.git) registered for path 'nemo/NEMOGCM/NEMO/CICE_SRC' Cloning into '/home/caveenj/projets/coffre/nemo/NEMOGCM/NEMO/CICE_SRC'... Submodule path 'nemo/NEMOGCM/NEMO/CICE_SRC': checked out '43b997a57fca9c2cf89406c13bcfc8e710ddeb5f' Submodule path 'outils_ISMER': checked out '58e7bc2e2750b0c231e82542649f757b810d7ae6' $>git-rstatus SUBMODULE WISU <> HEAD state nemo/NEMOGCM (064dfe6...) nemo/NEMOGCM/NEMO/CICE_SRC (43b997a...) outils_ISMER (58e7bc2...) |
- ↑ Le symbole - dans le résultat d'un git submodule status indique que le sous-module est absent. Le symbole + indique que la révision du sous-module est différente de celle attendue par la configuration définie dans le fichier .gitmodules du projet.
- ↑ Lorsque git status indique HEAD détaché c'est que nous ne sommes pas sur une branche . On ne devrait donc pas faire un git commit.