91 CHARACTER*128 BORT_STR,ERRSTR
131 IF(iolun(lun).EQ.0)
THEN
136 ELSE IF(
mtab(1,lun).EQ.0)
THEN
142 IF(lus(lun).NE.0)
THEN
143 IF(iolun(abs(lus(lun))).EQ.0)
THEN
145 ELSE IF(lus(lun).GT.0)
THEN
154 IF(
icmpdx(lus(lun),lun).EQ.1)
THEN
158 lus(lun) = (-1)*lus(lun)
160 ELSE IF(
icmpdx(abs(lus(lun)),lun).EQ.1)
THEN
170 lus(lun) = abs(lus(lun))
174 ELSE IF(lus(lun).GT.0)
THEN
180 IF(iolun(lus(lun)).EQ.0)
THEN
182 ELSE IF( xtab(lus(lun)) .AND.
183 + (
icmpdx(lus(lun),lun).EQ.0) )
THEN
192 IF(iolun(lun).LT.0) lus(lun) = (-1)*lus(lun)
200 DO WHILE ((lum.LT.lun).AND.(lus(lun).EQ.0))
201 IF(
ishrdx(lum,lun).EQ.1)
THEN
215 IF(iolun(lun).NE.0 .AND.
ntba(lun).GT.0)
THEN
219 IF(iomsg(lun).NE.0)
THEN
220 IF(lus(lun).EQ.0)
THEN
226 inv(n,lun) = inv(n,lun)+inc
230 IF(lus(lun).LE.0)
THEN
239 nemo =
taba(itba,lun)(4:11)
241 mtab(itba,lun) = inod
244 ELSE IF( xtab(lus(lun)) .AND.
245 + (
icmpdx(lus(lun),lun).EQ.0) )
THEN
255 lunit = abs(iolun(lun))
256 IF(iomsg(lun).NE.0)
CALL closmg(lunit)
258 lundx = abs(iolun(lus(lun)))
270 IF(
typ(node).EQ.
'SUB')
THEN
274 ELSEIF(
typ(node).EQ.
'SEQ')
THEN
278 ELSEIF(
typ(node).EQ.
'RPC')
THEN
282 ELSEIF(
typ(node).EQ.
'RPS')
THEN
286 ELSEIF(
typ(node).EQ.
'REP')
THEN
290 ELSEIF(
typ(node).EQ.
'DRS')
THEN
294 ELSEIF(
typ(node).EQ.
'DRP')
THEN
298 ELSEIF(
typ(node).EQ.
'DRB')
THEN
302 ELSEIF(
typ(node).EQ.
'NUM')
THEN
306 ELSEIF(
typ(node).EQ.
'CHR')
THEN
323 expand =
typ(n).EQ.
'SUB' .OR.
typ(n).EQ.
'DRP' .OR.
typ(n).EQ.
'DRS'
324 . .OR.
typ(n).EQ.
'REP' .OR.
typ(n).EQ.
'DRB'
332 IF(
typ(noda).EQ.
'REP') knt(node) =
knti(noda)
333 IF(
typ(noda).NE.
'REP') knt(node) = 1
336 IF(newn.GT.
maxjl)
GOTO 902
338 knt(node) = max(
knti(node),knt(node))
3392
IF(
jump(node)*knt(node).GT.0)
THEN
342 ELSE IF(
link(node).GT.0)
THEN
347 IF(node.EQ.noda)
GOTO 3
348 IF(node.EQ.0 )
GOTO 903
349 knt(node) = max(knt(node)-1,0)
360 CALL errwrt(
'++++++++++++++BUFR ARCHIVE LIBRARY+++++++++++++++++')
362 WRITE ( unit=errstr, fmt=
'(A,I5,2X,A10,A5,6I8)' )
367 CALL errwrt(
'++++++++++++++BUFR ARCHIVE LIBRARY+++++++++++++++++')
375900
WRITE(bort_str,
'("BUFRLIB: MAKESTAB - MNEMONIC ",A," IS '//
376 .
'DUPLICATED IN SUBSET: ",A)') nemo,
tag(n1)
378901
WRITE(bort_str,
'("BUFRLIB: MAKESTAB - UNKNOWN TYPE ",A)')
typ(node)
380902
WRITE(bort_str,
'("BUFRLIB: MAKESTAB - NUMBER OF JSEQ ENTRIES IN'//
381 .
' JUMP/LINK TABLE EXCEEDS THE LIMIT (",I6,")")')
maxjl
383903
WRITE(bort_str,
'("BUFRLIB: MAKESTAB - NODE IS ZERO, FAILED TO '//
384 .
'CIRCULATE (TAG IS ",A,")")')
tag(n)
subroutine bort(STR)
This subroutine calls subroutine errwrt() to log an error message, then calls subroutine bort_exit() ...
subroutine chekstab(LUN)
THIS SUBROUTINE CHECKS THAT AN INTERNAL BUFR TABLE REPRESENTATION IS SELF-CONSISTENT AND FULLY DEFINE...
subroutine closmg(LUNIN)
This subroutine closes the BUFR message that is currently open for writing within internal arrays ass...
subroutine cpbfdx(LUD, LUN)
THIS SUBROUTINE COPIES BUFR TABLE (DICTIONARY) MESSAGES FROM ONE LOCATION TO ANOTHER WITHIN INTERNAL ...
subroutine errwrt(STR)
This subroutine allows the user to specify a custom location for the logging of error and diagnostic ...
integer function icmpdx(LUD, LUN)
This function determines whether the full set of associated DX BUFR Table information is identical be...
integer function ishrdx(LUD, LUN)
This function determines whether the same DX BUFR Table is being shared between two Fortran logical u...
subroutine makestab
THIS SUBROUTINE CONSTRUCTS AN INTERNAL JUMP/LINK TABLE WITHIN MODULE TABLES, USING THE INFORMATION WI...
This module contains array and variable declarations used to store bitmaps internally within a data s...
integer ntamc
Number of Table A mnemonics in jump/link table (up to a maximum of MXTAMC) which contain at least one...
This module contains array and variable declarations for use with any 2-03-YYY (change reference valu...
integer nnrv
Number of entries in the jump/link table which contain new reference values (up to a maximum of MXNRV...
This module contains array and variable declarations used to store DX BUFR tables internally for mult...
character *128, dimension(:,:), allocatable taba
Table A entries for each internal I/O stream.
integer, dimension(:,:), allocatable mtab
Entries within jump/link table corresponding to taba.
integer, dimension(:), allocatable ntba
Number of Table A entries for each internal I/O stream (up to a maximum of MAXTBA,...
This module contains array and variable declarations used to store the internal jump/link table.
integer, dimension(:), allocatable link
Link indices corresponding to tag, typ and jmpb:
integer, dimension(:), allocatable itp
Integer type values corresponding to typ:
integer, dimension(:), allocatable isc
Scale factors corresponding to tag and typ:
character *3, dimension(:), allocatable typ
Type indicators corresponding to tag:
integer, dimension(:), allocatable jump
Jump forward indices corresponding to tag and typ:
integer, dimension(:), allocatable knti
Initialized replication counts corresponding to typ and jump:
integer, dimension(:), allocatable ibt
Bit widths corresponding to tag and typ:
character *10, dimension(:), allocatable tag
Mnemonics in the jump/link table.
integer ntab
Number of entries in the jump/link table.
integer, dimension(:), allocatable irf
Reference values corresponding to tag and typ:
real *8, dimension(:), allocatable vali
Initialized data values corresponding to typ:
integer, dimension(:), allocatable jmpb
Jump backward indices corresponding to tag and typ:
This module declares and initializes the BMISS variable.
real *8, public bmiss
Current placeholder value to represent "missing" data when reading from or writing to BUFR files; thi...
This module declares and initializes the MAXJL variable.
integer maxjl
Maximum number of entries in the internal jump/link table.
This module declares and initializes the NFILES variable.
integer, public nfiles
Maximum number of BUFR files that can be connected to the BUFRLIB software (for reading or writing) a...
subroutine strcln
THIS SUBROUTINE RESETS THE MNEMONIC STRING CACHE IN THE BUFR INTERFACE (ARRAYS IN COMMON BLOCK /STCAC...
subroutine tabsub(LUN, NEMO)
THIS SUBROUTINE BUILDS THE ENTIRE JUMP/LINK TREE (I.E., INCLUDING RECURSIVELY RESOLVING ALL "CHILD" M...
subroutine wrdxtb(LUNDX, LUNOT)
THIS SUBROUTINE WRITES BUFR TABLE (DICTIONARY) MESSAGES ASSOCIATED WITH THE BUFR FILE IN LUNDX TO THE...