SORTIE DU MODELE GEF

SPÉCIFICATIONS

Les fonctions de sortie du modèle GEF doivent être construites de façon à offrir aux utilisateurs les possibilités suivantes.

VARIABLES

Notes:

NIVEAUX

Note:

GRILLES HORIZONTALES

Notes:

TEMPS DE SORTIE

FILTRE

Note:

COMPRESSION

Notes:

DIRECTIVES ET JEUX DE DIRECTIVES

Les requêtes de produits à sortir se font au moyen d'un namelist qui peut être répété plusieurs fois (une limite de trente-deux fois a été établie). Chaque utilisation du namelist constitue ce qu'on appelle ici, un JEU DE DIRECTIVES DE REQUETES ou plus simplement, une requête. Un jeu de directives de requêtes contient des directives servant à définir:

Cependant, chaque requête doit contenir au minimum quatre directives afin de spécifier une liste de variables, une liste d'heures ou pas de temps, un type de niveaux ainsi qu'une liste de niveaux.

Une directive ne peut être répétée à l'intérieur d'un jeu de directives.

Tous les jeux de directives sont mis à contribution lorsque vient le temps de faire une sortie de champs. Il est donc possible d'agencer des requêtes variables-niveaux-grilles-pas/heure de telle sorte qu'une même variable, selon le pas de temps/heure, peut être sortie à plusieurs niveaux de différents types et ce, sur plusieurs grilles. De plus, il est possible d'indiquer si la variable doit être filtrée ou non et si on désire faire la sortie de champs non-initialisés.

Il est aussi possible de contrôler les aspects généraux de la sortie au moyen d'un autre namelist qu'on pourrait appeler le JEU DE DIRECTIVES DE CONTROLE qui permet de spécifier:

Ce jeu de contrôle ne peut apparaître qu'une seule fois au cours d'une sortie.

DESCRIPTION DES DIRECTIVES

JEU DE CONTROLE (Nom du namelist: &globout)

LA DIRECTIVE NBITS

nbits=nb0

Directive de type entier indiquant le nombre de bits à utiliser lors de l'écriture sur le fichier de sortie. Cette directive est optionnelle et en son absence, les champs seront écrits dans le fichier en conservant une précision de 16 bits. A moins d'indications contraires, la directive nbits affecte la sortie de toutes les variables.

LA DIRECTIVE VARBIT

varbit='v1','v2','v3',...

La directive varbit, de type caractère, est utilisée conjointement avec la directive xnbits. Elle permet ainsi de fournir une liste de variables pour lesquelles on désire utiliser une compression différente de celle de défaut. Cette directive est optionnelle et doit nécessairement être utilisée avec la directive xnbits.

LA DIRECTIVE XNBITS

xnbits=nb1,nb2,nb3,...

Directive de type entier, xnbits sert à indiquer que pour certaines variables, un nombre de bits différent de celui indiqué par la directive nbits doit être utilisé lors de l'écriture dans le fichier de sortie. Les paramètres de la directive xnbits sont appariés à ceux de la directive varbit. Cette directive est optionnelle et doit nécessairement être utilisée avec la directive varbit.

exemple:

varbit= 'V1', 'V2', 'V3'
xnbits=  12,   12,   16

LA DIRECTIVE VARFILT

varfilt='v1','v2','v3',...

La directive varfilt, de type caractère, est utilisée conjointement avec la directive filter. Elle permet ainsi de fournir une liste de variables pour lesquelles on désire utiliser un coefficient de filtrage avant de faire la sortie. Cette directive est optionnelle et doit nécessairement être utilisée avec la directive filter.

LA DIRECTIVE FILTER

filter=c1,c2,c3,...

La directive de type réel filter sert à indiquer les coefficients àutiliser pour le filtrage de certaines variables. Les paramètres de la directive filter sont appariés à ceux de la directive varfilt. Cette directive est optionnelle et doit nécessairement être utilisée avec la directive varfilt.

