COFFRE ET NEMO

De POLR
Révision datée du 9 mars 2020 à 16:08 par Caveenj (discussion | contributions) (Page créée avec « # COFFRE 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... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Sauter à la navigation Sauter à la recherche
  1. COFFRE

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 NEM`O`, 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.

    1. Première utilisation du projet COFFRE

Pour une première utilisation du modèle NEMO (CICE4) dans l'environnement COFFRE, il faut procéder de la façon suivante:

  • Sur le site gitlasso, faire un FORK du projet 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.


    1. 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.

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.


$>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


Le résultat de la commande nous indique que nous devons utiliser les révisions fe6c037cda de NEMO et 58e7bc2e27 de outils_ISMER . Le signe - en début de ligne indique que le code des sous-modules requis est absent.

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 grâce à la clef --recursive de la commande git submodule update.


$>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'


On vérifie la présence des sous-modules désirés:

$> 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.[^status]

[^status]: 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.


    1. Structure de COFFRE avec le modèle NEMO

Dans l'arborescence ci-dessous, seuls 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é* et ont été extrait de à 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.


    1. 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* :

``` $>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)

```

Nous allons créer une nouvelle configuration à partir de GSL5KM en utilisant les codes sources de NEMO et CICE4:

``` $>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
```

Lorsque nous voudrons ultérieurement réutiliser cette configuration à partir du serveur gitlasso, on procérera de la façon suivante:


``` $>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)
43b997a57fca9c2cf89406c13bcfc8e710ddeb5f nemo/NEMOGCM/NEMO/CICE_SRC (heads/master)
58e7bc2e2750b0c231e82542649f757b810d7ae6 outils_ISMER (remotes/origin/dev-3-g58e7bc2)

```