Changes between Version 3 and Version 4 of TravailTraceur


Ignore:
Timestamp:
Nov 15, 2019, 5:29:37 PM (4 years ago)
Author:
dcugnet
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • TravailTraceur

    v3 v4  
    11=== Suivi du projet __amélioration de la gestion des traceurs__ ===
    22
    3 David est sur le coup; dernier commentaire transmit à Frédéric (13 sept 2019) :
     3Voici 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)
     17Ce format permet de compacter fortement les listes et d'éviter des erreurs.
     18Il 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]]
     20Par défaut, les listes sont fusionnées ("merge"): les traceurs de même noms sont fusionnés.
     21Avec 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
     23Quelques 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:
    425{{{
    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)
     32Le 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.
     35En 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.
    1838
    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".
     39Exemple 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"
     44type_trac=lmdz parent=air hadv=10 vadv=10 phases=g type=tracer
     45&lmdz
     46blue,red                     parent=H[2]HO,H2O type=tag   # tagging tracer of gen 1&2 tracers
     47H2O                          phases=g   hadv=14 vadv=14   # water vapour
     48water,H2[18]O,H[2]HO,H[3]HO  parent=H2O                   # H2O childs
     49yellow                       parent=H[3]HO     type=tag   # tagging tracer for single isotope
     50H2O                          phases=ls                    # H2O in liquid and solid phases
     51}}}
    8252
    8353
    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
     54Le parseur en donne la version décompactée qui suit (sorties textes effectives telles qu'elles apparaîtront dans LMDZ):
     55
     56{{{
     57infotrac_init: Information stored in infotrac :
     58infotrac_init:   iq  |  tname            | ttext               |  iadv  |  niadv  |  ipar
     59infotrac_init: ---------------------------------------------------------------------------
     60infotrac_init:   1   |  H2O-g            | H2O-gVLH            |  14    |  1      |  0
     61infotrac_init:   2   |  H2O-l            | H2O-lVL1            |  10    |  2      |  0
     62infotrac_init:   3   |  H2O-s            | H2O-sVL1            |  10    |  3      |  0
     63infotrac_init:   4   |  H2O-g_blue       | H2O-g_blueVL1       |  10    |  4      |  1
     64infotrac_init:   5   |  H2O-l_blue       | H2O-l_blueVL1       |  10    |  5      |  2
     65infotrac_init:   6   |  H2O-s_blue       | H2O-s_blueVL1       |  10    |  6      |  3
     66infotrac_init:   7   |  H2O-g_red        | H2O-g_redVL1        |  10    |  7      |  1
     67infotrac_init:   8   |  H2O-l_red        | H2O-l_redVL1        |  10    |  8      |  2
     68infotrac_init:   9   |  H2O-s_red        | H2O-s_redVL1        |  10    |  9      |  3
     69infotrac_init:   10  |  water-g          | water-gVL1          |  10    |  10     |  1
     70infotrac_init:   11  |  water-l          | water-lVL1          |  10    |  11     |  2
     71infotrac_init:   12  |  water-s          | water-sVL1          |  10    |  12     |  3
     72infotrac_init:   13  |  H2[18]O-g        | H2[18]O-gVL1        |  10    |  13     |  1
     73infotrac_init:   14  |  H2[18]O-l        | H2[18]O-lVL1        |  10    |  14     |  2
     74infotrac_init:   15  |  H2[18]O-s        | H2[18]O-sVL1        |  10    |  15     |  3
     75infotrac_init:   16  |  H[2]HO-g         | H[2]HO-gVL1         |  10    |  16     |  1
     76infotrac_init:   17  |  H[2]HO-l         | H[2]HO-lVL1         |  10    |  17     |  2
     77infotrac_init:   18  |  H[2]HO-s         | H[2]HO-sVL1         |  10    |  18     |  3
     78infotrac_init:   19  |  H[3]HO-g         | H[3]HO-gVL1         |  10    |  19     |  1
     79infotrac_init:   20  |  H[3]HO-l         | H[3]HO-lVL1         |  10    |  20     |  2
     80infotrac_init:   21  |  H[3]HO-s         | H[3]HO-sVL1         |  10    |  21     |  3
     81infotrac_init:   22  |  H[2]HO-g_blue    | H[2]HO-g_blueVL1    |  10    |  22     |  16
     82infotrac_init:   23  |  H[2]HO-l_blue    | H[2]HO-l_blueVL1    |  10    |  23     |  17
     83infotrac_init:   24  |  H[2]HO-s_blue    | H[2]HO-s_blueVL1    |  10    |  24     |  18
     84infotrac_init:   25  |  H[2]HO-g_red     | H[2]HO-g_redVL1     |  10    |  25     |  16
     85infotrac_init:   26  |  H[2]HO-l_red     | H[2]HO-l_redVL1     |  10    |  26     |  17
     86infotrac_init:   27  |  H[2]HO-s_red     | H[2]HO-s_redVL1     |  10    |  27     |  18
     87infotrac_init:   28  |  H[3]HO-g_yellow  | H[3]HO-g_yellowVL1  |  10    |  28     |  19
     88infotrac_init:   29  |  H[3]HO-l_yellow  | H[3]HO-l_yellowVL1  |  10    |  29     |  20
     89infotrac_init:   30  |  H[3]HO-s_yellow  | H[3]HO-s_yellowVL1  |  10    |  30     |  21
     90infotrac_init: fin
     91}}}
     92
     93On peut ajouter d'autres clefs, notamment les ratios de fractionnement.
    8894
    8995
    90 PS: Ce serait moins général, mais on peut éventuellement simplifier les noms de
    91 la liste "décompactée":
     96'''A DISCUTER ENCORE''':
     97Savoir si changer les noms de l'eau dans ses trois phases: H2Ov H2Ol H2Oi -> H2O-g, H2O-l H2O-s n'implique pas trop de contraintes du côté des chaînes de post-traitement.
    9298
    93   on peut renoncer aux chaînes complètes (type A_B_C_D...), sauf pour les
    94 phases (-> tag -g/-l/-s) et les tags (génération précédente nécessaire).
    95 Exemple:
    96  * H2O-l_O18_red => O18-l_red
    97 * H2O-v_HDO     => HDO-v
     99'''A AJOUTER DANS LE PARSEUR''':
     100 * Gestion de base de donnée, afin de pouvoir, indépendamment du module infotrac, accéder à n'importe quelle clef, à la manière de la routine "getin" d'IOIPSL.
     101 * Gestion des listes de traceurs non fusionnées, mais cumulées (cf. ci-dessus).
    98102
    99 Pour l'exemple de départ, ça donnerait des noms de traceurs plus compacts, mais
    100 sans ambigüité:
    101 
    102 24
    103 14 14 H2O-v      Air
    104 10 10 H2O-l      Air
    105 10 10 Rn         Air
    106 10 10 Pb         Air
    107 10 10 eau-v      H2O-v
    108 10 10 eau-l      H2O-l
    109 10 10 HDO-v      H2O-v
    110 10 10 HDO-l      H2O-l
    111 10 10 O18-v      H2O-v
    112 10 10 O18-l      H2O-l
    113 10 10 eau-v_blue eau-v
    114 10 10 eau-v_red  eau-v
    115 10 10 eau-l_blue eau-l
    116 10 10 eau-l_red  eau-l
    117 10 10 HDO-v_blue HDO-v
    118 10 10 HDO-v_red  HDO-v
    119 10 10 HDO-l_blue HDO-l
    120 10 10 HDO-l_red  HDO-l
    121 10 10 O18-v_blue O18-v
    122 10 10 O18-v_red  O18-v
    123 10 10 O18-l_blue O18-l
    124 10 10 O18-l_red  O18-l
    125 10 10    Rn_blue Rn
    126 10 10    Rn_red  Rn
    127 
    128 Bon, ce serait encore mieux je pense avec par exemple "H2(O16)", "H2(O17)",
    129 "H2(O18)", "(H2)HO", "(H3)HO" plutôt que "eau", "O17", "O18", "DHO" et "THO".
    130 Car O18 pourrait servir à d'autres espèces (H2SO4 par exemple), auquel cas
    131 garder H2SO4_O18 et H2O_O18 serait nécessaire.
    132 
    133 }}}
    134 
     103'''A NE PAS OUBLIER''':
    135104Pour mémoire, il y a aussi le ticket #32 (sur la conservation des traceurs)
    136105
    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