(mis à jour) le 24 feb 2003
 
Les fichiers Binary Universal Report Protocol (BURP)
 
 English
 

1. Introduction
 

Ce document décrit le progiciel BURP (Binary Universal Report Protocol) ainsi que le format des fichiers BURP. Les fonctions et sous-programmes qui composent ce progiciel sont appelables à partir de programmes écrits en FORTRAN ou en C. En règle générale, si le nom d'un module FORTRAN est "MRBTBL", le nom du module C equivalent sera "c_mrbtbl" (attention aux majuscules et aux minuscules) . Le présent document décrit la nouvelle methode proposée pour stocker des données météorologiques en un point. On y trouvera une description du format de stockage utilisé ainsi que de l'ensemble de sous-programmes qui constituent le progiciel "FICHIERS BURP". Ce progiciel complète celui qui permet de manipuler les "FICHIERS STANDARDS". Les "FICHIERS BURP" ont une structure "plusieurs variables et/ou valeurs en un point "par opposition à la structure" une variable, plusieurs valeurs en des points différents" des fichiers standards. C'est la différence entre des rapports météorologiques et des champs. Ces fichiers sont destinés entre autres choses à remplacer les anciens fichiers "derivate", pour l'analyse et le pointage de données aux stations.


2. Structure

L'unité de base dans ces fichiers est le "rapport météorologique", ensemble de blocs de données en un point donné. On regroupe plusieurs de ces "rapports" dans un segment, et un ensemble des segments constitue un fichier. Un rapport est constitué d'un groupe de renseignements généraux (position géographique, type de rapport, date de réception, etc...) et d'un ensemble de tables représentant des variables météorologiques (température, pression, humidité, etc...). À chacune de ces tables est associée une liste indiquant les variables qu'elle contient ainsi qu'un mini bloc de renseignements (nombre de variables, nombre de bits par valeur, nombre de valeurs par variable, identification du bloc). Une table peut contenir plusieurs valeurs associées à une même variable (ex. sondage "upper air").
La représentation des valeurs et des noms de variables à été empruntée au standard "BUFR" de WMO. On utilise un entier de 16 bits pour représenter le type de variable et on réduit toutes les valeurs à des entiers sans signe. On trouvera la liste des codes ainsi que les facteurs d'echelle et les valeurs de référence pour les différentes variables dans le document FM 94 BUFR . Voir aussi en appendice pour ce qui n'est pas couvert dans ce document.
Le progiciel est à deux niveaux. Au premier niveau, on trouve des sous-programmes permettant de manipuler l'intérieur d'un rapport, et au second niveau, des sous-programmes permettant de manipuler le fichier lui-même.
Pour contenir un rapport, l'usager fournit un tableau entier dont le premier élément contient la longueur du dit tableau.

en langage FORTRAN:

INTEGER BUF(500)
BUF(1) = 500

en langage C:
int buf[500]
buf[0] = 500