exemple:

varfilt= 'V1', 'V2', 'V3'
filter=  0.25,  0.2,  0.5

LA DIRECTIVE VCFLG

La barre verticale ( | ) indique des options mutuellement exclusives.

vcflg= [0] | 1, ...

La directive entière vcflg sert à indiquer si le filtre à appliquer àun champ est constant ou variable sur la grille. On indique qu'un filtre est variable en mettant la valeur 1 à la position correspondant au nom du champ dans varfilt. Pour un filtre non variable, on met zéro. Les paramètres de la directive vcflg sont appariés à ceux de la directive varfilt. Cette directive est optionnelle et doit nécessairement être utilisée avec la directive varfilt. Par défaut, les filtres sont non variables.

exemple:

varfilt= 'V1', 'V2', 'V3'
filter=  0.25,  0.2,  0.5
cvflg=    1,     0,    1

JEUX DE REQUETES (nom du namelist: &sortie)

LA DIRECTIVE GRIDTYP

La barre verticale ( | ) indique des options mutuellement exclusives.

gridtyp= ['model'] | 'core'

Directive de type caractère permettant d'indiquer sur quelle grille faire la sortie.

Gridtyp est une directive optionnelle qui peut être utilisée en association avec la directive gridinc. En l'absence d'une directive gridtyp, la sortie se fait en utilisant la grille complète du modèle.

LA DIRECTIVE GRIDINC

gridinc=g1,g2,g3,g4 [,g5,g6]

Directive de type entier permettant de définir les dimensions d'une sous- fenêtre de la grille de sortie.

exemple:

gridtyp='model'
gridinc=-4,-5,-6,-7,1,2

Pour sortir les variables à chaque point de grille en i et à chaque deux points en j à l'intérieur d'une fenêtre obtenue en retranchant 4 colonnes à gauche, 5 rangées en bas, 6 colonnes à droite et 7 rangées en haut de la grille complète du modèle.


exemple:

gridtyp='core'
gridinc=3,4,-1,-2,1,2

Pour extraire les champs sur le coeur de la grille du modèle avec 3 colonnes de plus à gauche, 4 rangées ajoutées en bas, une colonne retranchée à droite et deux rangées retranchées en haut. La sortie se fait à chaque point en i et à chaque deux points en j.

Cette directive est optionnelle. En l'absence d'une directive gridtyp, les paramètres de gridinc s'appliqueront à la grille complète du modèle (e.g., gridinc=0,0,0,0,1,1).

LA DIRECTIVE LEVTYP

La barre verticale ( | ) indique des options mutuellement exclusives.

levtyp='eta' | 'pres' | 'height'

Directive de type caractère servant à indiquer le type de niveaux à utiliser pour faire la sortie.

Cette directive est obligatoire pour la sortie de champs multi-niveaux. Elle doit nécessairement être utilisée en association avec la directive levels. Voir la NOTE plus loin.

LA DIRECTIVE LEVELS

levels=l1,l2,l3,...

Cette directive de type réel sert à spécifier la valeur des niveaux de type levtyp pour lesquels on veut une sortie. l1,l2,... sont des nombres de type réel.

Cette directive est obligatoire pour la sortie de champs multi-niveaux. Elle doit nécessairement être utilisée en association avec la directive levtyp. Voir la note plus loin.

Les niveaux de pression sont indiqués en hPa et les hauteurs géométriques sont données en mètres.

exemples:

levtyp='eta'
levels=1.0,0.95,0.90,0.86,0.84,0.70

levtyp='pres'
levels=100.0,950.0,900.0,850.0,700.0,500.0

levtyp='eight'
levels=100.0,5000.0,10000.0,20000.0

NOTE:

LA DIRECTIVE STEPS

steps=s1,s2,s3,...

Cette directive de type entier sert à fournir au module de sortie la liste de pas de temps pour lesquels on désire obtenir des données.

