Changes between Version 4 and Version 5 of TravailTraceur


Ignore:
Timestamp:
Dec 16, 2019, 6:23:30 PM (4 years ago)
Author:
dcugnet
Comment:

ient

Legend:

Unmodified
Added
Removed
Modified
  • TravailTraceur

    v4 v5  
    104104Pour mémoire, il y a aussi le ticket #32 (sur la conservation des traceurs)
    105105
     106
     107
     108
     109
     110=== 16/12/2019: MISE À JOUR ===
     111=== Les deux points à ajouter l'ont été:===
     112 * Possibilté de cumuler plutôt que fusionner des sections de traceurs. Le nom de section est alors ajouté en suffixe (avant l'éventuel suffixe de phase) pour permettre de distinguer les différents traceurs homonymes. Activation en valorisant la clef booléenne tracs_merge à FALSE plutôt qu'à TRUE. Cette clef est un paramètre "en dur" de readTracFiles_Mod.f90 pour l'instant. À reporter sans les fichiers de configuration *.def éventuellement.
     113 * Gestion de base de données OK:
     114  - En l'état, par mesure de simplicité (discuté avec Laurent Fairhead), on ne lit qu'une section de type "traceur" par fichier (on pourra en lire plusieurs si nécessaire), du nom de la clef "type_trac". Exemple: type_trac=lmdz,inca: on lit les sections "&lmdz" et "&inca" respectivement dans "tracer_lmdz.def" et "tracer_inca.def", puis on les fusionne.
     115  - L'ancienne gestion de traceurs n'existe plus que pour INCA (un seul fichier nommé "traceur.def").
     116  - Chaque fichier est lu sous la forme d'une composante de type dérivé "db" (pour database) stockée dans dBase (la base de données privée):
     117{{{
     118  TYPE db                                                  !--- Type for tracers sections
     119    CHARACTER(LEN=128)    :: name
     120    TYPE(tr), ALLOCATABLE :: trac(:)
     121  END TYPE db
     122  TYPE(db), ALLOCATABLE, TARGET, SAVE :: dBase(:)          !--- Private sections database
     123}}}
     124 La section "default" est stockée comme un "traceur virtuel" du même nom.
     125  Les autres traceurs sont stockés à la suite, décompactés (phases, parents, enfants) et vérifiés.
     126  On procède ensuite à la fusion ou au cumul en fonction de la valeur de "tracs_merge".
     127/!\ La fusion n'est pas effectuée sur les sections "default": chaque section ne sert qu'à déterminer les valeurs par défaut de la liste de traceurs du même fichier tracer_*.def.
     128  Le résultat finale est stocké dans la variable publique "tracers":
     129{{{
     130  TYPE(tr), ALLOCATABLE, TARGET, SAVE :: tracers(:)        !--- Public tracers list
     131}}}
     132Chaque composante est de type "tr":
     133{{{
     134  TYPE tr
     135    CHARACTER(LEN=128) :: name = ''              !--- Name
     136    CHARACTER(LEN=128) :: prnt = ''              !--- Parent name
     137    CHARACTER(LEN=128) :: lnam = ''              !--- Long name (with adv. scheme)
     138    CHARACTER(LEN=16)  :: type = 'tracer'        !--- Type (so far: 'tracer'/'tag')
     139    CHARACTER(LEN=16)  :: phas = 'g'             !--- Phase ('g'as/'l'iquid/'s'olid)
     140    INTEGER            :: hadv = 10              !--- Horizontal advection scheme used
     141    INTEGER            :: vadv = 10              !--- Vertical   advection scheme used
     142    INTEGER            :: iadv = 10              !--- Advection scheme used
     143    INTEGER            :: igen = 1               !--- Generation number (<=1)
     144    INTEGER            :: iparnt = 0             !--- Parent index
     145    INTEGER,            ALLOCATABLE :: ichild(:) !--- Childs index
     146    CHARACTER(LEN=128), ALLOCATABLE :: key(:)    !--- Keys string list
     147    CHARACTER(LEN=128), ALLOCATABLE :: val(:)    !--- Corresponding values string list
     148  END TYPE tr
     149}}}
     150Après fusion ou cumul, la base dBase n'est plus utile ; elle n'est donc pas accessible en externe.
     151Par contre, tracers(:) l'est. On peut l'interroger via quelques outils visibles dans readTracFiles.
     152Le principal est la commande getKey(tra, keyn, val, def_val, t), qui permet de récupérer la valeur d'une clef associée à un traceur:
     153 - "tra" indique le traceur, soit son indice dans la liste "tracers(:)", soit son nom.
     154 - "keyn" indique le nom de la clef voulue.
     155 - "val" est le résultat (chaîne, entier ou réel ; routine générique).
     156 - on peut indiquer dans def_val une valeur par défaut, au cas oùm rien ne soit trouvé (donc aucune valeur spécifiéer dans le fichier *.def, ni aucune valeur dans la section "default" pour cette clef).
     157 - par défaut, on va chercher l'information dans "traceurs", mais "t" permet d'aller la chercher dans un autre vecteur de type "tr" (surtout utile en interne quand on manipule dBase).
     158On peut aussi créer un alias (pointeur) vers un traceur particulier (aliasTracer) ou obtenir les indices d'un ou plusieurs traceurs (idxTracer).
     159 - À noter que le module "strings_mod.f90" contient des outils couramment utiles pour les chaînes et les affichages, en particulier un équivalent de "find" dans matlab (indices d'un ou plusieurs éléments dans un vecteur), ou une routine d'affichage "propre" de tableaux (chaînes, entiers ou réels).
     160
     161'''SUITE PROBABLE''':
     162 * L'inclusion d'un pointeur de tableau réel en tant que nouvelle composante du type dérivé "tr" permet d'obtenir des raccourcis documentés vers les traceurs (utile notamment pour l'eau) tout en les laissant rangés comme avant (pas de pénalité numérique). A discuter.
     163 * Ces objets "tr" incluent, de manière plus ordonnée, donc pratique il me semble, les différents indices gérant les différentes générations. À rediscuter avec Camille, notamment pour savoir comment ranger la partie "initialisation" (les valeurs par défaut - coefficients de fractionnement par exemple - utiles pour les isotopes et leur initialisation, seraient assez à leur place dans les fichiers tracer_*.def sous forme de clefs).