Différences entre versions de « COFFRE ET NEMO »

De POLR
Sauter à la navigation Sauter à la recherche
(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... »)
 
 
(45 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
# COFFRE
+
 
 +
== COFFRE avec le modèle NEMO ==
  
 
Un outil de développement donnant accès à un ensemble de modèles à
 
Un outil de développement donnant accès à un ensemble de modèles à
Ligne 5 : Ligne 6 :
  
 
'''COFFRE''' se présente sous la forme d'un dépôt git qui permet
 
'''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''',...).
+
d'utiliser des codes centralisés (e.g., modèles '''NEMO''', '''CICE''',...).
  
 
Tous les codes centralisés viennent se greffer à la copie de travail
 
Tous les codes centralisés viennent se greffer à la copie de travail
Ligne 18 : Ligne 19 :
 
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.
 
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
+
== 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:
+
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 afin de s'en faire un  projet personnel.
+
* Sur le site gitlasso, faire un ''FORK'' du projet [https://gitlasso.uqar.ca/caveenj/coffre coffre] afin de s'en faire un  projet personnel.  
  
Lorsque l'on dispose de sa propre copie du '''COFFRE''' il suffit alors de
+
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
+
faire un ''git clone'' de son projet coffre personnel et d'extraire la branche
sur laquelle on veut travailler.
+
sur laquelle on veut travailler. On travaille toujours avec le même projet '''coffre''' du ''gitlasso''.
  
 +
== Exemple d'utilisation ==
  
## 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.
  
À 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'
  
On veut travailler avec le modèle ''NEMO version 3.6'' couplé au modèle de
+
Les exemples présentent deux variantes des commandes git utilisables:
glace ''CICE4''. La configuration nécessaire se trouve sur la branche ''nemo-cice4''.
+
 
 +
* Commandes git classiques : git checkout ... , git submodule ...
 +
* Outils git-submodule-tools : un ensemble de scripts facilitant l'emploi des sous-modules git
  
 +
{| class="wikitable" ;border: 2px solid darkgray; <!-- Widths are % of the AVAILABLE SCREEN WIDTH  style="border-collapse:collapse"  -->
 +
|-valign="top"
 +
|'''Avec les commandes git classiques'''
  
  $>git  clone git@gitlasso.uqar.ca:caveenj/COFFRE.git
+
  $>git  clone git@gitlasso.uqar.ca:caveenj/coffre.git
  $>cd COFFRE
+
  $>cd coffre
 
  $>git branch -a
 
  $>git branch -a
 
   
 
   
Ligne 53 : Ligne 61 :
 
  Basculement sur la branche 'nemo-cice4'
 
  Basculement sur la branche 'nemo-cice4'
 
  Votre branche est à jour avec 'origin/nemo-cice4'.
 
  Votre branche est à jour avec 'origin/nemo-cice4'.
 +
  
  
Ligne 63 : Ligne 72 :
  
  
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.
+
Le résultat de la commande nous indique que nous devons utiliser les révisions fe6c037cda de NEMO et 58e7bc2e27 <br>
 +
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.
 
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''.
+
'''Note''' : Le sous-module NEMO utilise lui-même son propre sous-module CICE qui sera automatiquement extrait <br>
 +
grâce à la clef '''--recursive''' de la commande ''git submodule update''.
  
  
Ligne 104 : Ligne 115 :
 
   58e7bc2e2750b0c231e82542649f757b810d7ae6 outils_ISMER (remotes/origin/dev-3-g58e7bc2)
 
   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]  
+
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.<ref>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.</ref>
 +
 
 +
 
 +
|'''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.
  
[^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.
+
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...)             
  
 +
|} <!-- END of WikiTable -->
  
## Structure de COFFRE avec le modèle NEMO
+
== 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''.
+
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
+
  **coffre
 
  **├── nemo
 
  **├── nemo
 
  **│   ├── ISMER_NEMO_CONFIG
 
  **│   ├── ISMER_NEMO_CONFIG
Ligne 144 : Ligne 194 :
 
  **└── .gitmodules
 
  **└── .gitmodules
  
On peut en tout temps vérifier si notre répertoire de travail courant fait partie de *COFFRE* ou non.
+
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
 
  
```
+
$> pwd
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.
+
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
  
**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* :
 
  
 +
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é''<ref> 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''. </ref>  et ont été extraits à une révision spécifique.
  
```
 
$> 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.
 
  
 +
'''NOTES IMPORTANTES'''<br>
  
 +
* 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'' :
  
## Créer un nouveau projet utilisant NEMO et CICE4
+
$> 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'.
  
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* :
+
* 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 ==
$>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:
+
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 nemo/NEMOGCM/CONFIG
 
