3 | | David est sur le coup; dernier commentaire transmit à Frédéric (13 sept 2019) : |
| 3 | Voici les caractéristiques du nouveau "traceur.def", qui répond aux caractéristiques fixées au cours discussion du bocal du 3 octobre: |
| 4 | * fichier texte de même nom lu par un parseur dédié |
| 5 | * possibilité d'ajouter des commentaires (ici: toutes les chaînes précédées par le caractère "#" sont des commentaires). |
| 6 | * subdivision en sections, signalées par le caractère "&" en première position (inspiré des namelists fortran). |
| 7 | 1. "version", donnant le numéro de version du fichier présent |
| 8 | 2. "default", donnant les paramètres par défaut sous la forme <clef>=<valeur> |
| 9 | 3. -... une section par composante. Le nombre de traceurs en entête est supprimé. |
| 10 | * dans chaque section "composante": |
| 11 | - OBLIGATOIRE: nom du(des) traceur(s) (séparateur: "," si plusieurs traceurs). Premier élément de la ligne. |
| 12 | - OPTIONNEL (la valeur correspondante de la section "default" est adoptée si elle est absente): |
| 13 | 1. nom du(des) parent(s) (séparateur: "," si plusieurs parents, ce qui n'est possible que pour des traceurs de tagging) |
| 14 | 2. hadv et vadv (schéma d'advection horizontal et vertical) |
| 15 | 3. phases: "g"as, "l"iquid, "s"olid |
| 16 | 4. type de traceur (pour l'instant: "tracer" ou "tag" uniquement) |
| 17 | Ce format permet de compacter fortement les listes et d'éviter des erreurs. |
| 18 | Il laisse la possibilité d'ajouter d'autres clefs par la suite (les coefficients de fractionnement notamment). |
| 19 | * on peut utiliser la clef "trac_type" de "run.def" pour lister les composantes qu'il faut lire et fusionner les sections. Exemple: trac_type=merge:repro,inca[[br]] |
| 20 | Par défaut, les listes sont fusionnées ("merge"): les traceurs de même noms sont fusionnés. |
| 21 | Avec plutôt trac_type=cumulate:..., on choisit de les cumuler: le nom de section est ajouté en suffixe aux noms de traceurs identiques dans plusieurs sections. |
| 22 | |
| 23 | Quelques décisions complémentaires: |
| 24 | * utilisation de noms plus explicite pour les isotopes: l'atome de masse non nominale est précédé par sa masse atomique entre crochets. Ainsi: |
5 | | Voici une proposition que je suis en train de coder pour les traceurs.def, qui |
6 | | les généralise un peu et les compacte. |
7 | | Provisoire car il n'y a pas encore les sections pour différents modèles, avec |
8 | | décision de fusionner ou cumuler les listes (cf. propositions de Thibaut, avec |
9 | | qui j'en rediscuterai). |
10 | | * ajouter 2 colonnes pour les espèces de génération 1: |
11 | | - colonne 5: le numéro de génération |
12 | | - colonne 6: les phases, dont les générations suivantes héritent. |
13 | | À choisir, je préférerais "-g"as "-l"iquid et "-s"olid plutôt que les actuels |
14 | | "v"apour "l"iquid et "i"ce, très connoté eau. |
15 | | Le tiret, c'est pour éviter de possibles ambigüités avec des espèces chimiques |
16 | | (par exemple - ridicule, mais ça illustre: Cl pourrait être du carbone liquide |
17 | | ou du chlore). |
| 26 | O17 => H2[17]O |
| 27 | O18 => H2[18]O |
| 28 | DHO => H[2]HO |
| 29 | THO => H[3]HO |
| 30 | }}} |
| 31 | * utilisation des suffixes "-g", "-l", "-s" pour les phases "g"aseuse, "l"iquide et "s"olide, plus généraux que "v" et "i" ("v"apour et "i"ce) |
| 32 | Le séparateur "-" permet d'éviter de possibles confusions entre une lettre désignant la phase et un nom d'élément (le "l" de Cl - chlore - par exemple) |
| 33 | * absence de chaînage des noms avec la liste complète des ancêtres, rendue possible par l'utilisation de noms plus explicites pour les traceurs (dont la hiérarchie est connue par ailleurs). |
| 34 | * possibilité de tagger à toute génération sans que le tagging ne concerne nécessairement une famille complète ou une génération complète. |
| 35 | En effet (remarque de Frédéric), sommer des traceurs géographiques de différentes régions ne donne pas nécessairement la même chose que le traceur de la somme des régions, car le transport n'est pas nécessairement linéaire. |
| 36 | * le tagging concerne par contre toutes les phases d'une espèce donnée. |
| 37 | * le mot-clef spécial "all" utilisé comme nom de parent d'un traceur de type "tag" permet de tagger tous les traceurs. |
19 | | * préfacer les noms d'espèces de tagging ("traceurs d'isotopes", ou couleurs, |
20 | | ou régions) par un préfixe dédié (par exemple "t#") pour bien les identifier, |
21 | | et pouvoir indiquer "all" à la place du nom du fluide porteur (colonne 4) ou |
22 | | encore une liste d'espèces (séparées par "/" par exemple) => plus pratique si |
23 | | on veut suivre beaucoup d'espèces dans les mêmes régions. |
24 | | |
25 | | * ne pas préciser la génération de tagging en partant du principe qu'il s'agit |
26 | | toujours de la dernière. |
27 | | Ce serait tordu de faire du tagging géographique de traceurs de tagging. Autant |
28 | | alors choisir de tagger avec le découpage le plus fin directement, quitte à |
29 | | sommer ensuite. |
30 | | |
31 | | Voilà un exemple. On a 4 traceurs de génération 1 (vapeur + eau liquide +Rn |
32 | | +Pb), des isotopes de l'eau (génération 2) et du tagging bleu et rouge pour les |
33 | | isotopes de l'eau (génération 3) et pour le radon (génération 2). |
34 | | Avec ce format, qui entraîne une reconstruction en interne (donc sans erreurs) |
35 | | de la liste "ancien format", on passe de ceci: |
36 | | |
37 | | 24 |
38 | | 14 14 H2O-vAir |
39 | | 10 10 H2O-lAir |
40 | | 10 10 Rn Air |
41 | | 10 10 Pb Air |
42 | | 10 10 H2O-v_eauH2O-v |
43 | | 10 10 H2O-l_eauH2O-l |
44 | | 10 10 H2O-v_HDO H2O-v |
45 | | 10 10 H2O-l_HDO H2O-l |
46 | | 10 10 H2O-v_O18 H2O-v |
47 | | 10 10 H2O-l_O18 H2O-l |
48 | | 10 10 H2O-v_eau_blue H2O-v_eau |
49 | | 10 10 H2O-v_eau_red H2O-v_eau |
50 | | 10 10 H2O-l_eau_blue H2O-l_eau |
51 | | 10 10 H2O-l_eau_red H2O-l_eau |
52 | | 10 10 H2O-v_HDO_blue H2O-v_HDO |
53 | | 10 10 H2O-v_HDO_red H2O-v_HDO |
54 | | 10 10 H2O-l_HDO_blue H2O-l_HDO |
55 | | 10 10 H2O-l_HDO_red H2O-l_HDO |
56 | | 10 10 H2O-v_O18_blue H2O-v_O18 |
57 | | 10 10 H2O-v_O18_red H2O-v_O18 |
58 | | 10 10 H2O-l_O18_blue H2O-l_O18 |
59 | | 10 10 H2O-l_O18_red H2O-l_O18 |
60 | | 10 10 Rn_blueRn |
61 | | 10 10 Rn_red Rn |
62 | | |
63 | | à ceci: |
64 | | |
65 | | 24 |
66 | | 14 14 H2O Air 1 vl |
67 | | 10 10 Rn Air 1 v |
68 | | 10 10 Pb Air 1 v |
69 | | 10 10 eau H2O 2 |
70 | | 10 10 HDO H2O 2 |
71 | | 10 10 O18 H2O 2 |
72 | | 10 10 t#blue H2O/Rn |
73 | | 10 10 t#red H2O/Rn |
74 | | |
75 | | Seules vérifications (il y en a bien plus actuellement): |
76 | | * détecter d'éventuelles générations manquantes. Par exemple, si on rajoutait |
77 | | la ligne suivante, ça coincerait, car Pb n'a pas de descendants de génération |
78 | | 2: |
79 | | 10 10 ZZZ Pb 3 |
80 | | * Vérifier que le chiffre en première ligne correspond bien au nombre de |
81 | | traceurs de la liste une fois "décompactée". |
| 39 | Exemple de liste (volontairement en désordre pour illustrer que le parseur s'en sort bien) au nouveau format: |
| 40 | {{{ |
| 41 | &version=1.0 |
| 42 | &default |
| 43 | # Note: currently, the 2 recognized types are "tracer" and "tag" |
| 44 | type_trac=lmdz parent=air hadv=10 vadv=10 phases=g type=tracer |
| 45 | &lmdz |
| 46 | blue,red parent=H[2]HO,H2O type=tag # tagging tracer of gen 1&2 tracers |
| 47 | H2O phases=g hadv=14 vadv=14 # water vapour |
| 48 | water,H2[18]O,H[2]HO,H[3]HO parent=H2O # H2O childs |
| 49 | yellow parent=H[3]HO type=tag # tagging tracer for single isotope |
| 50 | H2O phases=ls # H2O in liquid and solid phases |
| 51 | }}} |
84 | | Camille et Slimane ont trouvé l'idée acceptable (il manquait un ou deux détails |
85 | | dans ce que je leur avais envoyé, mais rien d'essentiel) ; et toi ? |
86 | | Bon week-end, |
87 | | David |
| 54 | Le parseur en donne la version décompactée qui suit (sorties textes effectives telles qu'elles apparaîtront dans LMDZ): |
| 55 | |
| 56 | {{{ |
| 57 | infotrac_init: Information stored in infotrac : |
| 58 | infotrac_init: iq | tname | ttext | iadv | niadv | ipar |
| 59 | infotrac_init: --------------------------------------------------------------------------- |
| 60 | infotrac_init: 1 | H2O-g | H2O-gVLH | 14 | 1 | 0 |
| 61 | infotrac_init: 2 | H2O-l | H2O-lVL1 | 10 | 2 | 0 |
| 62 | infotrac_init: 3 | H2O-s | H2O-sVL1 | 10 | 3 | 0 |
| 63 | infotrac_init: 4 | H2O-g_blue | H2O-g_blueVL1 | 10 | 4 | 1 |
| 64 | infotrac_init: 5 | H2O-l_blue | H2O-l_blueVL1 | 10 | 5 | 2 |
| 65 | infotrac_init: 6 | H2O-s_blue | H2O-s_blueVL1 | 10 | 6 | 3 |
| 66 | infotrac_init: 7 | H2O-g_red | H2O-g_redVL1 | 10 | 7 | 1 |
| 67 | infotrac_init: 8 | H2O-l_red | H2O-l_redVL1 | 10 | 8 | 2 |
| 68 | infotrac_init: 9 | H2O-s_red | H2O-s_redVL1 | 10 | 9 | 3 |
| 69 | infotrac_init: 10 | water-g | water-gVL1 | 10 | 10 | 1 |
| 70 | infotrac_init: 11 | water-l | water-lVL1 | 10 | 11 | 2 |
| 71 | infotrac_init: 12 | water-s | water-sVL1 | 10 | 12 | 3 |
| 72 | infotrac_init: 13 | H2[18]O-g | H2[18]O-gVL1 | 10 | 13 | 1 |
| 73 | infotrac_init: 14 | H2[18]O-l | H2[18]O-lVL1 | 10 | 14 | 2 |
| 74 | infotrac_init: 15 | H2[18]O-s | H2[18]O-sVL1 | 10 | 15 | 3 |
| 75 | infotrac_init: 16 | H[2]HO-g | H[2]HO-gVL1 | 10 | 16 | 1 |
| 76 | infotrac_init: 17 | H[2]HO-l | H[2]HO-lVL1 | 10 | 17 | 2 |
| 77 | infotrac_init: 18 | H[2]HO-s | H[2]HO-sVL1 | 10 | 18 | 3 |
| 78 | infotrac_init: 19 | H[3]HO-g | H[3]HO-gVL1 | 10 | 19 | 1 |
| 79 | infotrac_init: 20 | H[3]HO-l | H[3]HO-lVL1 | 10 | 20 | 2 |
| 80 | infotrac_init: 21 | H[3]HO-s | H[3]HO-sVL1 | 10 | 21 | 3 |
| 81 | infotrac_init: 22 | H[2]HO-g_blue | H[2]HO-g_blueVL1 | 10 | 22 | 16 |
| 82 | infotrac_init: 23 | H[2]HO-l_blue | H[2]HO-l_blueVL1 | 10 | 23 | 17 |
| 83 | infotrac_init: 24 | H[2]HO-s_blue | H[2]HO-s_blueVL1 | 10 | 24 | 18 |
| 84 | infotrac_init: 25 | H[2]HO-g_red | H[2]HO-g_redVL1 | 10 | 25 | 16 |
| 85 | infotrac_init: 26 | H[2]HO-l_red | H[2]HO-l_redVL1 | 10 | 26 | 17 |
| 86 | infotrac_init: 27 | H[2]HO-s_red | H[2]HO-s_redVL1 | 10 | 27 | 18 |
| 87 | infotrac_init: 28 | H[3]HO-g_yellow | H[3]HO-g_yellowVL1 | 10 | 28 | 19 |
| 88 | infotrac_init: 29 | H[3]HO-l_yellow | H[3]HO-l_yellowVL1 | 10 | 29 | 20 |
| 89 | infotrac_init: 30 | H[3]HO-s_yellow | H[3]HO-s_yellowVL1 | 10 | 30 | 21 |
| 90 | infotrac_init: fin |
| 91 | }}} |
| 92 | |
| 93 | On peut ajouter d'autres clefs, notamment les ratios de fractionnement. |
137 | | Suite de l'affaire: mail de David du 27/09/2019 |
138 | | {{{ |
139 | | Comme annoncé l'autre jour, voici une proposition mise à jour pour "traceur.def". |
140 | | La précédente n'allait pas car il fallait une valeur de hconv/vconv par phase. |
141 | | Ma version d'"infotrac.f90" qui fait le parsing correspondant, doit encore être débugée. |
142 | | |
143 | | Thibaut, ça me semble compatible avec ce que tu avais dit le jour de la réunion, sachant |
144 | | que l'on pourrait ajouter d'autres colonnes (ou noter plutôt comme ça: <mot clef>=<valeur>, |
145 | | comme dans les fichiers *.def) |
146 | | |
147 | | Bonne journée, |
148 | | David |
149 | | |
150 | | |
151 | | Proposition pour "traceur.def" |
152 | | Plutôt que: |
153 | | <nombre de traceurs> (ligne 1) |
154 | | <hadv> <vadv> <traceur> <fluide transporteur> (autres lignes) |
155 | | ... |
156 | | |
157 | | Utiliser: |
158 | | &<nom de section 1> |
159 | | <traceur> <fluide transporteur> <phases> <hadv1[,hadv2[,hadv3]]> <vadv1[,vadv2[,vadv3]]> (generation 1) |
160 | | ... |
161 | | <traceur> <fluide transporteur> (generations >1) |
162 | | ... |
163 | | &<nom de section 2> |
164 | | ... |
165 | | |
166 | | Un mot-clef de run.def précise les noms des composantes voulues ; on lit les sections |
167 | | correspondantes (le "&" est inspiré des namelists fortran, pas si souples en fait :/). |
168 | | Un second mot-clef indique si l’on veut fusionner ou cumuler les listes (en cas de traceurs de |
169 | | noms identiques). |
170 | | Exemple: trac_models = inca, reprobus |
171 | | trac_usage = merge |
172 | | |
173 | | Précisions: |
174 | | * Pour les phases, on utilise g/l/s pour "g"as / "l"iquid / "s"olid. |
175 | | Le décompactage ajoute un suffixe "-g", "-l" ou "-s" au nom de traceur. |
176 | | Exemple: H2O gl donne: H2O-g et H2O-l |
177 | | * On préface les noms destinés au tagging régional par "t#" et on peut stocker plusieurs fluides |
178 | | transporteurs séparés par "/" (ou "all" si le tag s'applique à toutes les traceurs). |
179 | | * Le tagging ne s'applique qu'à la dernière génération d'un arbre (car sinon autant choisir des |
180 | | régions plus fine en une seule génération, quitte à les sommer ensuite). |
181 | | * Le format permet d'identifier directement la génération 1, sans recours à un nom |
182 | | de fluide transporteur de base ("air") en dur. Ça pourrait donc aussi marcher dans l'eau. |
183 | | * Avec ces notations, on hérite des hconv et vconv de la première génération. Pour l'instant, |
184 | | pour l'eau, Camille force en dur 10 au lieu de 14 pour les générations >1. On peut continuer |
185 | | comme ça, ou bien l'indiquer avec une clef dédiée dans run.def, au cas où on serait amener à |
186 | | faire autre chose. |
187 | | |
188 | | EXEMPLE (pour une seule section): |
189 | | - 4 traceurs de génération 1 (eau liquide+vapeur, radon, plomb). |
190 | | - 3 isotopes de l'eau: eau, HDO, O18 |
191 | | (ou H2(O16), H(H2)O, H2(O18) - notation plus claire il me semble). |
192 | | - tagging "bleu" et "rouge" pour l'eau (-> generation 3) et le radon (-> génération 2). |
193 | | |
194 | | On passe de ceci: |
195 | | |
196 | | 24 |
197 | | 14 14 H2O-v Air |
198 | | 10 10 H2O-l Air |
199 | | 10 10 Rn Air |
200 | | 10 10 Pb Air |
201 | | 10 10 H2O-v_eau H2O-v |
202 | | 10 10 H2O-l_eau H2O-l |
203 | | 10 10 H2O-v_HDO H2O-v |
204 | | 10 10 H2O-l_HDO H2O-l |
205 | | 10 10 H2O-v_O18 H2O-v |
206 | | 10 10 H2O-l_O18 H2O-l |
207 | | 10 10 H2O-v_eau_blue H2O-v_eau |
208 | | 10 10 H2O-v_eau_red H2O-v_eau |
209 | | 10 10 H2O-l_eau_blue H2O-l_eau |
210 | | 10 10 H2O-l_eau_red H2O-l_eau |
211 | | 10 10 H2O-v_HDO_blue H2O-v_HDO |
212 | | 10 10 H2O-v_HDO_red H2O-v_HDO |
213 | | 10 10 H2O-l_HDO_blue H2O-l_HDO |
214 | | 10 10 H2O-l_HDO_red H2O-l_HDO |
215 | | 10 10 H2O-v_O18_blue H2O-v_O18 |
216 | | 10 10 H2O-v_O18_red H2O-v_O18 |
217 | | 10 10 H2O-l_O18_blue H2O-l_O18 |
218 | | 10 10 H2O-l_O18_red H2O-l_O18 |
219 | | 10 10 Rn_blue Rn |
220 | | 10 10 Rn_red Rn |
221 | | |
222 | | à cela: |
223 | | |
224 | | H2O air gl 14,10 14,10 |
225 | | Rn air g 10 10 |
226 | | Pb air s 10 10 |
227 | | eau H2O |
228 | | HDO H2O |
229 | | O18 H2O |
230 | | t#blue H2O/Rn |
231 | | t#red H2O/Rn |
232 | | |
233 | | NB: Pour les sorties, on peut peut-être se contenter de noms tronqués en ne gardant que la |
234 | | dernière génération + le tag régional + la phase. |
235 | | Par exemple: H2O-l_O18_blue devient: O18-l_blue. |
236 | | Comme on connaît les dépendances (O18-l descend de H2O-l...), ça peut suffire pour s'y |
237 | | retrouver sans ambiguïté. |
238 | | |
239 | | }}} |
240 | | |
241 | | => Prévoir une réunion (Bocal jeudi 3 octobre?) pour en discuter |