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)
886 use modv_vars,
only: im8b, lendat
890 integer,
intent(in) :: len
893 character*128 bort_str
900 call x84(len,my_len,1)
907 if(len/=8 .and. len/=10)
then
908 write(bort_str,
'("BUFRLIB: DATELEN - INPUT ARGUMENT IS",I4," - IT MUST BE EITHER 8 OR 10")') len
932 recursive subroutine datebf(lunit,mear,mmon,mday,mour,idate)
934 use modv_vars,
only: im8b, iprt
940 integer,
intent(in) :: lunit
941 integer,
intent(out) :: mear, mmon, mday, mour, idate
951 call x84(lunit,my_lunit,1)
952 call datebf(my_lunit,mear,mmon,mday,mour,idate)
953 call x48(mear,mear,1)
954 call x48(mmon,mmon,1)
955 call x48(mday,mday,1)
956 call x48(mour,mour,1)
957 call x48(idate,idate,1)
965 if ( .not.
allocated(
mgwa) )
call openbf(lunit,
'FIRST',lunit)
969 call status(lunit,lun,jl,jm)
970 if(jl/=0)
call bort (
'BUFRLIB: DATEBF - INPUT BUFR FILE IS OPEN, IT MUST BE CLOSED')
974 call openbf(lunit,
'INX',lunit)
980 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
981 errstr =
'BUFRLIB: DATEBF - SECTION 1 DATE COULD NOT BE LOCATED - RETURN WITH IDATE = -1'
983 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
1015 recursive integer function igetdate(mbay,iyr,imo,idy,ihr)
result(iret)
1017 use modv_vars,
only: im8b, lendat
1021 integer,
intent(in) :: mbay(*)
1022 integer,
intent(out) :: iyr, imo, idy, ihr
1030 iret=
igetdate(mbay,iyr,imo,idy,ihr)
1044 if(lendat/=10) iyr = mod(iyr,100)
1045 iret = (iyr*1000000) + (imo*10000) + (idy*100) + ihr
1063 recursive integer function i4dy(idate)
result(iret)
1065 use modv_vars,
only: im8b
1069 integer,
intent(in) :: idate
1070 integer my_idate, iy
1077 call x84(idate,my_idate,1)
1084 if(idate<10**8)
then
1087 iret = idate + 19*100000000
1089 iret = idate + 20*100000000
1129 recursive subroutine dumpbf(lunit,jdate,jdump)
1131 use modv_vars,
only: im8b, iprt
1137 integer,
intent(in) :: lunit
1138 integer,
intent(out) :: jdate(*), jdump(*)
1141 character*128 errstr
1148 call x84(lunit,my_lunit,1)
1149 call dumpbf(my_lunit,jdate,jdump)
1150 call x48(jdate(1),jdate(1),5)
1151 call x48(jdump(1),jdump(1),5)
1164 call status(lunit,lun,jl,jm)
1165 if(jl/=0)
call bort(
'BUFRLIB: DUMPBF - INPUT BUFR FILE IS OPEN, IT MUST BE CLOSED')
1166 call openbf(lunit,
'INX',lunit)
1175 ii =
igetdate(
mgwa,jdate(1),jdate(2),jdate(3),jdate(4))
1182 ii =
igetdate(
mgwa,jdump(1),jdump(2),jdump(3),jdump(4))
1189 if (iprt>=1 .and. (jdate(1)==-1.or.jdump(1)==-1))
then
1190 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
1191 if(jdate(1)==-1)
then
1192 errstr =
'BUFRLIB: DUMPBF - FIRST EMPTY BUFR MESSAGE SECTION 1 DATE COULD NOT BE LOCATED - RETURN WITH JDATE = 5*-1'
1195 if(jdump(1)==-1)
then
1196 errstr =
'BUFRLIB: DUMPBF - SECOND EMPTY BUFR MESSAGE SECTION 1 DATE COULD NOT BE LOCATED - RETURN WITH JDUMP = 5*-1'
1199 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
1217 use modv_vars,
only: im8b
1223 integer,
intent(in) :: lunit, mini
1224 integer my_lunit, my_mini, lun, il, im
1231 call x84(lunit,my_lunit,1)
1232 call x84(mini,my_mini,1)
1233 call minimg(my_lunit,my_mini)
1239 call status(lunit,lun,il,im)
1240 if(il==0)
call bort(
'BUFRLIB: MINIMG - OUTPUT BUFR FILE IS CLOSED, IT MUST BE OPEN FOR OUTPUT')
1241 if(il<0)
call bort(
'BUFRLIB: MINIMG - OUTPUT BUFR FILE IS OPEN FOR INPUT, IT MUST BE OPEN FOR OUTPUT')
1242 if(im==0)
call bort(
'BUFRLIB: MINIMG - A MESSAGE MUST BE OPEN IN OUTPUT BUFR FILE, NONE ARE')
1265 use modv_vars,
only: iprt, fxy_sbyct
1274 integer,
intent(in) :: lun
1275 integer,
intent(out) :: jdate, iret
1276 integer,
parameter :: ncpfx = 3
1277 integer mtyp, msbt, mty1, msb1, isub, ksub, len0, len1, len2, len3, l4, l5, lundx, ii, &
1278 itab, inod, iad3, iad4, iyr, imo, idy, ihr, iupb, ifxy, iupbs01, iupbs3, i4dy, igetdate
1280 character*128 bort_str, errstr
1281 character*8,
intent(out) :: subset
1282 character*2,
parameter :: cpfx(ncpfx) = (/
'NC',
'FR',
'FN'/)
1293 mtyp = iupbs01(
mbay(1,lun),
'MTYP')
1294 msbt = iupbs01(
mbay(1,lun),
'MSBT')
1295 jdate = igetdate(
mbay(1,lun),iyr,imo,idy,ihr)
1301 if(
isc3(lun)==0)
then
1309 call getlens(
mbay(1,lun),3,len0,len1,len2,len3,l4,l5)
1310 iad3 = len0+len1+len2
1311 ksub = iupb(
mbay(1,lun),iad3+8,16)
1312 isub = iupb(
mbay(1,lun),iad3+10,16)
1320 outer:
do while (.true.)
1322 if(
isc3(lun)/=0)
then
1325 call nemtbax(lun,subset,mty1,msb1,inod)
1327 mbyt(lun) = 8*(iad4+4)
1333 inner:
do while (.true.)
1335 call numtab(lun,isub,subset,tab,itab)
1336 call nemtbax(lun,subset,mty1,msb1,inod)
1340 mbyt(lun) = (iad4+4)
1345 call numtab(lun,ksub,subset,tab,itab)
1346 call nemtbax(lun,subset,mty1,msb1,inod)
1349 mbyt(lun) = 8*(iad4+4)
1358 write(subset,
'(A2,2I3.3)') cpfx(ii),mtyp,msbt
1359 call nemtbax(lun,subset,mty1,msb1,inod)
1361 if(ksub==ifxy(fxy_sbyct))
then
1362 mbyt(lun) = (iad4+4)
1365 mbyt(lun) = 8*(iad4+4)
1378 call errwrt(
'++++++++++++++BUFR ARCHIVE LIBRARY+++++++++++++++++')
1379 errstr =
'BUFRLIB: CKTABA - LAST RESORT, CHECK FOR EXTERNAL BUFR TABLE VIA CALL TO IN-LINE OPENBT'
1381 call errwrt(
'++++++++++++++BUFR ARCHIVE LIBRARY+++++++++++++++++')
1395 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
1396 errstr =
'BUFRLIB: CKTABA - UNRECOGNIZED TABLE A MESSAGE TYPE (' // subset //
') - RETURN WITH IRET = -1'
1398 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
1410 if(
isc3(lun)==0)
then
1412 write(bort_str,
'("BUFRLIB: CKTABA - MESSAGE TYPE MISMATCH (SUBSET=",A8,", MTYP=",I3,", MTY1=",I3)') subset,mtyp,mty1
1415 if( msbt/=msb1 .and. ( verify(subset(3:8),
'1234567890') == 0 ) )
then
1416 write(bort_str,
'("BUFRLIB: CKTABA - MESSAGE SUBTYPE MISMATCH (SUBSET=",A8,", MSBT=",I3,", MSB1=",I3)') subset,msbt,msb1
1420 if(iupbs3(
mbay(1,lun),
'ICMP')>0)
msgunp(lun) = 2
1424 idate(lun) = i4dy(jdate)
1426 msub(lun) = iupbs3(
mbay(1,lun),
'NSUB')
1428 if(iret/=11)
nmsg(lun) =
nmsg(lun)+1
1472 recursive subroutine mesgbc(lunin,mesgtyp,icomp)
1474 use modv_vars,
only: im8b
1481 integer,
intent(in) :: lunin
1482 integer,
intent(out) :: mesgtyp, icomp
1483 integer my_lunin, lunit, irec, ier, i, lun, il, im,
iupbs01,
iupbs3,
idxmsg
1489 call x84(lunin,my_lunin,1)
1490 call mesgbc(my_lunin,mesgtyp,icomp)
1491 call x48(mesgtyp,mesgtyp,1)
1492 call x48(icomp,icomp,1)
1501 if(lunit==lunin)
then
1504 call openbf(lunit,
'INX',lunit)
1512 if(mesgtyp>=0) mesgtyp = -mesgtyp
1525 call status(lunit,lun,il,im)
1563 use modv_vars,
only: im8b
1569 integer,
intent(in) :: lunit
1570 integer,
intent(out) :: mesgtyp
1577 call x84(lunit,my_lunit,1)
1578 call mesgbf(my_lunit,mesgtyp)
1579 call x48(mesgtyp,mesgtyp,1)
1586 call openbf(lunit,
'INX',lunit)
recursive subroutine bort(str)
Log an error message, then either return to or 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.