Il va de soi que ce tableau doit être assez long pour loger tous les blocs qui forment un rapport plus une dizaine de mots servant à contenir l'information supplémentaire de contrôle. On peut obtenir la longueur d'un rapport déjà existant grâce aux fonctions MRFPRM et MRFMXL. La longueur retournée par ces fonctions plus la dizaine de mots mentionnée ci-dessus constituent la dimension du tableau BUF. En général, une longueur de mille mots devrait êtres suffisante pour contenir un rapport. ( Cependant, pour connaitre la façon exacte de calculer la longueur de BUF requisé pour contenir un rapport que l'on désire créer, l'usager peut se référer à l'Appendice B). C'est le tableau BUF que l'on passe aux sous-programmes variés qui composent le progiciel pour effectuer diverses opérations de lecture/écriture de rapports, d'extraction/création/destruction de tables, etc...
Les fichiers BURP sont des fichiers de type XDF. Il est donc possible de récupérer l'espace occupé par des rapports effacés et de faire la fusion de plusieurs fichiers en un seul en se servant de l'utilitaire RPN REFLEX. Pour obtenir toute l'information concernant les fichiers de type XDF ou l'utilitaire REFLEX, regardez dans RPN Utilities au website RPN DOCUMENTATION.

 


 


3. FORMAT DE STOCKAGE
 

3.1 DISPOSITION D'UN FICHIER
 
 
EN-TÊTE DE FICHIER
 
 
SEGMENT 1
 
 
SEGMENT 2
 
 
...
 
 
SEGMENT n
 
 
 

Un fichier "BURP" se compose d'un en-tête et d'un ou plusieurs "segments" contenant des rapports. Voir la description détaillée de l'en-tête du fichier dans le document décrivant les fichiers XDF
 

3.2 DISPOSITION D'UN SEGMENT
 
 
RÉPERTOIRE
 
 
RAPPORT 1
 
 
RAPPORT 2
 
 
...
 
 
RAPPORT n
 
 
 

On groupe plusieurs rapports dans un même segment jusqu'à concurrence de 256.
 

3.3 DISPOSITION DU RÉPERTOIRE D'UN SEGMENT
 
 
EN-TÊTE DE RÉPERTOIRE
 
 
ENTRÉE 1
 
 
ENTRÉE 2
 
 
...
 
 
ENTRÉE 256
 
 

Voir la description détaillée de l'en-tête du répertoire dans le document décrivant les fichiers XDF.
 

3.4 DISPOSITION D'UN RAPPORT
 
 
EN-TÊTE DU RAPPORT
 
 
BLOC 1
 
 
BLOC 2
 
 
...
 
 
BLOC n
 
 
 

Chaque rapport est constitué d'un en-tête et d'un nombre n de blocs de données.
 

3.5 DISPOSITION DE L'EN-TÊTE DU RAPPORT
 
 
EN-TÊTE GÉNÉRALE
 
 
EN-TÊTE DU BLOC 1
 
 
EN-TÊTE DU BLOC 2
 
 
...
 
 
EN-TÊTE DU BLOC n
 
 

Voir la description détaillée de l'en-tête du rapport et de l'en-tête d'un bloc à l'Appendice A.
 
 

3.6 DISPOSITION D'UN BLOC
 
 
 LSTELE
LISTE DE NOMS(NELE)
<----NELE x 16 bits---->
 TBLVAL
TABLE DE VALEURS (NELE x NVAL x NT)
<------- NELE x NVAL x NBITS bits ------->
 
  LSTELE est une liste de nombre entiers représentant les divers éléments météorologiques (P, HGT, T, T-TD, DIR, SPD, FLG, etc...). Les codes utilisés pour représenter ces variables sont les mêmes que pour la methode de codage de rapports BUFR. (Voir le document FM 94 BUFR pour la description des codes WMO). On utilise aussi un codage de type BUFR pour les valeurs (TBLVAL). Voir le document FM 94 BUFR pour les codes, les facteurs d'echelle et les valeurs de référence.


4. SOUS-PROGRAMMES DE PREMIER NIVEAU
 

Cet ensemble de fonctions FORTRAN et C permet de manipuler L'intérieur d'un rapport. Certaines fonctions permettent de manipuler l'en-tête du rapport, les autres servent à manipuler les blocs de données que contient ce rapport. On peut extraire, détruire, remplacer, ou ajouter un bloc de données. Chaque bloc de données se compose d'une en-tête de bloc, d'une liste de variables, et d'une table de valeurs à une, deux ou trois dimensions. Le tout est décrit par des valeurs entières.
 

4.1 SEQUENCE D'APPEL

Un argument en MAJUSCULES est un argument de SORTIE, un argument en minuscules est un argument d'ENTRÉE . En C, les arguments de sortie sont précédés d'un '&' sauf les tableaux, pour lesquels il faut de toute façon passer une adresse.
 

ISTAT=MRBADD(BUF,BKNO,nele,nval,nt,bfam,bdesc,btyp,nbit,BIT0,datyp, lstele,tblval)
istat=c_mrbadd(buf,&bkno,nele,nval,nt,bfam,bdesc,btyp,nbit,&bit0,datyp, lstele,tblval) Ajouter un bloc de données à la fin d'un rapport.

ISTAT=MRBDEL(BUF,bkno)
istat=c_mrbdel(buf,bkno)
Effacer un bloc et récupérer l'espace qu'il occupe.

ISTAT=MRBHDR(buf,TEMPS,FLGS,STNID,IDTP,LATI,LONG,DX,DY,ELEV,DRND,DATE, OARS,RUNN,NBLK,SUP,nsup,XAUX,nxaux)
istat=c_mrbhdr(buf,&temps,&flgs,&stnid,&idtp,&lati,&long,&dx,&dy,&elev, &drnd,&date,&oars,&runn,&nblk,sup,nsup,xaux,nxaux)
Ramasser les paramètres de l'en-tête d'un rapport.

ISTAT=MRBINI(iun,BUF,temps,flgs,stnid,idtp,lati,long,dx,dy,elev,drnd, date,oars,runn,sup,nsup,xaux,nxaux)
istat=c_mrbini(iun,buf,temps,flgs,stnid,idtp,lati,long,dx,dy,elev,drnd, date,oars,runn,sup,nsup,xaux,nxaux)
Initialiser l'en-tête d'un rapport. Ce n'est qu'après que l'on pourra procéder à l'ajout de blocs de données dans ce rapport. MRBINI doit être le premier sous-programme appelé pour créer un rapport.

ISTAT=MRBLEN(buf,LBITS,LEFT)
istat=c_mrblen(buf,&lbits,&left)
Trouver le nombre de bits utilisés dans le tableau BUF ainsi que le nombre de bits libres.

BKNO=MRBLOC(buf,bfam,bdesc,btyp,blk0)
bkno=c_mrbloc(buf,bfam,bdesc,btyp,blk0)
Trouver la position du premier bloc de données de type "bfam,bdesc,btyp" qui suit le bloc "blk0". On utilise "blk0 = 0" si on veut partir du premier bloc. Si la valeur d'une des cléfs (bfam,bdesc,btyp) est -1, elle sera ignorée lors de la recherche.

ISTAT=MRBPRM(buf,bkno,NELE,NVAL,NT,BFAM,BDESC,BTYP,NBIT,BIT0,DATYP)
istat=c_mrbprm(buf,bkno,&nele,&nval,&nt,&bfam,&bdesc,&btyp,&nbit, &bit0,&datyp) Extraire les paramètres descripteurs du bloc de données dont le numéro d'ordre est bkno.

ISTAT=MRBREP(BUF,bkno,tblval)
istat=c_mrbrep(buf,bkno,tblval)
Remplacer un bloc de données par un autre contenant les mêmes variables et ayant les mêmes dimensions.

ISTAT=MRBTYP(BKNAT,BKTYP,BKSTP,btyp)
ISTAT=MRBTYP(bknat,bktyp,bkstp,BTYP)
istat=c_mrbtyp(bknat,bktyp,bkstp,btyp)
Si btyp = -1, convertir de BKNAT,BKTYP, et BKSTP à BTYP; La fonction retourne BTYP
Si btyp > 0, convertir de BTYP à BKNAT,BKTYP, et BKSTP; La fonction retourne 0.

ISTAT=MRBUPD(iun,BUF,temps,flgs,stnid,idtp,lati,long,dx,dy,elev,drnd, date,oars,runn,sup,nsup,xaux,nxaux)
istat=c_mrbupd(iun,buf,temps,flgs,stnid,idtp,lati,long,dx,dy,elev,drnd, date,oars,runn,sup,nsup,xaux,nxaux)
Mettre à jour l'en-tête d'un rapport. Si la valeur d'un paramètre est -1 ('*' pour STNID) il n'y aura pas de mise à jour de la valeur du paramètre. Si NSUP = 0, on ignore SUP, si NXAUX = 0, on ignore XAUX.

ISTAT=MRBXTR(buf,bkno,LSTELE,TBLVAL)
istat=c_mrbxtr(buf,bkno,lstele,tblval)
Extraire un bloc de données (bloc bkno) d'un rapport.
 
 

4.2 ARGUMENTS

1majuscule pour FORTRAN, minuscule pour C
Argument Type1 Description
BDESC INTEGER  
int
Descripteur de bloc. (0-2047)
BFAM INTEGER  
int
Descripteur de la famille du bloc. (0-31)
BIT0 INTEGER  
int
Numéro du premier bit (à droite) du bloc, calculé automatiquement par le progiciel.  
(0-->2**26-1) (toujours un multiple de 64 - 1)
BKNAT INTEGER  
int
portion nature du BTYP de bloc recherche.
BKNO INTEGER  
int
Numéro d'ordre du bloc. (1-65535)
BKSTP INTEGER  
int
portion sous-type du BTYP de bloc recherche .
BKTYP INTEGER  
int
Portion type du BTYP de bloc recherche.
BLK0 INTEGER  
int
Numéro d'ordre du bloc. (1-65535)
BTYP INTEGER  
int
Clef composite indiquant le type du bloc. (0-2047)
BUF INTEGER (*)  
int []
Tableau entier servant à stocker un rapport. Ce tableau doit être assez grand pour contenir le rapport au complet plus une dizaine de mots. Le premier élément du tableau doit contenir la longueur utilisable dans le tableau. (en mots)  
ex. INTEGER BUF(300)  
BUF(1) = 300  
Ceci à pour but de permettre au logiciel d'eviter tout debordement accidentel.
DATE INTEGER  
int
Date synoptique de validité (AAMMJJ)
DATYP INTEGER  
int
Type de données (pour la compaction/décompaction).  
0 = chaîne de bits (bit string)  
2 = entiers SANS SIGNE  
3 = caractères (NBIT doit être égal à 8)  
4 = entiers AVEC signe  
5 = caractères en majuscules (les caractères en minuscules seront convertis à majuscules lors de l'écriture et retournés en majuscules lors de la lecture. (NBIT doit être égal à 8)  
6 = real*4 (i.e. 32 bits)  
7 = real*8 (i.e. 64 bits)  
8 = complex*4 (i.e. 2 fois 32 bits)  
9 = complex*8 (i.e. 2 fois 64 bits)  
N.B. Les types 3 et 5 sont traités comme des chaînes de bits. L'usager doit donc faire lui-même la compression des données.
DX INTEGER  
int
Largeur d'une boite pour données regroupées (delta lon) en dixième de degrés
DY INTEGER  
int
Hauteur d'une boite pour données regroupées (delta lat) en dixième de degrés
DRND INTEGER  
int
Délai de réception (différence entre le temps de réception au CMC et TEMPS) en minutes lorsqu'il s'agit d'une observation. Pour les données regroupées, DRND indique le nombre de données. DRND = 0 dans les autres cas.
ELEV INTEGER  
int
Altitude de la station en metres + 400. (0 à 8191)
FLGS INTEGER  
int
Marqueurs globaux (24 bits). Voir l'Appendice A.
IDTP INTEGER  
int
Type de rapport.
ISTAT INTEGER  
int
Indicateur d'état, voir liste des codes en Appendice C.
IUN INTEGER  
int
Numéro de référence du fichier
LATI INTEGER  
int
Latitude en centièmes de degré par rapport au pole sud.(0 à 1800) ( 100 * (latitude+90) ) d'une station ou du coin inférieur gauche d'une boite.
LBITS INTEGER  
int
Nombre de bits utilisés pour coder le rapport dans le tableau BUF.
LEFT INTEGER  
int
Nombre de bits libres dans le tableau BUF servant à coder le rapport. Permet de savoir s'il reste assez de place pour loger le prochain bloc.
LSTELE INTEGER  
int
Liste des noms d'éléments dans le rapport. (NELE). Représentation codée, voir FM 94 BUFR + supplément local.
LONG INTEGER  
int
Longitude en centièmes de degré (0 à 36000) d'une station ou du coin inférieur gauche d'une boite.
NBIT INTEGER  
int
Nombre de bits par valeur. Lorsqu'on ajoute un bloc, on doit s'assurer de ce que le nombre de bits specifié soit assez grand pour représenter la valeur la plus grande contenue dans la table de valeurs TBLVAL. Le nombre maximal de bit est de 32.
NBLK INTEGER  
int
Nombre de blocs contenus dans le rapport
NELE INTEGER  
int
Nombre d'éléments météorologiques dans un bloc. Première dimension du tableau TBLVAL (bloc). (0-255)
NVAL INTEGER  
int
Nombre de données par élément. Deuxième dimension du tableau TBLVAL (bloc). (0-255)
NT INTEGER  
int
Nombre de groupes de NELE x NVAL valeurs dans un bloc.  
Troisième dimension du tableau TBLVAL (bloc) (p.ex serie temporelle). (0- 255)
NXAUX INTEGER  
int
Dimension du tableau XAUX.  
0 indique que XAUX ne sert pas.
NSUP INTEGER  
int
Dimension du tableau SUP.  
0 indique que SUP ne sert pas.
OARS INTEGER  
int
Réserve pour l'Analyse Objective.  
(0-->65535)
RUNN INTEGER  
int
Identificateur de passe opérationnelle.
STNID CHARACTER*9  
char [9]
Identificateur de la station  
S'il s'agit d'une station de surface STNID = numéro WMO. Le nom est aligné à gauche et rempli avec des espaces (blancs). Dans le cas de données regroupées, STNID contient des blancs.
SUP INTEGER (NSUP)  
int [nsup]
Tableau pouvant contenir des clés primaires supplémentaires (réservé pour expansion future).
TEMPS INTEGER  
int
Heure de l'observation (HHMM)
TBLVAL INTEGER(NELE,NVAL,NT)  
int [nele,nval,nt]
Tableau de données. (bloc)
XAUX INTEGER (NXAUX)  
int [nxaux]
Tableau pouvant contenir des clés auxiliaires supplémentaires (réservé pour expansion future).
 



 

5. SOUS-PROGRAMMES DE DEUXIÈMES DE NIVEAU

Cet ensemble de fonctions FORTRAN et C permet de manipuler des rapports en tant qu'entite. Elles permettent d'ouvrir ou de fermer un fichier de rapports, de lire ou d'écrire un rapport, d'obtenir ou de modifier les paramètres descripteurs d'un rapport , de contrôler la position ou d'obtenir l'état d'un fichier.

5.1 SEQUENCE D'APPEL

Un argument en MAJUSCULES est un argument de SORTIE, un argument en minuscules est un argument d'ENTRÉE . En C, les arguments de sortie sont précédés d'un '&', sauf les tableaux, pour lesquels il faut de toute façon passer une adresse.

ISTAT=MRFCLS(iun)
istat=c_mrfcls(iun)
Fermer un fichier de rapports. Négliger de fermer un fichier, suite à son utilisation, risque de provoquer des dommages qui rendront le fichier inutilisable par la suite.

ISTAT=MRFDEL(handle)
istat=c_mrfdel(handle)
Effacer le rapport dont le pointeur est "handle".

ISTAT=MRFGET(handle,BUF)
istat=c_mrfget(handle,buf)
Aller chercher le rapport dont "handle" est le pointeur et le mettre dans BUF.

ISTAT=MRFGOC(optnom,OPVALC)
istat=c_mrfgoc(optnom,opvalc)
Fonction servant à obtenir la valeur d'une option de type caractère.

ISTAT=MRFGOR(optnom,OPVALR)
istat=c_mrfgor(optnom,&opvalr)
Fonction servant à obtenir la valeur d'une option de type réel.

HANDLE=MRFLOC(iun,handle,stnid,idtyp,lati,long,date,temps,sup,nsup)
handle=c_mrfloc(iun,handle,stnid,idtyp,lati,long,date,temps,sup,nsup)
Trouver le pointeur (HANDLE) du rapport décrit par les paramètres STNID, IDTYP, LATI, LONG, DATE, TEMPS et le contenu du tableau SUP. La recherche se fera à partir du début si l'argument "handle" est égal à 0 sinon, la recherche se fera à partir de le rapport suivant le rapport dont le pointeur est "handle". Si un élément de STNID est égal à un asterisque ('*'), cet élément sera consideré comme un "wildcard" et sera ignoré pour la recherche. Il en va de même pour IDTYP, LATI, LONG, DATE, TEMPS et SUP si leur valeur est -1. Il est à noter que seule la portion HEURE de l'argument TEMPS est utilisée pour une recherche.

LNMX =MRFMXL(iun)
lnmx =c_mrfmxl(iun)
Fonction retournant la longueur du plus long rapport contenu dans le fichier iun.

NBENR=MRFNBR(iun)
nbenr=c_mrfnbr(iun)
Fonction retournant le nombre des rapports actifs contenus dans le fichier iun. Le fichier peut être ouvert ou fermé. Si le fichier est ouvert, MRFNBR le laissera ouvert et si il est fermé, il le laissera fermé.

ISTAT=MRFOPC(optnom,opvalc)
istat=c_mrfopc(optnom,opvalc)
Fonction servant à initialiser une option de type caractères.

NBENR=MRFOPN(iun,mode)
nbenr=c_mrfopn(iun,mode)
Ouvrir un fichier de rapports. MRFOPN retourne le nombre des rapports actifs dans le fichier.

ISTAT=MRFOPR(optnom,opvalr)
istat=c_mrfopr(optnom,opvalr)
Fonction servant à initialiser une option de type réel.

ISTAT=MRFPRM(handle,STNID,IDTYP,LATI,LONG,DX,DY,DATE,TEMPS,FLGS, SUP, nsup,LNGR)
istat=c_mrfprm(handle,&stnid,&idtyp,&lati,&long,&dx,&dy,&date, &temps,&flgs,sup,nsup,&lngr)
Aller chercher les paramètres principaux du rapport dont le pointeur est handle.

ISTAT=MRFPUT(iun,handle,buf)
istat=c_mrfput(iun,handle,buf)
Écrire un rapport. Si handle est non nul, on réécrit le rapport dont le pointeur est ABS(handle) à la fin du fichier. Si handle = 0, on écrit un NOUVEL rapport à la fin du fichier.

ISTAT=MRFVOI(iun)
istat=c_mrfvoi(iun)
Lister sur le fichier 6 les paramètres descripteurs des rapports contenus dans le fichier IUN.
 

5.2 ARGUMENTS

NATURE DES ARGUMENTS

1majuscule pour FORTRAN, minuscule pour C
Argument Type1 Description
IUN INTEGER  
int
Numéro de référence du fichier
BUF INTEGER (*)  
int []
Tableau qui contient le rapport
DATE INTEGER  
int
Date synoptique de validité (AAMMJJ)
DX INTEGER  
int
Largeur d'une boite pour données regroupées (delta lon) en dixième de degrés
DY INTEGER  
int
Hauteur d'une boite pour données regroupées (delta lat) en dixième de degrés
FLGS INTEGER  
int
Marqueurs globaux (24 bits). Voir l'appendice A.
HANDLE INTEGER  
int
Pointeur à un rapport, généralement obtenu par un appel à MRFLOC.
IDTYP INTEGER  
int
Type de rapport (Code Type)
ISTAT INTEGER  
int
Indicateur d'erreur. 0=OK, <0=erreur, >0=information.
LATI INTEGER  
int
Latitude en centième de degrés par rapport au pole sud (0-18000) d'une station ou du coin inférieur gauche d'une boite.
LNGR INTEGER  
int
Longueur d'un rapport (en mots pour la machine-hote).
LNMX INTEGER  
int
Longueur du plus long rapport contenu dans un fichier. Cette longueur est exprimée en mots pour la machine-hôte.
LONG INTEGER  
int
Longitude en centième de degrés (0-35999) d'une station ou du coin inférieur gauche d'une boite.
MODE CHARACTER *(*)  
char []
'READ' : ouvrir pour lire le fichier.  
'CREATE' : ouvrir pour créer un fichier.  
'APPEND' : ouvrir pour lecture et ajouts.
NBENR INTEGER  
int
Nombre des rapports actifs contenus dans un fichier.
NSUP INTEGER  
int
Nombre de clés supplémentaires (ignoré à la version 1). NSUP=0 pour l'instant.
OPTNOM CHARACTER *(*)  
char []
Nom d'une option modifiable par l'usager.  
Options de type caractère:  
'ERRTOLR' - niveau de tolérance pour les erreurs.  
Options de type réel:  
'MISSING' - valeur pour données manquantes.
OPVALC CHARACTER *(*)  
char []
Valeur des options de type caractère.  
Pour OPTNOM = 'ERRTOLR', OPVALC peut prendre les valeurs suivantes:  
'TRIVIAL'  
'INFORMATIF'  
'WARNING'  
'ERROR'  
'FATAL'  
'SYSTEM'
OPVALR REAL  
float
Valeur des options de type réel.  
Pour OPTNOM = 'MISSING', OPVALR peut prendre les valeurs suivantes:???????
STNID CHARACTER *(9)  
char [9]
Identificateur pour le rapport (nom de la station). Dans le cas de données regroupées, STNID ne contient rien.
SUP INTEGER *(NSUP)  
int [nsup]
Clés supplémentaires (pour expansion).
TEMPS INTEGER  
int
Heure de l'observation (HHMM) Seule la portion "heure" est utilisée lors d'une recherche
 


6. SOUS-PROGRAMMES AUXILIAIRES

La première des fonctions ci-dessous sert à effectuer les conversions entre les valeurs entières (style BUFR) et les valeurs réelles des variables (unités CMC ou BUFR) alors que les autres fonctions servent à coder ou décoder la valeur d'un élément ou d'une liste d'éléments. Lorsqu'on fournit une liste d'éléments (LSTELE((NELE)) ou LISTE((NELE))) aux différents modules du progiciel BURP, chaque élément de la liste doit avoir été codé de façon à pouvoir être contenu dans un entier de seize bits. On trouvera aussi une fonction permettant à l'usager d'ajouter au tableau de conversion une liste d'éléments qu'il à lui-même définis.

6.1 SEQUENCES D'APPEL

Un argument en MAJUSCULES est un argument de SORTIE, un argument en minuscules est un argument d'ENTRÉE . En C, les arguments de sortie sont précédes d'un '&', sauf les tableaux, pour lesquels il faut de toute façon passer une adresse.

ISTAT=MRBCVT(liste,TBLVAL,RVAL,nele,nval,nt,mode)
istat=c_mrbcvt(liste,tblval,rval,nele,nval,nt,mode)
Conversion d' unités. Lorsqu'on a affaire à des variables décrites par un code plutot que par une valeur (p.ex. temps présent, type de nuages,...) on ne procéde à aucune conversion et la valeur RESTE dans le tableau d'entrée. Une donnée manquante est indiquée en allumant tous les bits de l'élément correspondant dans le tableau TBLVAL alors que pour le tableau RVAL, on insère la valeur attribuée a l'option 'MISSING'.

ISTAT=MRBCOL(dliste,LISTE,nele)
istat=c_mrbcol(dliste,liste,nele)
Conversion des noms d'éléments non-codés contenus dans DLISTE à un format code permettant au nom de chaque élément de tenir dans seize bits. Les éléments codés sont retournés dans le tableau LISTE.

ISTAT=MRBDCL(liste,DLISTE,nele)
istat=c_mrbdcl(liste,dliste,nele)
Conversion des noms d'éléments codés contenus dans LISTE à un format décimal. Les éléments décodés sont retournés dans le tableau DLISTE.

ELEM = MRBCOV(delem)
ELEM = c_mrbcov(delem)
Fonction retournant la valeur d'un élément DELEM de telle sortie qu'il puisse tenir en seize bits.

DELEM = MRBDCV(elem)
DELEM = c_mrbdcv(elem)
Fonction retournant la valeur décodée (format decimal en 6 shifts) du nom de l'élément ELEM qui a été codé en seize bits.

ISTAT=MRBSCT(tblusr,neleusr)
istat=c_mrbsct(tblusr,neleusr)
Ajouter au tableau de conversions utilisé par MRBCVT un tableau de variables à convertir définies par l'usager. Les noms d'éléments (non codes) définis par l'usager doivent se limiter aux valeurs entre 63000 et 63255 inclusivement et doivent être sous forme codée avant l'appel à MRBSCT.
 

6.2 ARGUMENTS

1majuscule pour FORTRAN, minuscule pour C
Argument Type1 Description
DELEM INTEGER  
int
Nom d'un élément représent, sous forme non codée.(format BUFR)
DLISTE INTEGER (NELE)  
int [nele]
Liste des nom d'éléments sous une forme non codée.(format BUFR)
ELEM INTEGER  
int
Nom d'élément représenté sous forme codée. (format CMC)
ISTAT INTEGER  
int
Code d'erreur. Voir l'APPENDICE - C
LISTE INTEGER (NELE)  
int [nele]
Liste des noms d'éléments représenté sous forme codées (CMC). Représentation codée, voir FM 94 BUFR + supplément local.
MODE INTEGER  
int
MODE = 0, TBLVAL(code BUFR) à RVAL(unités CMC)  
MODE = 1, RVAL(unités CMC) à TBLVAL(code BUFR)
NELE INTEGER  
int
Nombre d'éléments.
NELEUSR INTEGER  
int
Nombre d'éléments que l'usager désire ajouter au tableau de conversion. Deuxième dimension du tableau TBLUSR.
NVAL INTEGER  
int
Nombre de données par élément. (0-255)
NT INTEGER  
int
Nombre de groupes de NELE x NVAL valeurs. Troisième dimension (p.ex serie temporelle).
RVAL REAL (NELE,NVAL,NT)  
float [nele,nval,nt]
Champ de données, valeurs réelles. (format CMC)
TBLVAL INTEGER (NELE,NVAL,NT)  
int [nele,nval,nt]
Champ de données, valeurs entières. (format BUFR)
TBLUSR INTEGER (3,NELEUSR)  
int [3,NELEUSR]
Tableau de conversion de l'usager, de dimension (3,NELEUSR). La disposition du tableau TBLUSR est la suivante:  
TBLUSR(1,i) - nom "code" de l'élément à convertir  
TBLUSR(2,i) - ECHELLE pour la conversion  
TBLUSR(3,i) - BIAIS pour la conversion  
Pour faire la conversion de valeur réelle à entière (de RVAL à TBLVAL) MRBCVT fait l'opération:  
RVAL(i,j,k) = FLOAT(TBLVAL(i,j,k) + BIAIS)/10**ECHELLE
 
 


 
APPENDICE - A
 
 

DESCRIPTION ET POSITION DES DIFFÉRENTS MARQUEURS GLOBAUX: FLGS
 
Bits Description (marqueurs)
0 stations regroupées
1 vent de surface utilisé
2 message non fiable (p/t)
3 coordonnées incorrectes
4 message corrigé
5 message amendé
6 station rejetée par AO
7 station sur liste noire
8 station à évaluer
9 superobservation
10 données observées
11 données dérivées
12 résidus
13 vérifications
14 TEMP, partie RADAT
15 TEMP, partie A
16 TEMP, partie B
17 TEMP, partie C
18 TEMP, partie D
19 réservé
20 réservé
21 réservé
22 réservé
23 réservé
NB: le bit 0 est le bit le plus à droite du mot
 


 
APPENDICE - B
 

CALCUL DE LA LONGUEUR MINIMALE DE BUF
 

La longueur de BUF requise pour contenir un rapport que l'on désire créer se calcule de la façon suivante:

Longueur d'un bloc de données quelconque I:
LBLOC(I) = ( 128 + M64((NELE-3)*16) + M64(NELE*NVAL*NT*NBIT) )

Longueur de BUF pour insérer un nombre N de blocs:
LONGUEUR =

10 + ( 320 + LBLOC(1) + LBLOC(2) +...+ LBLOC(N))/BITMOT
 

 

NELE, NVAL, NT et NBIT sont définis dans le texte
 
 


 
APPENDICE - C
 
 

LISTE DES CODES D'ERREURS

En cas d'erreur, toutes les fonctions des progiciels BURP et XDF retournent au programme appelant un message indiquant le niveau de sévérité ainsi que la nature de l'erreur rencontrée. Grâce à la fonction MRFOPC, l'usager contrôle le niveau de sévérité au-delà duquel l'execution d'un programme prend fin. De plus, les fonctions BURP et XDF prennent une valeur plus grande ou égale à zéro lorsqu'il n'y à pas d'erreur (par exemple, pour retourner un HANDLE) et un code plus petit que zéro lorsqu'il y à eu erreur. Tous les messages d'erreur ont le format général suivant:

***SEVERITE: MODULE nom_du_module message_explicatif

par exemple:

***TRIVIALE: MODULE MRBADD POUR DATYP = 3 OU 5, METTRE NBIT EGAL À 8
 

Voici la liste des différents types d'erreurs et la valeur attribuée à ISTAT au retour de la fonction:
 
 
NOM NATURE DE L'ERREUR ISTAT
TRIVIA Erreur triviale 1
INFORM Message informatif pour l'usager 2
WARNIN Warning erreur 3
ERROR Erreur d'importance primordiale 4
ERFATAL Erreur que l'usager devrait savoir 5
SYSTEM Erreur de description d'un sabordage du programme 6
KAPUT Erreur intolérable, programme planté 7
EREDAT Datyp invalide 16
ERFRAP Fichier n'est pas un fichier rapport 30
ERFMOD Erreur de mode d'ouverture. Seuls les modes READ, CREATE et APPEND sont permis. 31
ERCLEF Trop de clefs supplémentaires 32
ERBNUM Numéro de bloc invalide 33
EROPTN Nom d'option inconnu 34
ERBTAB Erreur FATALE concernant le fichier TABLEBURP 35
ERBDOM Erreur TRIVIALE concernant le fichier TABLEBURP 36
ERELEM Nom d'élément invalide 37
ERBTYP BTP invalide (plus petit que zéro) 38
ERRCELL Dimension NCELL incorrecte 39
ERNPRM Dimension de TBLPRM incorrectes 40
ERCMPR Valeur trop grande pour 32 bits et DATYP de 2 41
NONOFTB Fichier créé avec TABLEBURP non-officielle 42
EREBDSC Mauvaise utilisation de BDESC 43
EREIVC Code d'élément invalide pour DATYP 7 à 9 44
 
 


 
APPENDICE - D

EXEMPLE D'UTILISATION

PROGRAM BURPEX

INTEGER FNOM,MRFOPN,MRFLOC,MRFGET,MRFPUT,MRFCLS
INTEGER MRBLOC,MRBXTR,MRBHDR,MRBINI,MRBPRM,MRBADD

INTEGER BUF1(1000),BUF2(1000), HANDLE,ISTAT,NOMBRE
INTEGER TEMPS,DATE,OARS,RUNN
INTEGER IDTYP,LATI,LONG,DX,DY,ELEV,DRND,NBLOCS,BLKNO
INTEGER TBLVAL(10,100),LSTELE(10),NELEM,NVAL,NT
INTEGER IBLOC, BFAM,BDESC,BTYP,NBIT,BIT0,DATYP
CHARACTER*9 STNID
INTEGER SUP,XAUX

BUF1(1) = 1000
BUF2(1) = 1000
IER = FNOM(10,'BURPF10','RND',0)
IF(IER .NE. 0) THEN
PRINT *,' ERREUR D''ASSOCIATION DE FICHIER'
STOP
ENDIF

IER = FNOM(20,'BURPF20','RND',0)
IF(IER .NE. 0) THEN
PRINT *,' ERREUR D''ASSOCIATION DE FICHIER'
STOP
ENDIF
*
* OUVERTURE DU FICHIER 10 EN MODE LECTURE
*
NOMBRE = MRFOPN(10,'READ')
*
* OUVERTURE DU FICHIER 20 EN MODE CREATE
*
NOMBRE = MRFOPN(20,'CREATE')
*
* CHERCHER TOUS LES RAPPORTS POUR LA STATION01 LE 12 JUIN 12Z
* ET EN FAIRE LA LECTURE
HANDLE = 0
HANDLE = MRFLOC(10,HANDLE,'STATION01',-1,-1,-1,120691,
1 1200,SUP,0)

1000 IF(HANDLE .GT. 0) THEN
ISTAT = MRFGET(HANDLE,BUF1)
*
* OBTENIR LES PARAMETRES DESCRIPTEURS DE LE RAPPORT LU ET
* ET LES UTILISER POUR INITIALISER UN NOUVEL RAPPORT
*
ISTAT = MRBHDR(BUF1,TEMPS,FLGS,STNID,IDTYP,LATI,LONG,DX,DY,
1 ELEV,DRND,DATE,OARS,RUNN,NBLOCS,SUP,0,XAUX,0)
*
ISTAT = MRBINI(20,BUF2,TEMPS,FLGS,STNID,IDTYP,LATI,LONG,DX,DY,
1 ELEV,DRND,DATE,OARS,RUNN,SUP,0,XAUX,0)
*

* TROUVER TOUS LES BLOCS DE TYPE BTYP=12 LES EXTRAIRES
* ET EN FAIRE UN NOUVEL RAPPORT POUR LE FICHIER 20
*
BLKNO = 0
BLKNO = MRBLOC(BUF1,-1,-1,12,BLKNO)
2000 IF(BLKNO .GT. 0) THEN
* LECTURE DU BLOC
ISTAT = MRBXTR(BUF1,BLKNO,LSTELE,TBLVAL)
* EXTRACTION DES PARAMETRES DESCRIPTEURS DU BLOC
ISTAT = MRBPRM(BUF1,BLKNO,NELE,NVAL,NT,BFAM,BDESC,
1 BTYP,NBIT,BIT0,DATYP)
* ECRITURE DU BLOC DANS BUF2
ISTAT = MRBADD(BUF2,IBLOC,NELE,NVAL,NT,BFAM,BDESC,
BTYP,NBIT,BIT0,DATYP,LSTELE,TBLVAL)
* RECHERCHE DU PROCHAIN BLOC DE MEME TYPE
BLKNO = MRBLOC(BUF1,-1,-1,12,BLKNO)
GOTO 2000
ENDIF
*
* ECRIRE LE NOUVEL RAPPORT SUR LE FICHIER BURP20
*
ISTAT = MRFPUT(20,0,BUF2)
*
* TROUVER LE RAPPORT SUIVANT
*
HANDLE = MRFLOC(10,HANDLE,'STATION01',-1,-1,-1,120691,
1 1200,SUP,0)
GOTO 1000
ENDIF

* FERMETURE DES FICHIER
*
ISTAT = MRFCLS(10)
ISTAT = MRFCLS(20)

STOP
END
 

SPECIALISTES
 
Mario Lepine -RPN- 421-4738
Michel Valin -RPN- 421-4753

Documentation par Vivian Lee, RPN, Dorval, 421-4743

NOTE
Voir aussi reflex(1), xdf(3), editbrp(1)
On peut aussi consulter le document décrivant la BANque de données
de COntrole de qualité et d'analyse BANCO.