BUFR software Milan Dragosavac Slide 1 WMO BUFR training course Langen 17-20 April 2007 Slide 1
Download
Report
Transcript BUFR software Milan Dragosavac Slide 1 WMO BUFR training course Langen 17-20 April 2007 Slide 1
BUFR software
Milan Dragosavac
Slide 1
WMO BUFR training course
Langen
17-20 April 2007
Slide 1
ECMWF Data Formats
Standard WMO data formats ASCI and binary
FM 94-XII Ext. BUFR
FM 92-XII Ext. GRIB
BUFR for observations and verification scores
GRIB for fields
Archiving formats BUFR and GRIB only
Slide 2
WMO BUFR training course
Langen
17-20 April 2007
Slide 2
Requirements for BUFR software
Suitable for all observations data handling
Building blocks for other applications
Encoding
Decoding
Low maintenance costs
Portable
User friendly
Slide 3
WMO BUFR training course
Langen
17-20 April 2007
Slide 3
Programming languages used
Fortran 77
- All BUFR subroutines and functions
C
- Reading/writing BUFR data
- gbyte, sbyte routines to do bit manipulations
Slide 4
WMO BUFR training course
Langen
17-20 April 2007
Slide 4
Ecmwf BUFR software
How to get the software?
The software can be downloaded from Ecmwf web site
http://www.ecmwf.int/products/data/software/
Go to Free download and get bufr_000320.tar.gz file
gunzip bufr_000320.tar.gz
cd bufr_000320
Read README file for explanations
Execute make command which will create libbufr.a
cd examples
Slide 5
Running make will create number of executables
WMO BUFR training course
Langen
17-20 April 2007
Slide 5
Ecmwf BUFR software
Content of bufr_000320 directory
-rwxr--r--
1 maa ma
462 Jul 19 2006 Makefile
-rwxr--r--
1 maa ma
467 Jul 19 2006 Makefile.in
-rwxr--r--
1 maa ma 11201 Jul 19 2006 README
drwxr-xr-x 2 maa ma 4096 Jan 22 17:13 bufr_main_c_program
drwxr-xr-x 2 maa ma 4096 Feb 14 08:35 bufrdc
drwxr-xr-x 2 maa ma 8192 Feb 14 08:35 bufrtables
-rwxr--r--
1 maa ma 5327 Jul 19 2006 build_library
drwxr-xr-x 2 maa ma 4096 Feb 7 07:52 config
Slide 6
WMO BUFR training course
Langen
17-20 April 2007
Slide 6
Ecmwf BUFR software
drwxr-xr-x 2 maa ma 4096 Jan 5 11:42 data
drwxr-xr-x 2 maa ma 4096 Jul 19 2006 doc
drwxr-xr-x 2 maa ma 4096 Feb 14 08:28 examples
-rwxr--r--
1 maa ma
1330 Jul 19 2006 install
-rwxr--r--
1 maa ma
1196 Jul 19 2006 licence
drwxr-xr-x 2 maa ma 4096 Jan 22 16:35 options
drwxr-xr-x 2 maa ma 4096 Feb 14 08:35 pbio
Slide 7
WMO BUFR training course
Langen
17-20 April 2007
Slide 7
Ecmwf BUFR software
config directory contains various configuration files
for different platforms and compilers
options directory contains various options for different
platforms
You can make additional configurations and options if
needed
Slide 8
WMO BUFR training course
Langen
17-20 April 2007
Slide 8
Ecmwf BUFR software
pbio
pbio directory contain all c and fortran routines needed
for BUFR and CREX IO
all routines are part of bufr and crex libraries
bufrdc
bufrdc directory contain all bufr software source code
routines which are written in fortran 77
Slide 9
WMO BUFR training course
Langen
17-20 April 2007
Slide 9
Ecmwf BUFR software
examples
decode_bufr.F
tdexp.F
bufr2crex.F
create_bufr.F
doc
doc directory contain bufr software User’s Guide and
Reference Manual in pdf format
Slide 10
WMO BUFR training course
Langen
17-20 April 2007
Slide 10
Bufr format
Binary universal form for the representation of
meteorological data
Indicator section
Identification section
Optional section
Data description section
Data section
End section
Slide 11
WMO BUFR training course
Langen
17-20 April 2007
Slide 11
Bufr indicator section
Octet number Content
1-4
BUFR four letters in CCITT IA5
5-7
Total length of Bufr message in bytes
8
Bufr edition number ( currently 4 )
Slide 12
WMO BUFR training course
Langen
17-20 April 2007
Slide 12
Identification section
Octet number Content
1-3
4
Length of section 1
Bufr master table (zero if WMO FM 94-XII used )
5-6
Originating / generating centre
7-8
Originating / generating sub-centre
Slide 13
WMO BUFR training course
Langen
17-20 April 2007
Slide 13
Identification section continued
Octet number Content
9
Update sequence number (zero for original BUFR
message; incremented by one for updates)
10
Bit 1 = 0 no optional section
Bit 1 = 1 optional section follows
Bit 2-8 set to zero ( reserved )
11
Data category ( Bufr table A )
12
International data sub-category (common Tab 13)
13
Local sub-category
Slide 14
WMO BUFR training course
Langen
17-20 April 2007
Slide 14
Identification section continued
Octet number
Content
14
Version number of master table used
15
Version number of local tables used ( set to 0 or
255 if no local tables used
16 - 17
Year ( 4 digits )
18
Month
19
Day
20
Hour
21
Minute
22
Second
23-
Slide 15
Reserved for local use by ADP centres
WMO BUFR training course
Langen
17-20 April 2007
Slide 15
Optional section
Octet number Content
1-3
Length of section in bytes
4
Set to zero ( reserved )
5-
Reserved for local used by ADP centres
Slide 16
WMO BUFR training course
Langen
17-20 April 2007
Slide 16
Data description section
Octet number Content
1-3
4
5-6
7
Length of section in bytes
Set to zero ( reserved )
Number of data subsets
Bit 1 = 1 observed data
Bit 1 = 0 other data
Bit 2 = 1 compressed data
Bit 2 = 0 non compressed data
Bits 3-8 set to zero ( reserved )
8
17
Collection of descriptors Slide
defining
the data
WMO BUFR training course
Langen
17-20 April 2007
Slide 17
Data section
Octet number Content
1-3
Length of section in bytes
4
Set to zero ( reserved )
5-
Binary data as defined by sequence descriptors
Slide 18
WMO BUFR training course
Langen
17-20 April 2007
Slide 18
End section
Octet number Content
1-4
“7777” ( coded according to CCITT IA5 )
Slide 19
WMO BUFR training course
Langen
17-20 April 2007
Slide 19
Ecmwf Bufr software
Bufr is table driven code form
- no need to transfer element names, units …
- no need to change bufr software for new observations
Bufr table B – classification elements
- reference number
- element name
- element unit
- scale
- reference value
- data width in bits
WMO BUFR training course
Langen
Slide 20
17-20 April 2007
Slide 20
Ecmwf Bufr software
Bufr table D – list of common sequences to describe the
data
- table B elements
- operators
- other table D descriptors
Bufr table C – text and meaning of code/flag tables
Slide 21
WMO BUFR training course
Langen
17-20 April 2007
Slide 21
Ecmwf Bufr software
Bufr table naming convention
Bssswwwwwxxxxxyyyzzz.TXT
Cssswwwwwxxxxxyyyzzz.TXT
Dssswwwwwxxxxxyyyzzz.TXT
sss
- Master table number ( zero for WMO
meteorological tables
wwwww - Originating sub-centre
xxxxx
- Originating centre
yyy
- Version number of master tables used
Slide 22
zzz
- Version number of local tables used
WMO BUFR training course
Langen
17-20 April 2007
Slide 22
Ecmwf Bufr software
PATH for Bufr tables
export BUFR_TABLES=/xxx/
setenv BUFR_TABLES /xxx/
The path must end with back slash “/”
Defaults
Integer missing value indicator
NVIND=2147483647
Real missing value indicator
Slide 23
RVIND= 1.7E38
WMO BUFR training course
Langen
17-20 April 2007
Slide 23
Decoding Bufr data
There are four steps in bufr data processing
Open bufr input file
Read in one bufr message at a time
Expand bufr message
Use the data
Repeat last three steps until the end of file is reached
Slide 24
WMO BUFR training course
Langen
17-20 April 2007
Slide 24
PBIO routines
FORTRAN routines to handle products in an unblocked binary file
subroutine PBOPEN ( kunit, filename, mode, kerr )
Input arguments:
filename - character variable
mode
- character variable ‘r’ read, ‘w’ write, ‘a’ append, ‘r+’ read and
write
Output arguments:
kunit - integer unit number
kerr - integer status return code
Slide 25
WMO BUFR training course
Langen
17-20 April 2007
Slide 25
PBIO routines
kerr - 0, successful
-1, file does not exist
-2, invalid file name
-3, invalid open mode specified
Slide 26
WMO BUFR training course
Langen
17-20 April 2007
Slide 26
PBIO routines
To read Bufr product
subroutine PBBUFR (kunit, karray, kinlen, koutlen, kret)
Input parameters are integers:
kunit
- unit number obtained from pbopen
karray - array big enough to hold the product
kinlen - size in bytes of the array
Output parameters are integers:
koutlen - actual size in bytes of the product read into karray
kret
- status return code
WMO BUFR training course
Langen
17-20 April 2007
Slide 27
Slide 27
PBIO routines
kret from pbbufr subroutine:
0
Product has been successfully read
-1
End-of-file is hit before a product is read.
(Note that EOF does not cause a program fail.
This value must be explicitly caught by the
caller to avoid looping at EOF)
-2
There has been an error in the file-handling
(e.g. the file contains a truncated product)
-3
The size of karray is not sufficient for the
Slide 28
product
WMO BUFR training course
Langen
17-20 April 2007
Slide 28
PBIO routines
subroutine PBCLOSE (kunit, kret)
Input argument is an integer:
kunit - unit number from PBOPEN
Output argument is an integer:
kret – status return code
0 - OK
-1 - error in handling the file
Slide 29
WMO BUFR training course
Langen
17-20 April 2007
Slide 29
PBIO routines
File handling FORTRAN subroutines
subroutine PBSEEK (kunit, koffset, kstart, kret)
Input arguments are integers:
kunit - unit number from PBOPEN
kstart - 0, if koffset is an absolute count from the
beginning of the file
1, if koffset is a relative offset from the current
byte position in the file
2, if koffset is an absolute offset from the end of
Slide 30
file
WMO BUFR training course
Langen
17-20 April 2007
Slide 30
PBIO routines
Output argument is an integer:
kret - status return code
>= 0 Byte offset from the start of file after positioning
-1 End-of-file is hit before the product is read
-2 Error in handling the file
Slide 31
WMO BUFR training course
Langen
17-20 April 2007
Slide 31
PBIO routines
subroutine PBREAD (kunit, karray, kount, kret)
Input arguments are integers:
kunit - unit number from PBOPEN
kount - number of bytes to read from the file
Output arguments:
karray - an integer array to accept the bytes from the
read
kret – status return code
>=0 number of bytes read
Slide 32
-1
EOF reached before the product is read
-2
Error in file handling
WMO BUFR training course
Langen
17-20 April 2007
Slide 32
PBIO routines
subroutine PBWRITE( kunit, karray, kount, kerr)
Input arguments are integers:
kunit – unit number from PBOPEN
karray- an integer array holding bytes for write
kount – number of bytes to write to the file
Output arguments:
kret – status return code
>= 0 number of bytes written to theSlide
file
33
-1
Error in writing to the file
WMO BUFR training course
Langen
17-20 April 2007
Slide 33
Bufr software FORTRAN routines
Bufr expansion
subroutine BUFREX( kbufl, kbuff, ksup, ksec1, ksec2,
ksec3, ksec4, kelem, cnames,
cunits, kvals, values, cvals, kerr)
Input arguments:
kbufl
- length of bufr message in words
kbuff
- an integer array containing bufr message
kelem - expected number of expanded elements
kvals - the size of values array in Slide
words
34
WMO BUFR training course
Langen
17-20 April 2007
Slide 34
Bufr software FORTRAN routines
Output arguments:
ksup
- an array containing supplementary information
ksec0
- an array containing section 0 information
ksec1
- an array containing section 1 information
ksec2
- an array containing section 2 information
ksec3
- an array containing section 3 information
ksec4
- an array containing section 4 information
cnames - character array containing element names
cunits
- character array containing element units
values - real*8 array containing element
values
Slide 35
kerr
- status return code
WMO BUFR training course
Langen
17-20 April 2007
Slide 35
Bufr software FORTRAN routines
ksec0: an integer array ( size of 3 )
Array
index
Content
1
Length of section 0 in bytes
2
Total length of bufr message in bytes
3
Bufr edition number ( currently 4 )
Slide 36
WMO BUFR training course
Langen
17-20 April 2007
Slide 36
Bufr software FORTRAN routines
ksec1: an integer array ( size of 40 )
Array
index
Content
1
Length of section 1 in bytes
2
Bufr edition number ( currently 4 )
3
Origination centre
4
Update sequence number
5
Flag ( presence of section 2 in the message )
6
Bufr message type ( Bufr table A )
Slide 37
WMO BUFR training course
Langen
17-20 April 2007
Slide 37
Bufr software FORTRAN routines
ksec1 continued
Array
index
Content
7
Bufr message sub-type ( local use)
8
Version number of local tables used
9
Year
10
Month
11
Day
12
Hour
13
Minute
WMO BUFR training course
Slide 38
Langen
17-20 April 2007
Slide 38
Bufr software FORTRAN routines
ksec1 continued
Array
index
Content
14
Bufr master tables used
15
Version number of master table used
16
Originating sub-centre
17
International sub-category
18
Second
19-
Local ADP centre information (byte by byte)
Slide 39
WMO BUFR training course
Langen
17-20 April 2007
Slide 39
Bufr software FORTRAN routines
ksec2
Array
index
Content
1
Length of section 2 in bytes
2-
RDB key in packed form
Slide 40
WMO BUFR training course
Langen
17-20 April 2007
Slide 40
Bufr software FORTRAN routines
ksec3
Array
index
Content
1
Length of section 3 in bytes
2
Reserved
3
Number of subsets
4
Flag ( data type, compression)
Slide 41
WMO BUFR training course
Langen
17-20 April 2007
Slide 41
Bufr software FORTRAN routines
ksec4
Array
index
Content
1
Length of section 4 in bytes
2-
Reserved
Slide 42
WMO BUFR training course
Langen
17-20 April 2007
Slide 42
Bufr software FORTRAN routines
ksup – an integer array (size 9) containing supplementary
information
Array index
Content
1
Dimension ksec1 array
2
Dimension ksec2 array
3
Dimension ksec3 array
4
Dimension ksec4 array
5
Total number of expanded elements
6
Number of subsets
7
Total number of elements in cvals array
8
43
Total bufr message length in Slide
bytes
9
Dimension of ksec0 array
WMO BUFR training course
Langen
17-20 April 2007
Slide 43
Bufr software FORTRAN routines
Values array is of type real*8
If bufr table B element is CCITTIA5, corresponding
element contain a real number, when truncated to an
integer represents
index*1000+length
where
index – subscript of the element in CVALS array where
character strings are stored
length – number of characters in the string
Slide 44
WMO BUFR training course
Langen
17-20 April 2007
Slide 44
Bufr software FORTRAN routines
In the case of multi-subset data, one dimensional array
VALUES contains all subsets. Index to values array of
i-th element of observation is:
index=i+(nsub-1)*kelem
Slide 45
WMO BUFR training course
Langen
17-20 April 2007
Slide 45
BUFR SOFTWARE fortran ROUTINES
Bufr encoding
subroutine BUFREN (ksec0, ksec1, ksec2, ksec3, ksec4,
ktdlen, ktdlst, kdlen, kdata, kelem,
kvals, values, cvals, kbufl, kerr)
Input arguments:
ksec0
- an integer array containing section 0 information
ksec1
- an integer array containing section 1 information
ksec2
- an integer array of 4096 words containing section
2 information
Slide 46
ksec3
- an integer array containing section 3 header
information
WMO BUFR training course
Langen
17-20 April 2007
Slide 46
Bufr software FORTRAN routines
ksec4
- an integer array containing section4 header
information
ktdlen - an integer, number of data descriptors to be
packed in section 3 of bufr message
ktdlst
- an integer array containing ktdlen descriptors
kdlen
- an integer, dimension of kdata array
kdata
- an integer array containing delayed replication
values and possibly new reference value if
required
kelem - an integer containing expected number of
expanded elements
kvals
Slide 47
- an integer containing expected number of data
values
WMO BUFR training course
Langen
17-20 April 2007
Slide 47
Bufr software FORTRAN routines
values - real*8 array of kvals words containing element
values
cvals
- character*80 array of kvals words containing
CCITTIA5 elements
Output arguments:
kbufl - an integer containing the length of bufr message
in words
kbuff - an integer array containing packed bufr message
kerr
- integer, status return code
Slide 48
WMO BUFR training course
Langen
17-20 April 2007
Slide 48
Bufr software FORTRAN routines
Printing routines
Subroutine BUPRS0 (ksec0)
Subroutine BUPRS1 (ksec1)
Section 2 is for local use – no general printing routines
Subroutine buukey (ksec1,ksec2,key,ksup,kerr)
Subroutine BUPRS2 (ksup, key)
Slide 49
WMO BUFR training course
Langen
17-20 April 2007
Slide 49
Bufr software FORTRAN routines
To print section3
Subroutine BUSEL (ktdlen, ktdlst, ktdexl, ktdexp, kerr)
Or
Subroutine BUSEl2(ksubset, kelem, ktdlen, ktdlst, ktdexl,
ktdexp, cnames, cunits, kerr)
Subroutine BUPRS3 (ksec3, ktdlen, ktdlst, ktdexl, ktdexp,
kelem, cnames)
Slide 50
WMO BUFR training course
Langen
17-20 April 2007
Slide 50
Bufr software FORTRAN routines
To print data
Subroutine BUPRT (k, ksub1,ksub2,kelem,cnames,cunits,
cvals, kvals, values, ksup, ksec1, kerr)
Useful subroutines
Subroutine BUS012 (kbufl, kbuff, ksup, ksec0, ksec1,
ksec2, kerr)
Subroutine BUS0123 (kbufl, kbuff, ksup, ksec0, ksec1,
Slide 51
ksec2, ksec3, kerr)
WMO BUFR training course
Langen
17-20 April 2007
Slide 51
Bufr software FORTRAN routines
Bufr template design
Basic idea is to know one to one correspondence
between data descriptors expanded and the data values
To achieve that use:
subroutine BUXDES ( k, ksec1, ktdlen, ktdlst, kdlen,
kdata, kelem, ktdexl, ktdexp,
cnames, cunits, kerr)
Input arguments:
k
- an integer, 0 no print; 1 – print Slide 52
WMO BUFR training course
Langen
17-20 April 2007
Slide 52
Bufr software FORTRAN routines
ksec1 - an integer array containing section 1 information.
Set the following words
ksec1(2) – Bufr edition number
ksec1(3) – Originating centre
ksec1(8) – Version number of local tables used
ksec1(15) – version number of master table used
ktdlen – number of data descriptors
ktdlst- list of data descriptors to be packed in section 3
kdlen – dimension of kdata array
kdata - an integer array containing delayed
replications
Slide 53
kelem – expected number of expanded elements
WMO BUFR training course
Langen
17-20 April 2007
Slide 53
|Bufr software FORTRAN routines
Output arguments:
ktdexl – number of expanded elements
ktdexp – integer array containing list of expanded
elements
cnames – character *64 array containing element names
cunits – character*24 array containing element units
kerr – status return code
Slide 54
WMO BUFR training course
Langen
17-20 April 2007
Slide 54
Bufr software FORTRAN routines
Program to use for template design
…/bufr_000320/examples/tdexp.f
or
Bufrviewer application
Slide 55
WMO BUFR training course
Langen
17-20 April 2007
Slide 55
Bufr software FORTRAN routines
Resolving bit maps
- Bit maps are very useful bufr features which associate
quality control, first order statistics, departures,
retained/replaced and substituted values with original
values
- One application might have many bitmaps referring
backward to the data
Slide 56
WMO BUFR training course
Langen
17-20 April 2007
Slide 56
subroutine BUBOX (ksub, ksup, kelem, kwtr, cnames,
cunits, kvals, values, kbox, kapp, klen,
kboxr, vals, cboxn, cboxu, kerr)
ksub – subset number
ksup – array containing supplementary information
kelem – expected number of elements, it must be the same
as used in call to bufrex
kwtr – an integer array containing list of bufr table B
reference numbers ( ktdexp, output from busel
routine)
Slide 57
WMO BUFR training course
Langen
17-20 April 2007
Slide 57
Bufr software FORTRAN routines
cnames – array containing elements names
cunits - array containing element units
kvals – expected number of data values
values – array containing expanded values
Output arguments:
kbox – number of elements in the first column of box
kapp - number of applications
klen - max index for number of rows. The next column
starts at KLEN +1 element or
Slide 58
index=i +(KAPP-1)*klen
WMO BUFR training course
Langen
17-20 April 2007
Slide 58
Bufr software FORTRAN routines
kboxr – array containing bufr table B reference numbers
vals – a real*8 array containing boxed values
cboxn – character*64 array, boxed element names
cboxu – character*24 array, boxed element units
kerr – status return code
Slide 59
WMO BUFR training course
Langen
17-20 April 2007
Slide 59
Bufr software FORTRAN routines
subroutine buprtbox(kbox, kapp, klen, kboxr, vals,
cboxn, cboxu)
Input arguments:
kbox
- an integer containing number of elements in
the first column of the box
kapp
- an integer containing number of applications
klen
- an integer containing max index for number of
rows. The next column starts at klen+1
element or index =i+(kapp-1)*klen
Slide 60
WMO BUFR training course
Langen
17-20 April 2007
Slide 60
Bufr software FORTRAN routines
kboxr
- an integer array containing bufr table B
reference numbers
vals
- a real*8 array containing boxed values
cboxn
- a character*64 array containing boxed names
cboxu
- a character*24 array containing boxed units
Slide 61
WMO BUFR training course
Langen
17-20 April 2007
Slide 61
Bufr software FORTRAN routines
Example output
1 OPERATOR
************** 222000.0
2 GENERATING CENTRE( CODE TABLE 00
**************
98.0
3 GENERATING APPLICATION (CODE TAB
**************
1.0
4 STATISTICS (008024/008023)
**************
********
5 INCREMENTAL UPDATE NUMBER
**************
********
6 MINIMISATION SIMULATION NUMBER
**************
********
10.0
70.0
320.0
70.0
7 WMO BLOCK NUMBER
8 WMO STATION NUMBER
WMO BUFR training course
Langen
Slide 62
17-20 April 2007
Slide 62
Some Bufr operators
Quality control information in Bufr
- class 33 element
- associated field
- Operator 222000 + bit map
- 033220 variation analysis report event , valid for whole
report( observation)
Slide 63
WMO BUFR training course
Langen
17-20 April 2007
Slide 63
Some Bufr operators
Associated field
204001
031021
011001
204000
After expansion
031021 associate field significance
999999 associated field
Slide 64
011001 wind direction
WMO BUFR training course
Langen
17-20 April 2007
Slide 64
Some Bufr operators
Quality control information using 222000 operator
222000
101005
031031
001031
001032
101005
033007
Slide 65
WMO BUFR training course
Langen
17-20 April 2007
Slide 65
Some Bufr operators
First order statistics
224000
237000 Use previously define bit map
001031
001032
008023 First order statistics
101005
224255 First order statistics marker
Slide 66
WMO BUFR training course
Langen
17-20 April 2007
Slide 66
Some Bufr operators
Difference statistical values
225000
237000 Use previously define bit map
001031
001032
008024 Difference statistics
101005
225255 Difference statistics marker
Slide 67
WMO BUFR training course
Langen
17-20 April 2007
Slide 67
Bufr software and pre-processing
What happens when bufr data reach DPC
How to organize observation
Pre-process observations
- unpacking
- reorganization of data
- possible quality control
- grouping of observations which belong to
particular analysis cycle
- creating RDB key for further more efficient processing
- packing the data into bufr
Slide 68
- writing data into RDB
WMO BUFR training course
Langen
17-20 April 2007
Slide 68
Bufr software and pre-processing
Alternatively
- unpack bufr message
- write unpacked values into DB
- make decisions about archiving
Slide 69
WMO BUFR training course
Langen
17-20 April 2007
Slide 69