580 likes | 686 Views
CREX software. Milan Dragosavac. Requirements for CREX software. Suitable for small volume of observations Building blocks for other applications Encoding Decoding Conversion to BUFR Low maintenance costs Portable. Programming languages used. Fortran 77
E N D
CREX software Milan Dragosavac WMO BUFR training course Langen 17-20 April 2007
Requirements for CREX software • Suitable for small volume of observations • Building blocks for other applications • Encoding • Decoding • Conversion to BUFR • Low maintenance costs • Portable WMO BUFR training course Langen 17-20 April 2007
Programming languages used • Fortran 77 - All CREX subroutines and functions • C - Reading/writing CREX data - gbyte, sbyte routines unpack/pack bytes WMO BUFR training course Langen 17-20 April 2007
Ecmwf CREX 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 crex_000320.tar.gz file • gunzip crex_000320.tar.gz • cd crex_000320 • Read README file for explanations • Execute make command which will create libcrex.a • cd example • Running make will create number of executables WMO BUFR training course Langen 17-20 April 2007
Ecmwf CREX software • Content of crex_000310 directory -rw-r----- 1 maa ma 450 Jul 5 2006 Makefile -rw-r----- 1 maa ma 10758 Jul 5 2006 README -rwxr----- 1 maa ma 3662 Jul 5 2006 build_library drwxr-x--- 2 maa ma 4096 Jul 5 2006 config drwxr-x--- 2 maa ma 4096 Feb 12 07:53 crexdc drwxr-x--- 2 maa ma 4096 Feb 12 11:07 crextables drwxr-x--- 2 maa ma 4096 Jul 5 2006 doc drwxr-x--- 3 maa ma 4096 Feb 12 09:27 example - WMO BUFR training course Langen 17-20 April 2007
Ecmwf CREX software rwxr----- 1 maa ma 3107 Jul 5 2006 install -rw-r----- 1 maa ma 1196 Jul 5 2006 licence drwxr-x--- 2 maa ma 4096 Jul 5 2006 options drwxr-x--- 2 maa ma 4096 Feb 12 07:53 pbio WMO BUFR training course Langen 17-20 April 2007
Ecmwf CREX 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 WMO BUFR training course Langen 17-20 April 2007
Ecmwf CREX 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 • crexdc crexdc directory contain all crex software source code routines which are written in fortran 77 WMO BUFR training course Langen 17-20 April 2007
Ecmwf CREX software • example bufr2crex.F create_crex.F crex2bufr.F crextdexp.F decode_crex.F • doc doc directory contain CREX User’s Guide and Reference Manual in pdf format WMO BUFR training course Langen 17-20 April 2007
Ecmwf CREX software • Crex is table driven code form - no need to transfer element names, units … - no need to change CREX software for new observations • Crex table B – classification elements - reference number - element name - element unit - scale - data width in bytes WMO BUFR training course Langen 17-20 April 2007
Ecmwf CREX software • Crex table D – list of common sequences to describe the data - table B elements - operators - other table D descriptors • Crex table C – text and meaning of code/flag tables WMO BUFR training course Langen 17-20 April 2007
Ecmwf CREX software • CREX table naming convention BXXYYZZ DXXYYZZ B - Crex table B D - Crex table D XX - Crex Master table used “00” YY - Crex edition number used “01” ZZ - Crex table version number “03” WMO BUFR training course Langen 17-20 April 2007
Ecmwf CREX software • PATH for CREX tables export CREX_TABLES=/xxx/ setenv CREX_TABLES /xxx/ The path must end with back slash “/” • Check digit indicator export USE_E=true setenv USE_E true WMO BUFR training course Langen 17-20 April 2007
Ecmwf CREX software • Defaults Integer missing value indicator NVIND=2147483647 Real*8 missing value indicator RVIND= 1.7E38 WMO BUFR training course Langen 17-20 April 2007
Decoding CREX data There are 4 steps in CREX data processing • Open crex input file • Read in one crex message at a time • Expand crex message • Use the data Repeat last three steps until the end of file is reached WMO BUFR training course Langen 17-20 April 2007
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 WMO BUFR training course Langen 17-20 April 2007
PBIO routines kerr - 0, successful -1, file does not exist -2, invalid file name -3, invalid open mode specified WMO BUFR training course Langen 17-20 April 2007
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 WMO BUFR training course Langen 17-20 April 2007
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 the file -1 Error in writing to the file WMO BUFR training course Langen 17-20 April 2007
PBIO routines • Subroutine PBCREX( KUNIT, KARRAY, KINLEN, KOUTLEN, KRET) Input arguments: KUNIT - unit number returned by PBOPEN KARRAY - integer array big enough to hold crex message KINLEN - size in bytes of KARRAY Output arguments: KOUTLEN - size in bytes of the CREX product read KRET - 0 if OK WMO BUFR training course Langen 17-20 April 2007
PBIO routines KRET -1 if EOF is hit before CREX product is read -2 if file read error is generated -3 if size of KARRAY is not sufficient for the CREX product WMO BUFR training course Langen 17-20 April 2007
CREX software FORTRAN routines • CREX expansion subroutine crexex( kbufl, ybuff, ksup, ksec0,ksec1, ksec3, kelem, cnames, cunits, kvals, values, cvals, kerr) Input arguments: kbufl - length of bufr message in words ybuff - character string containing crex message kelem - expected number of expanded elements kvals - the size of values array in words WMO BUFR training course Langen 17-20 April 2007
CREX software FORTRAN routines Output arguments: ksup - an array containing supplementary information ksec0 - integer array of 3 words containing CREX section 0 information ksec1 - integer array of at least 40 words containing CREX section 1 information ksec3 - integer array of 4 words cnames – character*64 array of kelem containing element names cunits - character*24 array of kelem containing element units WMO BUFR training course Langen 17-20 April 2007
CREX software FORTRAN routines values - real*8 array of kvals containing expanded data cvals - character*80 array of kvals containing code table or CCITTIA5 CREX element entries kerr - return error code WMO BUFR training course Langen 17-20 April 2007
KSUP array of 9 words WMO BUFR training course Langen 17-20 April 2007
KSEC0 array WMO BUFR training course Langen 17-20 April 2007
KSEC1 array WMO BUFR training course Langen 17-20 April 2007
KSEC1 array WMO BUFR training course Langen 17-20 April 2007
KSEC3 array WMO BUFR training course Langen 17-20 April 2007
CREX software FORTRAN routines • Values array is of type real*8 • If crex 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 WMO BUFR training course Langen 17-20 April 2007
CREX 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 WMO BUFR training course Langen 17-20 April 2007
CREX SOFTWARE fortran ROUTINES • CREX encoding subroutine crexen (ksec0, ksec1, ksec3, ktdlen, crexktdlst, 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 ksec3 - an integer array of size 4 containing number of subsets WMO BUFR training course Langen 17-20 April 2007
CREX software FORTRAN routines ktdlen - an integer, number of data descriptors to be packed in section 1 of crex message crexktdlst - an integer array containing ktdlen descriptors kdlen - an integer, dimension of kdata array kdata - an integer array containing delayed replication values kelem - an integer containing expected number of expanded elements kvals - an integer containing expected number of data values WMO BUFR training course Langen 17-20 April 2007
CREX 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 WMO BUFR training course Langen 17-20 April 2007
KSEC0 array WMO BUFR training course Langen 17-20 April 2007
KSEC1 array WMO BUFR training course Langen 17-20 April 2007
KSEC1 array WMO BUFR training course Langen 17-20 April 2007
KSEC3 array WMO BUFR training course Langen 17-20 April 2007
CREX software FORTRAN routines • Printing routines subroutine CREXPRS0 (ksec0) Input arguments: ksec0 – an array containing section 0 information WMO BUFR training course Langen 17-20 April 2007
CREX software FORTRAN routines • subroutine crexprs1 ( ksec1,ksec3, ktdlen, ktdlst, ktdexl, ktdexp, kelem, cnames) Input arguments: ksec1 - an integer array containing CREX section 1 ksec3 - an integer array containing number of subsets ktdlen - number of data descriptors in section 1 ktdlst - an array containing data descriptors in section 1 ktdexl - number of entries in the list of expanded data descriptors ktdexp - an array containing expanded data descriptors WMO BUFR training course Langen 17-20 April 2007
CREX software FORTRAN routines kelem - expected number of expanded elements cnames - character*64 array of kelem containing CREX section 1 information KSEC1 WMO BUFR training course Langen 17-20 April 2007
CREX software FORTAN routines WMO BUFR training course Langen 17-20 April 2007
CREX software FORTRAN routines WMO BUFR training course Langen 17-20 April 2007
CREX software FORTRAN routines ksec3 WMO BUFR training course Langen 17-20 April 2007
CREX software FORTRAN routines • Subroutine crexsel2 (kbubset, kelem, ktdlen, ktdlst, ktdexl, ktdexp, cnames, cunits, kerr) Input arguments: ksubset - subset number kelem - number of expected elements Output arguments: ktdlen - number of data descriptors in section 1 ktdlst - list of data descriptors in section 1 WMO BUFR training course Langen 17-20 April 2007
CREX software FORTRAN routines ktdexl - number of expanded data descriptors ktdexp - array containing expanded data descriptors cnames - array containing element names cunits - array containing element units kerr - return error code WMO BUFR training course Langen 17-20 April 2007
CREX software FORTRAN routines • Subroutine crexprt ( k, ksub1, ksub2, kelem, cnames, cunits, cvals, kvals, values, ksup, ksec1, kerr) Input arguments: k - switch to print with/without code tables content 0 – no code table content, 1 – code table content ksub1 – starting subset ksub2 – ending subset kelem – dimension of cnames, cunits arrays cnames- character*64 array containing element names WMO BUFR training course Langen 17-20 April 2007
CREX software FORTRAN routines cunits – character*24 array containing element units kvals – dimension of values array values – real*8 array ( expanded data values) ksup – an array containing supplementary information ksec1 – an integer array of 40 containing section 1 WMO BUFR training course Langen 17-20 April 2007
CREX software FORTRAN routines KSUP WMO BUFR training course Langen 17-20 April 2007
CREX software FORTRAN routines KSEC1 WMO BUFR training course Langen 17-20 April 2007