47 recursive subroutine gets1loc(s1mnem,iben,isbyt,iwid,iret)
49 use modv_vars,
only: im8b
53 character*(*),
intent(in) :: s1mnem
55 integer,
intent(in) :: iben
56 integer,
intent(out) :: isbyt, iwid, iret
64 call x84(iben,my_iben,1)
65 call gets1loc(s1mnem,my_iben,isbyt,iwid,iret)
66 call x48(isbyt,isbyt,1)
77 if(s1mnem==
'LEN1')
then
80 else if(s1mnem==
'BMT')
then
82 else if(s1mnem==
'OGCE')
then
90 else if(s1mnem==
'GSES')
then
99 else if(s1mnem==
'USN')
then
105 else if(s1mnem==
'ISC2')
then
112 else if(s1mnem==
'MTYP')
then
118 else if(s1mnem==
'MSBTI')
then
124 else if(s1mnem==
'MSBT')
then
130 else if(s1mnem==
'MTV')
then
136 else if(s1mnem==
'MTVL')
then
142 else if(s1mnem==
'YEAR')
then
149 else if(s1mnem==
'YCEN')
then
155 else if(s1mnem==
'CENT')
then
161 else if(s1mnem==
'MNTH')
then
167 else if(s1mnem==
'DAYS')
then
173 else if(s1mnem==
'HOUR')
then
179 else if(s1mnem==
'MINU')
then
185 else if(s1mnem==
'SECO')
then
246 recursive integer function iupbs01(mbay,s01mnem)
result(iret)
248 use modv_vars,
only: im8b, nby0
252 character*(*),
intent(in) :: s01mnem
254 integer,
intent(in) :: mbay(*)
255 integer ival,
iupb,
i4dy, iben, isbyt, iwid, iretgs, iyoc, icen
260 ok4cent(ival) = ((ival>=19).and.(ival<=21))
275 if(s01mnem==
'LENM')
then
276 iret =
iupb(mbay,5,24)
280 if(s01mnem==
'LEN0')
then
287 iben =
iupb(mbay,8,8)
288 if(s01mnem==
'BEN')
then
295 call gets1loc(s01mnem,iben,isbyt,iwid,iretgs)
297 iret =
iupb(mbay,nby0+isbyt,iwid)
298 if(s01mnem==
'CENT')
then
302 if(.not.ok4cent(iret)) iret = -1
304 else if( (s01mnem==
'YEAR') .and. (iben<4) )
then
308 iyoc =
iupb(mbay,21,8)
309 icen =
iupb(mbay,26,8)
313 if(ok4cent(icen))
then
316 iret = (icen-1)*100 + iyoc
319 iret =
i4dy(mod(iyoc,100)*1000000)/10**6
347 recursive integer function iupbs3(mbay,s3mnem)
result(iret)
349 use modv_vars,
only: im8b
353 character*(*),
intent(in) :: s3mnem
355 integer,
intent(in) :: mbay(*)
356 integer len0, len1, len2, len3, l4, l5, ipt, ival, imask,
iupb
363 iret =
iupbs3(mbay,s3mnem)
371 call getlens(mbay,3,len0,len1,len2,len3,l4,l5)
372 ipt = len0 + len1 + len2
376 if(s3mnem==
'NSUB')
then
377 iret =
iupb(mbay,ipt+5,16)
378 else if( (s3mnem==
'IOBS') .or. (s3mnem==
'ICMP') )
then
379 ival =
iupb(mbay,ipt+7,8)
380 if(s3mnem==
'IOBS')
then
385 iret = min(1,iand(ival,imask))
441 recursive integer function iupvs01(lunit,s01mnem)
result(iret)
443 use modv_vars,
only: im8b
449 character*(*),
intent(in) :: s01mnem
451 integer,
intent(in) :: lunit
452 integer my_lunit, lun, ilst, imst,
iupbs01
459 call x84(lunit,my_lunit,1)
470 call status(lunit,lun,ilst,imst)
471 if(ilst==0)
call bort(
'BUFRLIB: IUPVS01 - INPUT BUFR FILE IS CLOSED, IT MUST BE OPEN FOR INPUT')
472 if(ilst>0)
call bort(
'BUFRLIB: IUPVS01 - INPUT BUFR FILE IS OPEN FOR OUTPUT, IT MUST BE OPEN FOR INPUT')
473 if(imst==0)
call bort(
'BUFRLIB: IUPVS01 - A MESSAGE MUST BE OPEN IN INPUT BUFR FILE, NONE ARE')
519 recursive subroutine pkbs1(ival,mbay,s1mnem)
521 use modv_vars,
only: im8b
525 character*(*),
intent(in) :: s1mnem
527 integer,
intent(in) :: ival
528 integer,
intent(inout) :: mbay(*)
529 integer my_ival, iben, isbyt, iwid, iret,
iupbs01, ibit
531 character*128 bort_str
538 call x84(ival,my_ival,1)
539 call pkbs1(my_ival,mbay,s1mnem)
549 call gets1loc(s1mnem,iben,isbyt,iwid,iret)
550 if ( (iret==0) .and. &
551 ( (s1mnem==
'USN') .or. (s1mnem==
'BMT') .or. (s1mnem==
'OGCE') .or. (s1mnem==
'GSES') .or. (s1mnem==
'MTYP') .or. &
552 (s1mnem==
'MSBTI') .or. (s1mnem==
'MSBT') .or. (s1mnem==
'MTV') .or. (s1mnem==
'MTVL') .or. (s1mnem==
'YCEN') .or.&
553 (s1mnem==
'CENT') .or. (s1mnem==
'YEAR') .or. (s1mnem==
'MNTH') .or. (s1mnem==
'DAYS') .or. (s1mnem==
'HOUR') .or.&
554 (s1mnem==
'MINU') .or. (s1mnem==
'SECO') ) )
then
556 ibit = (
iupbs01(mbay,
'LEN0')+isbyt-1)*8
557 call pkb(ival,iwid,mbay,ibit)
559 write(bort_str,
'("BUFRLIB: PKBS1 - CANNOT OVERWRITE LOCATION CORRESPONDING TO MNEMONIC (",A,") WITHIN BUFR EDITION '// &
560 '(",I1,")")') s1mnem, iben
617 recursive subroutine pkvs01(s01mnem,ival)
619 use modv_vars,
only: im8b, mxs01v
625 character*(*),
intent(in) :: s01mnem
627 integer,
intent(in) :: ival
630 character*128 bort_str
637 call x84(ival,my_ival,1)
638 call pkvs01(s01mnem,my_ival)
647 if ( ( .not.
allocated(
cmnem) ) .or. ( .not.
allocated(
ivmnem) ) )
then
656 if(s01mnem==
cmnem(i))
then
665 if(
ns01v>=mxs01v)
then
666 write(bort_str,
'("BUFRLIB: PKVS01 - CANNOT OVERWRITE MORE THAN ",I2," DIFFERENT LOCATIONS WITHIN SECTION 0 '// &
667 'OR SECTION 1")') mxs01v
688 use modv_vars,
only: maxnc, mxcnem, iprt
697 integer,
intent(in) :: lun
698 integer irepct, ireadmt, igettdi, itmp, ncds3, ii, jj, ifxy, igetntbi, n, idn
700 character*6 numb, adn30
710 if ( ireadmt( lun ) == 1 )
then
733 if (
ncnem > 0 )
then
735 do while ( (.not.incach) .and. (ii<=
ncnem) )
736 if ( ncds3 ==
ndc(ii) )
then
739 do while ( (incach) .and. (jj<=ncds3) )
750 if ( iprt >= 2 )
then
751 call errwrt(
'+++++++++++++++++++++++++++++++++++++++++++++++++')
752 errstr =
'BUFRLIB: READS3 - RE-USED CACHE LIST FOR ' //
cnem(ii)
754 call errwrt(
'+++++++++++++++++++++++++++++++++++++++++++++++++')
767 n = igetntbi( lun,
'A' )
771 write (
tamnem(lun),
'(A5,I3.3)')
'MSTTB', n
772 cseq =
'TABLE A MNEMONIC ' //
tamnem(lun)
777 if (
ncnem > mxcnem )
call bort(
'BUFRLIB: READS3 - MXCNEM OVERFLOW')
783 if ( iprt >= 2 )
then
784 call errwrt(
'+++++++++++++++++++++++++++++++++++++++++++++++++')
785 errstr =
'BUFRLIB: READS3 - STORED CACHE LIST FOR ' //
cnem(
ncnem)
787 call errwrt(
'+++++++++++++++++++++++++++++++++++++++++++++++++')
794 numb = adn30( idn, 6 )
825 recursive subroutine upds3(mbay,lcds3,cds3,nds3)
827 use modv_vars,
only: im8b
831 integer,
intent(in) :: mbay(*), lcds3
832 integer,
intent(out) :: nds3
833 integer my_lcds3, len0, len1, len2, len3, l4, l5, ipt, jj,
iupb
835 character*6,
intent(out) :: cds3(*)
843 call x84(lcds3,my_lcds3,1)
844 call upds3(mbay,my_lcds3,cds3,nds3)
845 call x48(nds3,nds3,1)
853 call getlens(mbay,3,len0,len1,len2,len3,l4,l5)
854 ipt = len0 + len1 + len2
861 if(nds3>lcds3)
call bort(
'BUFRLIB: UPDS3 - OVERFLOW OF OUTPUT DESCRIPTOR ARRAY; TRY A LARGER DIMENSION FOR THIS ARRAY')
862 cds3(nds3) =
adn30(
iupb(mbay,ipt+jj,16),6)
887 use modv_vars,
only: im8b, lendat
891 integer,
intent(in) :: len
894 character*128 bort_str
901 call x84(len,my_len,1)
908 if(len/=8 .and. len/=10)
then
909 write(bort_str,
'("BUFRLIB: DATELEN - INPUT ARGUMENT IS",I4," - IT MUST BE EITHER 8 OR 10")') len
933 recursive subroutine datebf(lunit,mear,mmon,mday,mour,idate)
935 use modv_vars,
only: im8b, iprt
941 integer,
intent(in) :: lunit
942 integer,
intent(out) :: mear, mmon, mday, mour, idate
952 call x84(lunit,my_lunit,1)
953 call datebf(my_lunit,mear,mmon,mday,mour,idate)
954 call x48(mear,mear,1)
955 call x48(mmon,mmon,1)
956 call x48(mday,mday,1)
957 call x48(mour,mour,1)
958 call x48(idate,idate,1)
966 if ( .not.
allocated(
mgwa) )
call openbf(lunit,
'FIRST',lunit)
970 call status(lunit,lun,jl,jm)
971 if(jl/=0)
call bort (
'BUFRLIB: DATEBF - INPUT BUFR FILE IS OPEN, IT MUST BE CLOSED')
975 call openbf(lunit,
'INX',lunit)
981 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
982 errstr =
'BUFRLIB: DATEBF - SECTION 1 DATE COULD NOT BE LOCATED - RETURN WITH IDATE = -1'
984 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
1016 recursive integer function igetdate(mbay,iyr,imo,idy,ihr)
result(iret)
1018 use modv_vars,
only: im8b, lendat
1022 integer,
intent(in) :: mbay(*)
1023 integer,
intent(out) :: iyr, imo, idy, ihr
1031 iret=
igetdate(mbay,iyr,imo,idy,ihr)
1045 if(lendat/=10) iyr = mod(iyr,100)
1046 iret = (iyr*1000000) + (imo*10000) + (idy*100) + ihr
1064 recursive integer function i4dy(idate)
result(iret)
1066 use modv_vars,
only: im8b
1070 integer,
intent(in) :: idate
1071 integer my_idate, iy
1078 call x84(idate,my_idate,1)
1085 if(idate<10**8)
then
1088 iret = idate + 19*100000000
1090 iret = idate + 20*100000000
1130 recursive subroutine dumpbf(lunit,jdate,jdump)
1132 use modv_vars,
only: im8b, iprt
1138 integer,
intent(in) :: lunit
1139 integer,
intent(out) :: jdate(*), jdump(*)
1142 character*128 errstr
1149 call x84(lunit,my_lunit,1)
1150 call dumpbf(my_lunit,jdate,jdump)
1151 call x48(jdate(1),jdate(1),5)
1152 call x48(jdump(1),jdump(1),5)
1165 call status(lunit,lun,jl,jm)
1166 if(jl/=0)
call bort(
'BUFRLIB: DUMPBF - INPUT BUFR FILE IS OPEN, IT MUST BE CLOSED')
1167 call openbf(lunit,
'INX',lunit)
1176 ii =
igetdate(
mgwa,jdate(1),jdate(2),jdate(3),jdate(4))
1183 ii =
igetdate(
mgwa,jdump(1),jdump(2),jdump(3),jdump(4))
1190 if (iprt>=1 .and. (jdate(1)==-1.or.jdump(1)==-1))
then
1191 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
1192 if(jdate(1)==-1)
then
1193 errstr =
'BUFRLIB: DUMPBF - FIRST EMPTY BUFR MESSAGE SECTION 1 DATE COULD NOT BE LOCATED - RETURN WITH JDATE = 5*-1'
1196 if(jdump(1)==-1)
then
1197 errstr =
'BUFRLIB: DUMPBF - SECOND EMPTY BUFR MESSAGE SECTION 1 DATE COULD NOT BE LOCATED - RETURN WITH JDUMP = 5*-1'
1200 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
1218 use modv_vars,
only: im8b
1224 integer,
intent(in) :: lunit, mini
1225 integer my_lunit, my_mini, lun, il, im
1232 call x84(lunit,my_lunit,1)
1233 call x84(mini,my_mini,1)
1234 call minimg(my_lunit,my_mini)
1240 call status(lunit,lun,il,im)
1241 if(il==0)
call bort(
'BUFRLIB: MINIMG - OUTPUT BUFR FILE IS CLOSED, IT MUST BE OPEN FOR OUTPUT')
1242 if(il<0)
call bort(
'BUFRLIB: MINIMG - OUTPUT BUFR FILE IS OPEN FOR INPUT, IT MUST BE OPEN FOR OUTPUT')
1243 if(im==0)
call bort(
'BUFRLIB: MINIMG - A MESSAGE MUST BE OPEN IN OUTPUT BUFR FILE, NONE ARE')
1266 use modv_vars,
only: iprt, fxy_sbyct
1275 integer,
intent(in) :: lun
1276 integer,
intent(out) :: jdate, iret
1277 integer,
parameter :: ncpfx = 3
1278 integer mtyp, msbt, mty1, msb1, isub, ksub, len0, len1, len2, len3, l4, l5, lundx, ii, &
1279 itab, inod, iad3, iad4, iyr, imo, idy, ihr, iupb, ifxy, iupbs01, iupbs3, i4dy, igetdate
1281 character*128 bort_str, errstr
1282 character*8,
intent(out) :: subset
1283 character*2,
parameter :: cpfx(ncpfx) = (/
'NC',
'FR',
'FN'/)
1294 mtyp = iupbs01(
mbay(1,lun),
'MTYP')
1295 msbt = iupbs01(
mbay(1,lun),
'MSBT')
1296 jdate = igetdate(
mbay(1,lun),iyr,imo,idy,ihr)
1302 if(
isc3(lun)==0)
then
1310 call getlens(
mbay(1,lun),3,len0,len1,len2,len3,l4,l5)
1311 iad3 = len0+len1+len2
1312 ksub = iupb(
mbay(1,lun),iad3+8,16)
1313 isub = iupb(
mbay(1,lun),iad3+10,16)
1321 outer:
do while (.true.)
1323 if(
isc3(lun)/=0)
then
1326 call nemtbax(lun,subset,mty1,msb1,inod)
1328 mbyt(lun) = 8*(iad4+4)
1334 inner:
do while (.true.)
1336 call numtab(lun,isub,subset,tab,itab)
1337 call nemtbax(lun,subset,mty1,msb1,inod)
1341 mbyt(lun) = (iad4+4)
1346 call numtab(lun,ksub,subset,tab,itab)
1347 call nemtbax(lun,subset,mty1,msb1,inod)
1350 mbyt(lun) = 8*(iad4+4)
1359 write(subset,
'(A2,2I3.3)') cpfx(ii),mtyp,msbt
1360 call nemtbax(lun,subset,mty1,msb1,inod)
1362 if(ksub==ifxy(fxy_sbyct))
then
1363 mbyt(lun) = (iad4+4)
1366 mbyt(lun) = 8*(iad4+4)
1379 call errwrt(
'++++++++++++++BUFR ARCHIVE LIBRARY+++++++++++++++++')
1380 errstr =
'BUFRLIB: CKTABA - LAST RESORT, CHECK FOR EXTERNAL BUFR TABLE VIA CALL TO IN-LINE OPENBT'
1382 call errwrt(
'++++++++++++++BUFR ARCHIVE LIBRARY+++++++++++++++++')
1396 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
1397 errstr =
'BUFRLIB: CKTABA - UNRECOGNIZED TABLE A MESSAGE TYPE (' // subset //
') - RETURN WITH IRET = -1'
1399 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
1411 if(
isc3(lun)==0)
then
1413 write(bort_str,
'("BUFRLIB: CKTABA - MESSAGE TYPE MISMATCH (SUBSET=",A8,", MTYP=",I3,", MTY1=",I3)') subset,mtyp,mty1
1416 if( msbt/=msb1 .and. ( verify(subset(3:8),
'1234567890') == 0 ) )
then
1417 write(bort_str,
'("BUFRLIB: CKTABA - MESSAGE SUBTYPE MISMATCH (SUBSET=",A8,", MSBT=",I3,", MSB1=",I3)') subset,msbt,msb1
1421 if(iupbs3(
mbay(1,lun),
'ICMP')>0)
msgunp(lun) = 2
1425 idate(lun) = i4dy(jdate)
1427 msub(lun) = iupbs3(
mbay(1,lun),
'NSUB')
1429 if(iret/=11)
nmsg(lun) =
nmsg(lun)+1
1473 recursive subroutine mesgbc(lunin,mesgtyp,icomp)
1475 use modv_vars,
only: im8b
1482 integer,
intent(in) :: lunin
1483 integer,
intent(out) :: mesgtyp, icomp
1484 integer my_lunin, lunit, irec, ier, i, lun, il, im,
iupbs01,
iupbs3,
idxmsg
1490 call x84(lunin,my_lunin,1)
1491 call mesgbc(my_lunin,mesgtyp,icomp)
1492 call x48(mesgtyp,mesgtyp,1)
1493 call x48(icomp,icomp,1)
1502 if(lunit==lunin)
then
1505 call openbf(lunit,
'INX',lunit)
1513 if(mesgtyp>=0) mesgtyp = -mesgtyp
1526 call status(lunit,lun,il,im)
1564 use modv_vars,
only: im8b
1570 integer,
intent(in) :: lunit
1571 integer,
intent(out) :: mesgtyp
1578 call x84(lunit,my_lunit,1)
1579 call mesgbf(my_lunit,mesgtyp)
1580 call x48(mesgtyp,mesgtyp,1)
1587 call openbf(lunit,
'INX',lunit)
subroutine bort(str)
Log an error message, then abort the application program.
recursive integer function iupb(mbay, nbyt, nbit)
Decode an integer value from within a specified number of bits of an integer array,...
subroutine pkb(nval, nbits, ibay, ibit)
Encode an integer value within a specified number of bits of an integer array, starting at the bit im...
subroutine rdusdx(lundx, lun)
Read and parse a file containing a user-supplied DX BUFR table in character format,...
subroutine nemtbax(lun, nemo, mtyp, msbt, inod)
Get information about a Table A descriptor from the internal DX BUFR tables.
subroutine stntbia(n, lun, numb, nemo, celsq)
Store a new entry within internal BUFR Table A.
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 numtab(lun, idn, nemo, tab, iret)
Get information about a descriptor, based on the WMO bit-wise representation of an FXY value.
character *(*) function adn30(idn, ldn)
Convert an FXY value from its WMO bit-wise representation to a character string of length 5 or 6.
subroutine makestab
Build the entire internal jump/link table within module moda_tables, using all of the internal BUFR t...
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, 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 arrays and variables for the internal Table A mnemonic cache that is used for Section 3 decod...
character *8, dimension(:), allocatable cnem
Table A mnemonics.
integer ncnem
Number of entries in the internal Table A mnemonic cache (up to a maximum of mxcnem).
integer, dimension(:,:), allocatable idcach
WMO bit-wise representations of the child descriptors for the corresponding Table A mnemonic in cnem.
integer, dimension(:), allocatable ndc
Number of child descriptors for the corresponding Table A mnemonic in cnem.
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 inode
Table A mnemonic for type of BUFR message.
integer, dimension(:), allocatable idate
Section 1 date-time of message.
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 custom values for certain mnemonics within Sections 0 and ...
integer, dimension(:), allocatable ivmnem
Custom values for use within Sections 0 and 1 of all future output BUFR messages written to all Fortr...
integer ns01v
Number of custom values stored.
character *8, dimension(:), allocatable cmnem
Section 0 and 1 mnemonics corresponding to ivmnem.
Declare arrays used by various subroutines and functions to hold a temporary working copy of a Sectio...
integer, dimension(:), allocatable ids3
Temporary working copy of Section 3 descriptor list in integer form.
character *6, dimension(:), allocatable cds3
Temporary working copy of Section 3 descriptor list in character form.
Declare an array used to store a switch for each file ID, indicating whether BUFR messages read from ...
character *8, dimension(:), allocatable tamnem
Table A mnemonic most recently read from each file ID, if isc3 = 1 for that stream.
integer, dimension(:), allocatable isc3
Section 3 switch for each file ID:
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:
recursive subroutine openbt(lundx, mtyp)
Specify a DX BUFR table of last resort, in case subroutine cktaba() is unable to locate a DX BUFR 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...
recursive subroutine getlens(mbay, ll, len0, len1, len2, len3, len4, len5)
Read the section lengths of a BUFR message, up to a specified point in the message.
subroutine rdmsgw(lunit, mesg, iret)
Read the next BUFR message from logical unit lunit as an array of integer words.
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.
recursive subroutine datebf(lunit, mear, mmon, mday, mour, idate)
Get the Section 1 date-time from the first data message of a BUFR file, bypassing any messages at the...
recursive integer function iupvs01(lunit, s01mnem)
Read a specified value from within Section 0 or 1 of a BUFR message.
recursive subroutine pkbs1(ival, mbay, s1mnem)
Write a specified value into a specified location within Section 1 of a BUFR message,...
recursive integer function iupbs3(mbay, s3mnem)
Read a specified value from within Section 3 of a BUFR message.
recursive subroutine minimg(lunit, mini)
Write a minutes value into Section 1 of the BUFR message that was most recently opened for writing vi...
recursive subroutine upds3(mbay, lcds3, cds3, nds3)
Read the sequence of data descriptors contained within Section 3 of a BUFR message.
recursive subroutine mesgbf(lunit, mesgtyp)
Read through a BUFR file (starting from the beginning of the file) and return the message type (from ...
recursive subroutine gets1loc(s1mnem, iben, isbyt, iwid, iret)
Get the location of a specified value within Section 1 of a BUFR message.
recursive subroutine datelen(len)
Specify the format of Section 1 date-time values that will be output by future calls to any of the NC...
recursive subroutine dumpbf(lunit, jdate, jdump)
Read the Section 1 date-time from the first two "dummy" messages of an NCEP dump file.
recursive subroutine mesgbc(lunin, mesgtyp, icomp)
Return the message type (from Section 1) and message compression indicator (from Section 3) of a BUFR...
recursive subroutine pkvs01(s01mnem, ival)
Specify a value to be written into a specified location within Section 0 or Section 1 of all BUFR mes...
subroutine reads3(lun)
Read the Section 3 descriptors from the BUFR message in mbay(1,lun), then use the BUFR master tables ...
recursive integer function i4dy(idate)
Convert a date-time with a 2-digit year (YYMMDDHH) to a date-time with a 4-digit year (YYYYMMDDHH) us...
recursive integer function igetdate(mbay, iyr, imo, idy, ihr)
Get the date-time from within Section 1 of a BUFR message.
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.