38 recursive subroutine ufbmem(lunit,inew,iret,iunit)
42 use modv_vars,
only: im8b, maxmem, maxmsg, iprt
49 integer,
intent(in) :: lunit, inew
50 integer,
intent(out) :: iret, iunit
51 integer my_lunit, my_inew, iflg, itim, lun, il, im, itemp, ier, nmsg, lmem, i, mlast0,
idxmsg,
nmwrd
53 character*128 bort_str, errstr
60 call x84(lunit,my_lunit,1)
61 call x84(inew,my_inew,1)
62 call ufbmem(my_lunit,my_inew,iret,iunit)
64 call x48(iunit,iunit,1)
72 call openbf(lunit,
'IN',lunit)
94 call status(lunit,lun,il,im)
108 write(bort_str,
'("BUFRLIB: UFBMEM - ERROR READING MESSAGE NUMBER",I5," INTO MEMORY FROM UNIT",I3)') nmsg+1,lunit
121 if(nmsg>maxmsg) iflg = 1
123 if(lmem+
mlast>maxmem) iflg = 2
144 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
145 write ( unit=errstr, fmt=
'(A,A,I8,A)' )
'BUFRLIB: UFBMEM - THE NO. OF MESSAGES REQUIRED TO STORE ', &
146 'ALL MESSAGES INTERNALLY EXCEEDS MAXIMUM (', maxmsg,
') - INCOMPLETE READ'
148 write ( unit=errstr, fmt=
'(A,I8,A,I8,A)' )
'>>>UFBMEM STORED ',
msgp(0),
' MESSAGES OUT OF ', nmsg,
'<<<'
150 write ( unit=errstr, fmt=
'(A,I8,A,I8,A)' )
'>>>UFBMEM STORED ', mlast0,
' BYTES OUT OF ',
mlast,
'<<<'
152 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
161 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
162 write ( unit=errstr, fmt=
'(A,A,I8,A)' )
'BUFRLIB: UFBMEM - THE NO. OF BYTES REQUIRED TO STORE ', &
163 'ALL MESSAGES INTERNALLY EXCEEDS MAXIMUM (', maxmem,
') - INCOMPLETE READ'
165 write ( unit=errstr, fmt=
'(A,I8,A,I8,A)' )
'>>>UFBMEM STORED ', mlast0,
' BYTES OUT OF ',
mlast,
'<<<'
167 write ( unit=errstr, fmt=
'(A,I8,A,I8,A)' )
'>>>UFBMEM STORED ',
msgp(0),
' MESSAGES OUT OF ', nmsg,
'<<<'
169 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
214 recursive subroutine ufbmex(lunit,lundx,inew,iret,mesg)
216 use modv_vars,
only: im8b, maxmem, maxmsg, iprt
223 character*128 bort_str, errstr
225 integer,
intent(in) :: lunit, lundx, inew
226 integer,
intent(out) :: mesg(*), iret
227 integer my_lunit, my_lundx, my_inew, nmesg, iflg, itim, ier, nmsg, lmem, i, mlast0,
iupbs01,
nmwrd
234 call x84(lunit,my_lunit,1)
235 call x84(lundx,my_lundx,1)
236 call x84(inew,my_inew,1)
241 call x84(mesg(1),mesg(1),nmesg)
243 call ufbmex(my_lunit,my_lundx,my_inew,iret,mesg(1))
244 call x48(mesg(1),mesg(1),nmesg+iret)
245 call x48(iret,iret,1)
253 call openbf(lunit,
'IN',lundx)
282 write(bort_str,
'("BUFRLIB: UFBMEX - ERROR READING MESSAGE NUMBER",I5," INTO MEMORY FROM UNIT",I3)') nmsg+1,lunit
288 if(nmsg>maxmsg) iflg = 1
290 if(lmem+
mlast>maxmem) iflg = 2
311 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
312 write ( unit=errstr, fmt=
'(A,A,I8,A)' )
'BUFRLIB: UFBMEX - THE NO. OF MESSAGES REQUIRED TO STORE ', &
313 'ALL MESSAGES INTERNALLY EXCEEDS MAXIMUM (', maxmsg,
') - INCOMPLETE READ'
315 write ( unit=errstr, fmt=
'(A,I8,A,I8,A)' )
'>>>UFBMEX STORED ',
msgp(0),
' MESSAGES OUT OF ', nmsg,
'<<<'
317 write ( unit=errstr, fmt=
'(A,I8,A,I8,A)' )
'>>>UFBMEX STORED ', mlast0,
' BYTES OUT OF ',
mlast,
'<<<'
319 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
328 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
329 write ( unit=errstr, fmt=
'(A,A,I8,A)' )
'BUFRLIB: UFBMEX - THE NO. OF BYTES REQUIRED TO STORE ', &
330 'ALL MESSAGES INTERNALLY EXCEEDS MAXIMUM (', maxmem,
') - INCOMPLETE READ'
332 write ( unit=errstr, fmt=
'(A,I8,A,I8,A)' )
'>>>UFBMEX STORED ', mlast0,
' BYTES OUT OF ',
mlast,
'<<<'
334 write ( unit=errstr, fmt=
'(A,I8,A,I8,A)' )
'>>>UFBMEX STORED ',
msgp(0),
' MESSAGES OUT OF ', nmsg,
'<<<'
336 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
377 recursive subroutine readmm(imsg,subset,jdate,iret)
379 use modv_vars,
only: im8b
383 integer,
intent(inout) :: imsg
384 integer,
intent(out) :: jdate, iret
386 character*8,
intent(out) :: subset
393 call x84(imsg,imsg,1)
394 call readmm(imsg,subset,jdate,iret)
395 call x48(imsg,imsg,1)
396 call x48(jdate,jdate,1)
397 call x48(iret,iret,1)
403 call rdmemm(imsg,subset,jdate,iret)
429 recursive integer function ireadmm(imsg,subset,idate)
result(iret)
431 use modv_vars,
only: im8b
435 integer,
intent(inout) :: imsg
436 integer,
intent(out) :: idate
438 character*8,
intent(out) :: subset
445 call x84(imsg,imsg,1)
446 iret=
ireadmm(imsg,subset,idate)
447 call x48(imsg,imsg,1)
448 call x48(idate,idate,1)
454 call readmm(imsg,subset,idate,iret)
482 recursive subroutine rdmemm(imsg,subset,jdate,iret)
484 use modv_vars,
only: im8b, iprt
493 integer,
intent(in) :: imsg
494 integer,
intent(out) :: jdate, iret
495 integer my_imsg, lun, il, im, ii, jj, kk, nwrd, iptr, lptr, ier
497 character*128 bort_str, errstr
498 character*8,
intent(out) :: subset
507 call x84(imsg,my_imsg,1)
508 call rdmemm(my_imsg,subset,jdate,iret)
509 call x48(jdate,jdate,1)
510 call x48(iret,iret,1)
522 if(imsg==0 .or.imsg>
msgp(0))
then
525 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
527 errstr =
'BUFRLIB: RDMEMM - REQUESTED MEMORY MESSAGE NUMBER {FIRST (INPUT) ARGUMENT} IS 0, RETURN WITH IRET = -1'
529 write ( unit=errstr, fmt=
'(A,I6,A,I6,A)' )
'BUFRLIB: RDMEMM - REQ. MEMORY MESSAGE #', imsg, &
530 ' {= 1ST (INPUT) ARG.} > # OF MESSAGES IN MEMORY (',
msgp(0),
'), RETURN WITH IRET = -1'
533 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
544 do while ((.not.known).and.(jj>=1))
545 if (
ipmsgs(jj)<=imsg)
then
552 write(bort_str,
'("BUFRLIB: RDMEMM - UNKNOWN DX TABLE FOR REQUESTED MESSAGE #",I5)') imsg
563 call errwrt(
'+++++++++++++++++++++++++++++++++++++++++++++')
564 write ( unit=errstr, fmt=
'(A,I3,A,I3,A,I6)' )
'BUFRLIB: RDMEMM - RESETTING TO USE DX TABLE #', jj, &
565 ' INSTEAD OF DX TABLE #',
ldxts,
' FOR REQUESTED MESSAGE #', imsg
567 call errwrt(
'+++++++++++++++++++++++++++++++++++++++++++++')
595 if(imsg<
msgp(0)) lptr =
msgp(imsg+1)-iptr
605 call cktaba(lun,subset,jdate,ier)
630 use modv_vars,
only: im8b, iprt
639 integer,
intent(in) :: isub
640 integer,
intent(out) :: iret
641 integer my_isub, lun, il, im, mbym, nbyt, i,
iupb
643 character*128 bort_str, errstr
650 call x84(isub,my_isub,1)
652 call x48(iret,iret,1)
661 if(im==0)
call bort(
'BUFRLIB: RDMEMS - A MEMORY MESSAGE MUST BE OPEN IN INPUT BUFR FILE, NONE ARE')
662 if(
nsub(lun)/=0)
then
663 write(bort_str,
'("BUFRLIB: RDMEMS - UPON ENTRY, SUBSET POINTER IN MEMORY MESSAGE IS NOT AT BEGINNING (",I3," '// &
664 'SUBSETS HAVE BEEN READ, SHOULD BE 0)")')
nsub(lun)
668 if(isub>
msub(lun))
then
670 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
671 write ( unit=errstr, fmt=
'(A,I5,A,A,I5,A)' )
'BUFRLIB: RDMEMS - REQ. SUBSET #', isub,
' (= 1st INPUT ', &
672 'ARG.) > # OF SUBSETS IN MEMORY MESSAGE (',
msub(lun),
')'
674 call errwrt(
'RETURN WITH IRET = -1')
675 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
692 elseif(
msgunp(lun)==1)
then
705 if(iret/=0)
call bort(
'BUFRLIB: RDMEMS - CALL TO ROUTINE READSB RETURNED WITH IRET = -1 (EITHER MEMORY MESSAGE '// &
706 'NOT OPEN OR ALL SUBSETS IN MESSAGE READ')
725 use modv_vars,
only: mxdxts, iprt
732 integer,
intent(in) :: lunit
733 integer ict, lun, il, im, ier, j, lmem, idxmsg, iupbs3, nmwrd
739 if (
ndxts >= mxdxts )
call bort(
'BUFRLIB: CPDXMM - MXDXTS OVERFLOW')
743 call status(lunit,lun,il,im)
747 do while ( .not. done )
749 if ( ier == -2 )
call bort(
'BUFRLIB: CPDXMM - UNEXPECTED READ ERROR')
750 if ( ier == -1 )
then
758 else if ( idxmsg(
mgwa) /= 1 )
then
765 else if ( iupbs3(
mgwa,
'nsub') == 0 )
then
776 if ( (
ndxm + ict ) >
mxdxm )
call bort(
'BUFRLIB: CPDXMM - MXDXM OVERFLOW')
779 if ( (
ldxm + lmem ) >
mxdxw )
call bort(
'BUFRLIB: CPDXMM - MXDXW OVERFLOW')
795 if ( iprt >= 2 )
then
796 call errwrt(
'+++++++++++++++++++++++++++++++++++++++++++++')
797 write ( unit=errstr, fmt=
'(A,I3,A,I3,A)')
'BUFRLIB: CPDXMM - STORED NEW DX TABLE #',
ndxts, &
798 ' CONSISTING OF ', ict,
' MESSAGES'
800 call errwrt(
'+++++++++++++++++++++++++++++++++++++++++++++')
829 recursive subroutine ufbmms(imsg,isub,subset,jdate)
831 use modv_vars,
only: im8b
838 integer,
intent(in) :: imsg, isub
839 integer,
intent(out) :: jdate
840 integer my_imsg, my_isub, lun, il, im, iret
842 character*8,
intent(out) :: subset
844 character*128 bort_str
851 call x84(imsg,my_imsg,1)
852 call x84(isub,my_isub,1)
853 call ufbmms(my_imsg,my_isub,subset,jdate)
854 call x48(jdate,jdate,1)
862 call rdmemm(imsg,subset,jdate,iret)
865 write(bort_str,
'("BUFRLIB: UFBMMS - REQUESTED MEMORY MESSAGE NUMBER TO READ IN (",I5,") EXCEEDS THE NUMBER OF '// &
866 'MESSAGES IN MEMORY (",I5,")")') imsg,
msgp(0)
868 write(bort_str,
'("BUFRLIB: UFBMMS - REQUESTED MEMORY MESSAGE NUMBER TO READ IN IS ZERO - THIS IS NOT VALID")')
875 write(bort_str,
'("BUFRLIB: UFBMMS - REQ. SUBSET NUMBER TO READ IN (",I3,") EXCEEDS THE NUMBER OF SUBSETS (",I3,") '// &
876 'IN THE REG. MEMORY MESSAGE (",I5,")")') isub,
msub(lun),imsg
900 recursive subroutine ufbmns(irep,subset,idate)
902 use modv_vars,
only: im8b
908 integer,
intent(in) :: irep
909 integer,
intent(out) :: idate
912 character*8,
intent(out) :: subset
914 character*128 bort_str
921 call x84(irep,my_irep,1)
922 call ufbmns(my_irep,subset,idate)
923 call x48(idate,idate,1)
934 do while(
ireadmm(imsg,subset,idate)==0)
936 call rdmems(irep-jrep,iret)
942 write(bort_str,
'("BUFRLIB: UFBMNS - REQ. SUBSET NO. TO READ IN (",I5,") EXCEEDS TOTAL NO. OF SUBSETS IN THE COLLECTION '// &
943 'OF MEMORY MESSAGES (",I5,")")') irep,jrep
966 recursive subroutine ufbrms(imsg,isub,usr,i1,i2,iret,str)
968 use modv_vars,
only: im8b, iprt
975 integer,
intent(in) :: imsg, isub, i1, i2
976 integer,
intent(out) :: iret
977 integer my_imsg, my_isub, my_i1, my_i2, jdate, lun, il, im
979 real*8,
intent(out) :: usr(i1,i2)
981 character*(*),
intent(in) :: str
982 character*128 bort_str, errstr
990 call x84(imsg,my_imsg,1)
991 call x84(isub,my_isub,1)
994 call ufbrms(my_imsg,my_isub,usr,my_i1,my_i2,iret,str)
995 call x48(iret,iret,1)
1004 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
1005 errstr = .LE.
'BUFRLIB: UFBRMS - 4th ARG. (INPUT) IS 0, SO RETURN WITH 6th ARG. (IRET) = 0; 7th ARG. (STR) ='
1008 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
1014 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
1015 errstr = .LE.
'BUFRLIB: UFBRMS - 5th ARG. (INPUT) IS 0, SO RETURN WITH 6th ARG. (IRET) = 0; 7th ARG. (STR) ='
1018 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
1026 call rdmemm(imsg,subset,jdate,iret)
1029 write(bort_str,
'("BUFRLIB: UFBRMS - REQUESTED MEMORY MESSAGE NUMBER TO READ IN (",I5,") EXCEEDS THE NUMBER OF '// &
1030 'MESSAGES IN MEMORY (",I5,")")') imsg,
msgp(0)
1032 write(bort_str,
'("BUFRLIB: UFBRMS - REQUESTED MEMORY MESSAGE NUMBER TO READ IN IS ZERO - THIS IS NOT VALID")')
1039 write(bort_str,
'("BUFRLIB: UFBRMS - REQ. SUBSET NUMBER TO READ IN (",I3,") EXCEEDS THE NUMBER OF SUBSETS (",I3,") '// &
1040 'IN THE REG. MEMORY MESSAGE (",I5,")")') isub,
msub(lun),imsg
1090 recursive subroutine ufbtam(tab,i1,i2,iret,str)
1092 use modv_vars,
only: im8b, bmiss, iprt
1102 character*(*),
intent(in) :: str
1103 character*128 bort_str, errstr
1104 character*10 tgs(100)
1105 character*8 subset, cval
1108 integer,
intent(in) :: i1, i2
1109 integer,
intent(out) :: iret
1110 integer maxtg, nnod, ncon, nods, nodc, ivls, kons, my_i1, my_i2, i, irec, isub, itbl, lun, il, im, jdate, mret, &
1111 kbit, mbit, nbit, n, node, imsg, kmsg, nrep, ntg, nbyt, nbmp,
nmsub
1113 real*8,
intent(out) :: tab(i1,i2)
1116 common /usrstr/ nnod,ncon,nods(20),nodc(10),ivls(10),kons(10)
1118 equivalence(cval,rval)
1123 mps(node) = 2_8**(
ibt(node))-1
1130 call x84(i1,my_i1,1)
1131 call x84(i2,my_i2,1)
1132 call ufbtam(tab,my_i1,my_i2,iret,str)
1133 call x48(iret,iret,1)
1141 if(
msgp(0)==0)
return
1143 tab(1:i1,1:i2) = bmiss
1147 call parstr(str,tgs,maxtg,ntg,
' ',.true.)
1152 if(tgs(i)==
'IREC') irec = i
1153 if(tgs(i)==
'ISUB') isub = i
1154 if(tgs(i)==
'ITBL') itbl = i
1161 outer:
do imsg=1,
msgp(0)
1162 call rdmemm(imsg,subset,jdate,mret)
1164 write(bort_str,
'("BUFRLIB: UFBTAM - HIT END-OF-FILE READING MESSAGE NUMBER",I5," IN INTERNAL MEMORY")') imsg
1168 call string(str,lun,i1,0)
1169 if(irec>0) nods(irec) = 0
1170 if(isub>0) nods(isub) = 0
1171 if(itbl>0) nods(itbl) = 0
1178 call rdmemm(0,subset,jdate,mret)
1181 call rdmemm(kmsg,subset,jdate,mret)
1183 write(bort_str,
'("BUFRLIB: UFBTAM - HIT END-OF-FILE READING MESSAGE NUMBER",I5," IN INTERNAL MEMORY")') kmsg
1189 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
1190 write ( unit=errstr, fmt=
'(A,A,I8,A,A)' )
'BUFRLIB: UFBTAM - THE NO. OF DATA SUBSETS IN MEMORY ', &
1191 .GT.
'IS LIMIT OF ', i2,
' IN THE 3RD ARG. (INPUT) - INCOMPLETE READ'
1193 write ( unit=errstr, fmt=
'(A,I8,A,I8,A)' )
'>>>UFBTAM STORED ', iret,
' REPORTS OUT OF ', nrep,
'<<<'
1195 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
1204 nods(i) = abs(nods(i))
1208 mbit =
mbyt(lun)*8+16
1212 inner:
do while(n+1<=
nval(lun))
1217 if(
itp(node)==1)
then
1218 call upb8(ival,nbit,mbit,
mbay(1,lun))
1223 if(nods(i)==node)
then
1224 if(
itp(node)==1)
then
1225 call upb8(ival,nbit,mbit,
mbay(1,lun))
1227 elseif(
itp(node)==2)
then
1228 call upb8(ival,nbit,mbit,
mbay(1,lun))
1229 if(ival<mps(node)) tab(i,iret) =
ups(ival,node)
1230 elseif(
itp(node)==3)
then
1233 call upc(cval,nbit/8,
mbay(1,lun),kbit,.true.)
1241 if(nods(i)>0) cycle inner
1251 if(irec>0) tab(irec,iret) =
nmsg(lun)
1252 if(isub>0) tab(isub,iret) =
nsub(lun)
1253 if(itbl>0) tab(itbl,iret) =
ldxts
1259 call rdmemm(0,subset,jdate,mret)
subroutine bort(str)
Log an error message, then abort the application program.
subroutine upb(nval, nbits, ibay, ibit)
Decode an integer value from within a specified number of bits of an integer array,...
subroutine upb8(nval, nbits, ibit, ibay)
Decode an 8-byte integer value from within a specified number of bits of an integer array,...
real *8 function ups(ival, node)
Unpack a real*8 value from an integer by applying the proper scale and reference values.
recursive integer function iupb(mbay, nbyt, nbit)
Decode an integer value from within a specified number of bits of an integer array,...
subroutine upc(chr, nchr, ibay, ibit, cnvnull)
Decode a character string from within a specified number of bytes of an integer array,...
subroutine stbfdx(lun, mesg)
Copy a DX BUFR tables message into the internal memory arrays in module moda_tababd.
subroutine dxinit(lun, ioi)
Clear out the internal arrays (in module moda_tababd) holding the DX BUFR table, then optionally init...
integer function idxmsg(mesg)
Check whether a BUFR message contains DX BUFR tables information that was generated by the NCEPLIBS-b...
subroutine errwrt(str)
Specify a custom location for the logging of error and diagnostic messages generated by the NCEPLIBS-...
subroutine makestab
Build the entire internal jump/link table within module moda_tables, using all of the internal BUFR t...
recursive subroutine rdmems(isub, iret)
Read a specified data subset from the BUFR message that was most recently read via a call to subrouti...
subroutine cpdxmm(lunit)
Read an entire DX BUFR table from a specified file into internal memory arrays.
recursive subroutine rdmemm(imsg, subset, jdate, iret)
Read a specified BUFR message from internal arrays in memory, so that it is now in scope for processi...
recursive subroutine ufbmem(lunit, inew, iret, iunit)
Connect a new file to the NCEPLIBS-bufr software for input operations, then read the entire file cont...
recursive subroutine readmm(imsg, subset, jdate, iret)
Read a specified BUFR message from internal arrays in memory, so that it is now in scope for processi...
recursive subroutine ufbmex(lunit, lundx, inew, iret, mesg)
Connect a new file to the NCEPLIBS-bufr software for input operations, then read the entire file cont...
recursive subroutine ufbmns(irep, subset, idate)
Read a specified data subset from internal arrays in memory, so that it is now in scope for processin...
recursive subroutine ufbrms(imsg, isub, usr, i1, i2, iret, str)
Read one or more data values from a data subset in internal arrays.
recursive subroutine ufbtam(tab, i1, i2, iret, str)
Read through every data subset in internal arrays and return one or more specified data values from e...
recursive subroutine ufbmms(imsg, isub, subset, jdate)
Read a specified data subset from internal arrays.
recursive integer function ireadmm(imsg, subset, idate)
Call subroutine readmm() and pass back its return code as the function value.
Wrap C NCEPLIBS-bufr functions so they can be called from within the Fortran part of the library.
Declare arrays and variables used to store BUFR messages internally for multiple file IDs.
integer ibit
Bit pointer within ibay.
integer, dimension(:,:), allocatable mbay
Current BUFR message for each file ID.
integer, dimension(:), allocatable mbyt
Length (in bytes) of current BUFR message for each file ID.
Declare an array used by various subroutines and functions to hold a temporary working copy of a BUFR...
integer, dimension(:), allocatable mgwa
Temporary working copy of BUFR message.
Declare arrays used to store information about the current BUFR message that is in the process of bei...
integer, dimension(:), allocatable nmsg
Current message pointer within logical unit.
integer, dimension(:), allocatable msub
Total number of data subsets in message.
integer, dimension(:), allocatable nsub
Current subset pointer within message.
Declare arrays and variables used to store the contents of one or more BUFR files within internal mem...
integer, dimension(:), allocatable msgp
Pointers to the beginning of each message within msgs (up to a maximum of maxmsg, and where array ele...
integer, dimension(:), allocatable ipmsgs
Pointers to first message within msgs for which each DX BUFR table applies.
integer, dimension(:), allocatable msgs
BUFR messages read from one or more BUFR files.
integer, dimension(:), allocatable icdxts
Number of consecutive messages within mdx which constitute each DX BUFR table, beginning with the cor...
integer mxdxm
Maximum number of DX BUFR table messages that can be stored within mdx.
integer, dimension(:), allocatable ifdxts
Pointers to the beginning of each DX BUFR table within mdx.
integer munit
Fortran logical unit number for use in accessing contents of BUFR files within internal memory.
integer ndxm
Number of DX BUFR table messages stored within mdx (up to a maximum of mxdxm).
integer ldxm
Number of array elements filled within mdx (up to a maximum of mxdxw).
integer mlast
Number of array elements filled within msgs (up to a maximum of maxmem).
integer ldxts
Number of DX BUFR table that is currently in scope, depending on which BUFR message within msgs is cu...
integer ndxts
Number of DX BUFR tables represented by the messages within mdx (up to a maximum of mxdxts).
integer, dimension(:), allocatable mdx
DX BUFR table messages read from one or more BUFR files, for use in decoding the messages in msgs.
integer mxdxw
Maximum number of entries that can be stored within mdx.
integer, dimension(:), allocatable ipdxm
Pointers to the beginning of each message within mdx.
Declare arrays and variables used to store the internal jump/link table.
integer, dimension(:), allocatable ibt
Bit widths corresponding to tag and typ:
integer, dimension(:), allocatable itp
Integer type values corresponding to typ:
Declare an array used to store, for each file ID from which a BUFR message is currently being read as...
integer, dimension(:), allocatable msgunp
Flag indicating how to unpack data subsets from BUFR message:
Declare arrays used to store data values and associated metadata for the current BUFR data subset in ...
integer, dimension(:), allocatable nval
Number of data values in BUFR data subset.
integer, dimension(:,:), allocatable, target inv
Inventory pointer which links each data value to its corresponding node in the internal jump/link tab...
recursive subroutine closbf(lunit)
Close the connection between logical unit lunit and the NCEPLIBS-bufr software.
recursive subroutine openbf(lunit, io, lundx)
Connect a new file to the NCEPLIBS-bufr software for input or output operations, or initialize the li...
recursive subroutine status(lunit, lun, il, im)
Check whether a specified Fortran logical unit number is currently connected to the NCEPLIBS-bufr sof...
subroutine wtstat(lunit, lun, il, im)
Update file status in library internals.
recursive integer function nmsub(lunit)
Get the total number of data subsets available within the BUFR message that was most recently opened ...
integer function nmwrd(mbay)
Given an integer array containing Section 0 from a BUFR message, determine the array size (in integer...
subroutine rdmsgw(lunit, mesg, iret)
Read the next BUFR message from logical unit lunit as an array of integer words.
subroutine usrtpl(lun, invn, nbmp)
Expand a subset template within internal arrays.
recursive subroutine readsb(lunit, iret)
Read the next data subset from a BUFR message.
recursive subroutine ufbint(lunin, usr, i1, i2, iret, str)
Read or write one or more data values from or to a data subset.
subroutine cktaba(lun, subset, jdate, iret)
Get the Table A mnemonic from Sections 1 and 3 of a BUFR message.
recursive integer function iupbs01(mbay, s01mnem)
Read a specified value from within Section 0 or Section 1 of a BUFR message.
subroutine parstr(str, tags, mtag, ntag, sep, limit80)
Parse a string containing one or more substrings into an array of substrings.
subroutine string(str, lun, i1, io)
Check whether a string is in the internal mnemonic string cache.
subroutine x48(iin4, iout8, nval)
Encode one or more 4-byte integer values as 8-byte integer values.
subroutine x84(iin8, iout4, nval)
Encode one or more 8-byte integer values as 4-byte integer values.