Les paramètres s1,s2,... peuvent représenter des pas de temps discrets ou servir à définir une période de pas de temps pour laquelle on désire une sortie à intervalle régulier. Une période est représentée par l'emploi d'un triplet de type s1,s2,- s3, où s1 représente le début de la période, s2 en représente la fin et s3 est l'intervalle de pas auquel on doit produire la sortie.

Exemples:

steps=0,100,-2

Pour faire une sortie à chaque deux pas de temps pour la période allant des pas zéro à cent inclusivement:


steps=1,2,5,10

Pour faire la sortie aux pas 1,2,5 et 10.

On peut mélanger les deux types de représentations à l'intérieur d'une directive steps:

steps=0,20,-1,25,30,40

Pour obtenir une sortie à chacun des 20 premiers pas et aux pas 25,30 et 40.

La présence d'une directive steps ou d'une directive hours est obligatoire dans un jeu de requêtes. Les directives steps et hours sont mutuellement exclusives.

LA DIRECTIVE HOURS

hours=h1,h2,h3,...

Cette directive de type réel sert à fournir au module de sortie la liste des heures pour lesquelles on désire obtenir des données.

Les paramètres h1,h2,... peuvent représenter des heures discrètes ou servir à définir une période d'heures. Une période est représentée par l'emploi d'un triplet de type h1,h2,- h3, ou h1 représente le début de la période, h2 en représente la fin et h3 est l'intervalle en heure auquel on doit produire la sortie.

NOTE:


Exemples:

hours=0.,48.,-6.

Pour faire une sortie à chaque six heures pour la période allant de 0 a 48 heures inclusivement.

hours=1.,2.5,5.0,10.

Pour faire la sortie aux heures 1,2.5,5 et 10.

On peut mélanger les deux types de représentations à l'intérieur d'une directive hours:

hours=0.,24.,-1.,30.,36.,42.,72.,-6.

Pour obtenir une sortie à chacune des 24 premières heures, puis aux heures 30 et 36 et à chaque 6 heures entre 42 et 72 heures.

Dans le fichier standard de sortie, aucun enregistrement n'est récrit. Ceci permet d'avoir plus d'un enregistrement avec la même valeur de IP2. La date d'origine, le numéro et la longueur du pas de temps servent alors à distinguer deux enregistrements ayant le même IP2.

La présence d'une directive steps ou d'une directive hours est obligatoire dans un jeu de requêtes. Les directives steps et hours sont mutuellement exclusives.

LA DIRECTIVE MODE

mode='dfspanout' , 'nofilter' ,'dfspanout+nofilter'

Lorsqu'elle a pour valeur 'dfspanout' ou 'DFSPANOUT', la directive mode permet d'indiquer que le jeu de directive courant concerne la sortie de champs non initialisés (au sens de filtre digital (numérique)). S'il n'y a pas de période d'initialisation, ou si la période d'initialisation par filtre digital est terminée ou si une méthode d'initialisation autre que celle du filtre digital est utilisée, le jeu de requêtes est inactif.

Lorsqu'elle a pour valeur 'nofilter' ou 'NOFILTER', la directive mode permet d'indiquer que pour le jeu de directive courant on désire que les variables ne soient pas soumises au filtrage. Elle annulera donc temporairement l'effet des directives de contrôle varfilt et filter.

Cette directive est optionnelle.

LA DIRECTIVE IP3

La directive entière ip3, lorsque présente dans un jeu de requêtes, permet de modifier la valeur de la clef de recherche ip3 qui sera utilisée dans le fichier standard de sortie lors de l'écriture des variables demandées dans ce jeu.

Cette directive est optionnelle. La valeur implicite de ip3 est zéro.

LA DIRECTIVE VAR

var='v1','v2','v3',...

La directive var, de type caractère, permet de spécifier les variables pour lesquelles on désire faire une sortie.

exemple:

	var='TT','UU','VV','RURU'

La directive var est évidemment obligatoire dans un jeu de directives de requêtes.

