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
|
|
|
|
|
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
|
|
|
|
|
On groupe plusieurs rapports dans un même segment jusqu'à concurrence de 256.
3.3 DISPOSITION DU RÉPERTOIRE D'UN SEGMENT
|
|
|
|
|
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
|
|
|
|
|
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
|
|
|
|
|
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
|
|
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 |
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é |
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 =
où
LONGUEUR: longueur de BUF (en mots) pour contenir le rapport
BITMOT: nombre de bits dans un mot de la machine hôte
M64(A): est défini comme étant le premier nombre de bits supérieur ou égal à A qui est un multiple de 64. M64(A)=INT((A+63)/64)*64
Par exemple, M(160) = INT((160+63)/64)*64 = 192
NELE, NVAL, NT et NBIT sont définis dans le texte
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 |
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.