$>./makenemo -n gsl2km -d "OPA_SRC CICE_SRC" -m mpiifort_parallel_linux -r GSL5KM_CICE4
 
  
  ```
+
{| class="wikitable" ;border: 2px solid darkgray; <!-- Widths are % of the AVAILABLE SCREEN WIDTH style="border-collapse:collapse"  -->
Pour sauvegarder notre nouvelle configuration et toutes les expériences s'y rattachant, on retourne dans notre projet **COFFRE**
+
|-valign="top"
 +
|'''Avec les commandes git classiques'''
  
```
+
$>cd coffre
$>cd coffre
+
$>pwd
$> git status
+
/home/caveenj/projets/coffre
Sur la branche gsl2km
+
$>git branch
Modifications qui ne seront pas validées :
+
master
   (utilisez "git add <fichier>..." pour mettre à jour ce qui sera validé)
+
* nemo-cice4
   (utilisez "git checkout -- <fichier>..." pour annuler les modifications dans la copie de travail)
+
$> git checkout -b gsl2km
   (valider ou annuler le contenu non suivi ou modifié dans les sous-modules)
+
  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)
  
modifié :        nemo/ISMER_NEMO_CONFIG/cfg.txt
+
|'''Avec les outils git-submodule-tools'''
modifié :        nemo/NEMOGCM (contenu non suivi)
+
$>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...)              
  
Fichiers non suivis:
+
|} <!-- END of WikiTable -->
  (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")
+
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
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é:
+
$>./makenemo -n gsl2km -d "OPA_SRC CICE_SRC" -m mpiifort_parallel_linux -r GSL5KM_CICE4
  
  ```
+
   
$> git diff nemo/NEMOGCM/
+
Pour sauvegarder notre nouvelle configuration et toutes les expériences s'y rattachant, on retourne dans notre projet '''coffre''' :
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:
+
  $>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 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'
+
$> git diff nemo/NEMOGCM/
[gsl2km ab6e27d] Ajout configuration gsl2km
+
  diff --git a/nemo/NEMOGCM b/nemo/NEMOGCM
90 files changed, 74342 insertions(+)
+
  --- a/nemo/NEMOGCM
create mode 100644 nemo/ISMER_NEMO_CONFIG/gsl2km/EXP00/domain_def.xml
+
  +++ b/nemo/NEMOGCM
create mode 100644 nemo/ISMER_NEMO_CONFIG/gsl2km/EXP00/field_def.xml
+
  @@ -1 +1 @@
create mode 100644 nemo/ISMER_NEMO_CONFIG/gsl2km/EXP00/iodef.xml
+
  -Subproject commit 064dfe692fcac64be8e4c67b16a02cdf3c5e3878
create mode 100644 nemo/ISMER_NEMO_CONFIG/gsl2km/EXP00/namelist_cfg
+
  +Subproject commit 064dfe692fcac64be8e4c67b16a02cdf3c5e3878-dirty
...
+
  $>
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
+
On ajoute le dossier et les fichiers requis par notre nouvelle configuration:
É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
 
  
  ```
+
   
 +
$> 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:
 
Lorsque nous voudrons ultérieurement réutiliser cette configuration à partir du serveur gitlasso, on procérera de la façon suivante:
  
  
```
+
{| class="wikitable" ;border: 2px solid darkgray; <!-- Widths are % of the AVAILABLE SCREEN WIDTH  style="border-collapse:collapse"  -->
$>git clone git@gitlasso.uqar.ca:caveenj/coffre.git
+
|-valign="top"
Clonage dans 'coffre'...
+
|'''Avec les commandes git classiques '''
remote: Counting objects: 746, done.
+
remote: Compressing objects: 100% (448/448), done.
+
$>git clone git@gitlasso.uqar.ca:caveenj/coffre.git
remote: Total 746 (delta 297), reused 737 (delta 294)
+
Clonage dans 'coffre'...
Réception d'objets: 100% (746/746), 4.81 MiB | 36.79 MiB/s, fait.
+
remote: Counting objects: 746, done.
Résolution des deltas: 100% (297/297), fait.
+
remote: Compressing objects: 100% (448/448), done.
$> cd coffre
+
remote: Total 746 (delta 297), reused 737 (delta 294)
$>git branch -a
+
Réception d'objets: 100% (746/746), 4.81 MiB | 36.79 MiB/s, fait.
* master
+
Résolution des deltas: 100% (297/297), fait.
remotes/origin/HEAD -> origin/master
+
 
remotes/origin/gsl2km
+
$> cd coffre
  remotes/origin/master
+
  remotes/origin/nemo-cice4
+
$>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...)             
 +
 +
|} <!-- END of WikiTable -->
 +
 
 +
<hr>
 +
 
 +
 
 +
 
 +
 
  
$> 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)
 
  
```
+
[[Category:NEMO]]
 +
[[Category:Modèles numériques]]
 +
[[Category:COFFRE]]

Version actuelle datée du 16 mars 2020 à 13:29

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


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.[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...)               


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