LA DIRECTIVE END

La barre verticale ( | ) indique des options mutuellement exclusives.

end=.true. | [.false.]

Cette directive de type logique permet d'indiquer aux modules de sortie que la fin des requêtes de l'usager est atteinte et qu'il n'y a donc plus de jeux de directives à interpréter. Cette directive est optionnelle et permet de mettre fin de façon prématurée àl'interprétation des jeux de requêtes. En son absence, le module d'interprétation des requêtes lira le fichier de directives fourni au modèle jusqu'à la fin.

MÉTHODE D'UTILISATION

On indique les variables à sortir via l'emploi de un ou plusieurs jeux de directives de requêtes. Chaque requête doit être complète en ce sens qu'elle contient minimalement les quatre directives nécessaires à la description d'une sortie: variables, niveaux, type de niveau et heures ou pas de temps. On peut utiliser jusqu'à 32 jeux de requêtes pour une même sortie.

L'ordre dans lequel les directives apparaissent à l'intérieur d'un jeu ainsi que l'ordre d'apparition des jeux de requêtes n'a aucune importance puisque le module d'initialisation lit tout le fichier de directives et se charge de regrouper les requêtes de façon convenable.

On utilise toujours le nom de variable VMM dans une directive var. Le logiciel de sortie se chargera d'extraire du nom VMM le nomvar à utiliser pour les fichiers standard et créera une étiquette permettant de mieux identifier, dans le fichier standard, la variable sortie. Par exemple, une variable ayant pour nom VMM UTTT0 aura pour identificateur dans le fichier standard de sortie un nomvar de UT ( les deux premières lettres du nom) et une étiquette ou on retrouvera entre autres la chaîne TT0 soit, les trois dernières lettres du nom VMM. A ces caractères, s'ajouteront suffisament de caractères de l'étiquette fournie par l'usager pour en arriver àcomposer une étiquette pouvant contenir jusqu'à huit caractères.

	Par exemple:
		Etiquette de l'usager = 'MON_EXP1'
		Nom VMM =             'UTTT1'
		Etiquette construite =  'TT1_EXP1'

Il n'est pas possible d'avoir un jeu de directives de requêtes dans lequel on utilise à la fois une directive hours et une directive steps. Un seul type d'intervalles de temps par jeu doit être utilisé.

En plus des jeux de requêtes, on peut inclure un jeu de directives de contrôle où on précise la compression globale (nbits) à utiliser pour toutes les variables à sortir. On peut ajouter au jeu de contrôle une liste de variables pour lesquelles une compression différente est souhaitée ou sur lesquelles on désire appliquer un filtre avant l'écriture sur disque. Ce jeu de contrôle ne peut être utilisé qu'une seule fois lors d'une sortie et il peut apparaître n'importe où dans le fichier de directives.

MÉTHODE PROPOSÉE

Un module d'initialisation lit les jeux de directives de l'usager et les traduit en un format interne. Le résultat de cette traduction est conservé sous forme de tableaux dans la mémoire de la machine.

Le module de sortie est appelé à chaque pas de temps. C'est ce module qui fouille les différents tableaux afin de déterminer si une sortie est requise pour le pas de temps courant et le cas échéant, ce qui doit être fait pour produire la sortie désirée.

EXEMPLE D'UTILISATION

&globout
 nbits=24
 varbit= 'UU', 'VV'
 xnbits= 16,    16
 varfilt='UU','VV'
 filter=0.25, 0.25
 cvflg=   1,  1
&end

&sortie
 levtyp='eta'
 levels=1.0,0.95,0.9,0.8,0.7
 var='TT','UU','VV','HU','RURU','RVRV'
 hours=0.,48.,-3.
&end

&sortie
 mode='dfspanout+nofilter'
 var='TT','UU','VV','HU','RURU','RVRV'
 levtyp='eta'
 levels=1.0,0.95,0.9,0.8,0.7
 steps=0,24,-1
 ip3 = 5
