Aller au contenu. | Aller à la navigation

Outils personnels

Navigation
Vous êtes ici : Accueil / Pour utiliser LMDZ / FAQ / Sources

Sources

Développement, gestion des sources
Montre ou Cacher la réponse Rajouter des sorties
Je veux rajouter des sorties dans la physique. Comment faire suite à la réorganisation des routines histdef/histwrite/phys_output_*?

Les sorties n'ont pas fondamentalement changées, on a juste ajouté une surcouche pour pouvoir choisir les sorties à faire plus facilement. Cela se fait toujours en 2 étapes, une de définition (qui se fait maintenant dans phys_output_mod.F90) et une d'écriture (dans phys_output_write.h). L'ajout principal, c'est la définition d'une nouvelle structure associée à chaque variable à sortir. Cette structure est de type "5 entiers, 1 variable caractère" (voir la définition de ctrl_out au début de phys_output_mod.F90) qui correspondent aux différents niveaux de sorties que l'on souhaite pour la variable à sortir et au nom que l'on veut lui donner dans les fichier de sortie. Par exemple, pour la variable snow, on a défini un drapeau

o_snow = ctrl_out((/ 1, 1, 10, 1, 10 /),'snow')

qui veut dire que la variable s'appellera 'snow' dans les fichiers hist??? et qu'elle sera sortie à partir du niveau (celui qui est défini par lev_hist??? dans physiq.def)

1 dans le fichier histmth
1                        histday
10                      histhf
1                        histins
10                      histLES

Ceci permet, en fait, de contrôler le niveau de sortie des variables directement dans un fichier output.def. Par exemple, la variable topswai est normalement sortie à partir du niveau 4 dans histmth et 10 dans les autres. Si on sortir cette variable dans tous les fichiers histoire sans recompiler les sources, on rajoute la ligne

flag_topswai         =  1, 1, 1, 1, 1

dans le fichier output.def.

Donc pour rajouter des variables de sortie, on définit une politique de sortie de la variable et son petit nom dans une nouvelle structure (que je te suggère de nommer o_qque_chose et qu'on rajoute au début de phys_output_mod.F90 dans la partie déclaration) et ensuite on rajoute les lignes

CALL histdef2d(...)

qu'il faut dans phys_output_mod.F90

et les blocs

IF (o_???flag(iff)<=lev_files(iff)) THEN
CALL histwrite_phy(...)
ENDIF

qu'il faut dans phys_output_write.h

(en se basant sur la variable snow, par exemple)

Enfin, ne pas oublier de modifier les fichiers *xml pour les sorties XIOS (voir la Faq suivante)

Montre ou Cacher la réponse J'ai rajouté une variable dans les sorties. Comment la rajouter dans les xml pour les sorties XIOS?

Vous venez de rajouter une variable de sortie en modifiant les fichiers:

  • libf/phylmd/phys_output_ctrlout_mod.F90
  • libf/phylmd/phys_output_write_mod.F90

 

N'oubliez surtout pas de modifier les fichiers *xml contrôlant les sorties sous XIOS car si vous ne le faites pas, dès que les sorties XIOS seront activées, le modèle plantera (vous demanderez en fait à XIOS de sortir une variable qu'il ne connaît pas).

Il faut définir votre variable dans le fichier DefLists/field_def_lmdz.xml puis l'inclure dans les fichiers DefLists/file_def_hist*xml si vous voulez effectivement la sortir dans les fichiers histoire.

Par exemple, vous avez défini la variable ocond dans phylmd/phys_output_ctrlout_mod.F90:

 TYPE(ctrl_out), SAVE :: o_ocond = ctrl_out((/ 2, 3, 4, 10, 10, 10, 11, 11, 11 /), & 'ocond', 'Condensed water', 'kg/kg', (/ ('', i=1, 9) /))

Il vous faut alors rajouter la ligne

<field id="ocond"    long_name="Condensed water"    unit="kg/kg" />

dans DefLists/field_def_lmdz.xml. Attention, les variables sont regroupés par ensemble de variables 2D et 3D

Puis, pour que la variable soit effectivement écrite dans le fichier histmth.nc, par exemple, vous rajoutez la ligne

<field field_ref="ocond" level="2" />

dans le fichier DefLists/file_def_histmth_lmdz.xml level correspond au niveau de sortie de la variable pour le fichier histmth. A priori, vous mettez les mêmes niveaux que ceux que vous avez défini dans phys_output_ctrlout_mod.F90

Mots-clés associés : FAQ, aide