&end

&sortie
 gridtyp='core'
 gridinc=10,10,10,10
 levtyp='pres'
 levels=1000.,950.,900.,850.,800.,750.,700.,650.,600.
 var='GZ','TT','HU' 
 hours=0.,2.,4.,6.,48.,-6.
&end

INTERPRÉTATION

La directive nbits du jeu de contrôle globout, permet de préciser qu'on devra conserver 24 bits par élément dans le fichier de sortie. La directive varbit, associée à la directive xnbits indique que pour les variables UU et VV on ne désire conserver que 16 bits au lieu des 24 indiquées par nbits. Les directives varfilt et filter indiquent quant à elles, que les variables UU et VV seront filtrées avant d'être écrites sur disque. Les coefficients à utiliser pour le filtre ont pour valeur 0.25. Ces coefficients de base seront modulés pour avoir une structure variable dans l'horizontale.

Le prochain jeu (&sortie) est de type requête. On y demande de sortir une liste de variables (TT,UU,VV,HU,RURU,RVRV). Toutes ces variables seront sorties en utilisant la grille complète du modèle (défaut). Les variables seront sorties aux niveaux êta indiqués à chaque trois heures pour le premier 48 heures d'intégration.

La requête suivante permet d'obtenir la "version" non initialisée du même ensemble de variables que précédemment et ce aux mêmes niveaux. Cependant, on ne veut la sortie que pour les 24 premiers pas de temps et on ne désire aucun filtrage. IP3 aura pour valeur 5.

La dernière requête demande de sortir les variables sur les niveaux de pression dont on fournit la liste. La sortie se fera sur une région qui englobe le coeur de la grille du modèle plus 10 rangées et colonnes additionnelles tout le tour. La sortie se fera aux heures 0,2,4,6 et par la suite à chaque 6 heures jusqu'à 48 heures.

NOTE:

STRUCTURE GÉNÉRALE DU PROGRAMME DE SORTIE

Les modules de sortie sont construits en utilisant une structure hiérarchique à trois niveaux. Chaque niveau se préoccupe de la gestion des champs VMM qu'il convient de gérer à ce niveau. Ainsi, le plus haut niveau gère les champs qui sont communs à tous les aspects de la sortie. Le deuxième niveau gère les champs qui sont communs à un certain ensemble de produits et le troisième niveau voit à gérer les champs d'un produit en particulier.

Le programme de sortie est construit de telle sorte que tous les modules servant à traiter un ensemble cohérent de variables sont regroupés. On obtient ainsi, par exemple, un module ou bloc de gestion du traitement des vents et de leurs variables dérivées, un module pour les variables de température et d'humidité, un bloc de sortie de champs géophysiques, un bloc de gestion de tous les autres champs. Le regroupement des variables doit être conçu de façon à permettre un minimum de transferts mémoire-disque (chargement déchargement de champs) ainsi qu'un minimum de répétitions de calculs.

Tous les champs dérivés sont construits en utilisant des variables du modèle au temps T1, telles que définies dans le modèle.

Un premier regroupement pourrait être le suivant:

Un bloc MASSE

(GZ,P0,PS,PN) où la variable VTTT1 est requise pour le calcul de plusieurs champs.

Un bloc TEMPERATURE-HUMIDITE

(VT,TT,TD,ES,HR,HU) où les champs VTTT1 et HUHUT1 sont requis dans plusieurs calculs.

Un bloc VENTS

(UU,VV,UV,PI*,WW,DD,DS,QQ,QP,QR,QS). Presque tous les calculs y font appel aux champs UUUT1 et VTTT1.

Un bloc GEOPHYSIQUE

(LA,LO,MG,MX,MT,GL,AL,NE,HS,TM,TS,TP,Z0,ZP,LH) qui ne peut être appelé qu'au pas de temps zéro.

Un bloc GENERAL

pour sortir toutes les autres variable.