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
252 character*(*),
intent(in) :: s01mnem
254 integer,
intent(in) :: mbay(*)
255 integer ival,
iupb,
i4dy, len0, 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)
281 if(s01mnem==
'LEN0')
then
288 iben =
iupb(mbay,8,8)
289 if(s01mnem==
'BEN')
then
296 call gets1loc(s01mnem,iben,isbyt,iwid,iretgs)
298 iret =
iupb(mbay,len0+isbyt,iwid)
299 if(s01mnem==
'CENT')
then
303 if(.not.ok4cent(iret)) iret = -1
305 else if( (s01mnem==
'YEAR') .and. (iben<4) )
then
309 iyoc =
iupb(mbay,21,8)
310 icen =
iupb(mbay,26,8)
314 if(ok4cent(icen))
then
317 iret = (icen-1)*100 + iyoc
320 iret =
i4dy(mod(iyoc,100)*1000000)/10**6
348 recursive integer function iupbs3(mbay,s3mnem)
result(iret)
350 use modv_vars,
only: im8b
354 character*(*),
intent(in) :: s3mnem
356 integer,
intent(in) :: mbay(*)
357 integer len0, len1, len2, len3, l4, l5, ipt, ival, imask,
iupb
364 iret =
iupbs3(mbay,s3mnem)
372 call getlens(mbay,3,len0,len1,len2,len3,l4,l5)
373 ipt = len0 + len1 + len2
377 if(s3mnem==
'NSUB')
then
378 iret =
iupb(mbay,ipt+5,16)
379 else if( (s3mnem==
'IOBS') .or. (s3mnem==
'ICMP') )
then
380 ival =
iupb(mbay,ipt+7,8)
381 if(s3mnem==
'IOBS')
then
386 iret = min(1,iand(ival,imask))
442 recursive integer function iupvs01(lunit,s01mnem)
result(iret)
444 use modv_vars,
only: im8b
450 character*(*),
intent(in) :: s01mnem
452 integer,
intent(in) :: lunit
453 integer my_lunit, lun, ilst, imst,
iupbs01
460 call x84(lunit,my_lunit,1)
471 call status(lunit,lun,ilst,imst)
472 if(ilst==0)
call bort(
'BUFRLIB: IUPVS01 - INPUT BUFR FILE IS CLOSED, IT MUST BE OPEN FOR INPUT')
473 if(ilst>0)
call bort(
'BUFRLIB: IUPVS01 - INPUT BUFR FILE IS OPEN FOR OUTPUT, IT MUST BE OPEN FOR INPUT')
474 if(imst==0)
call bort(
'BUFRLIB: IUPVS01 - A MESSAGE MUST BE OPEN IN INPUT BUFR FILE, NONE ARE')
520 recursive subroutine pkbs1(ival,mbay,s1mnem)
522 use modv_vars,
only: im8b
526 character*(*),
intent(in) :: s1mnem
528 integer,
intent(in) :: ival
529 integer,
intent(inout) :: mbay(*)
530 integer my_ival, iben, isbyt, iwid, iret,
iupbs01, ibit
532 character*128 bort_str
539 call x84(ival,my_ival,1)
540 call pkbs1(my_ival,mbay,s1mnem)
550 call gets1loc(s1mnem,iben,isbyt,iwid,iret)
551 if ( (iret==0) .and. &
552 ( (s1mnem==
'USN') .or. (s1mnem==
'BMT') .or. (s1mnem==
'OGCE') .or. (s1mnem==
'GSES') .or. (s1mnem==
'MTYP') .or. &
553 (s1mnem==
'MSBTI') .or. (s1mnem==
'MSBT') .or. (s1mnem==
'MTV') .or. (s1mnem==
'MTVL') .or. (s1mnem==
'YCEN') .or.&
554 (s1mnem==
'CENT') .or. (s1mnem==
'YEAR') .or. (s1mnem==
'MNTH') .or. (s1mnem==
'DAYS') .or. (s1mnem==
'HOUR') .or.&
555 (s1mnem==
'MINU') .or. (s1mnem==
'SECO') ) )
then
557 ibit = (
iupbs01(mbay,
'LEN0')+isbyt-1)*8
558 call pkb(ival,iwid,mbay,ibit)
560 write(bort_str,
'("BUFRLIB: PKBS1 - CANNOT OVERWRITE LOCATION CORRESPONDING TO MNEMONIC (",A,") WITHIN BUFR EDITION '// &
561 '(",I1,")")') s1mnem, iben
618 recursive subroutine pkvs01(s01mnem,ival)
620 use modv_vars,
only: im8b, mxs01v
626 character*(*),
intent(in) :: s01mnem
628 integer,
intent(in) :: ival
631 character*128 bort_str
638 call x84(ival,my_ival,1)
639 call pkvs01(s01mnem,my_ival)
648 if ( ( .not.
allocated(
cmnem) ) .or. ( .not.
allocated(
ivmnem) ) )
then
657 if(s01mnem==
cmnem(i))
then
666 if(
ns01v>=mxs01v)
then
667 write(bort_str,
'("BUFRLIB: PKVS01 - CANNOT OVERWRITE MORE THAN ",I2," DIFFERENT LOCATIONS WITHIN SECTION 0 '// &
668 'OR SECTION 1")') mxs01v
689 use modv_vars,
only: maxnc, mxcnem
698 integer,
intent(in) :: lun
699 integer iprt, irepct, ireadmt, igettdi, itmp, ncds3, ii, jj, ifxy, igetntbi, n, idn
701 character*6 numb, adn30
713 if ( ireadmt( lun ) == 1 )
then
736 if (
ncnem > 0 )
then
738 do while ( (.not.incach) .and. (ii<=
ncnem) )
739 if ( ncds3 ==
ndc(ii) )
then
742 do while ( (incach) .and. (jj<=ncds3) )
753 if ( iprt >= 2 )
then
754 call errwrt(
'+++++++++++++++++++++++++++++++++++++++++++++++++')
755 errstr =
'BUFRLIB: READS3 - RE-USED CACHE LIST FOR ' //
cnem(ii)
757 call errwrt(
'+++++++++++++++++++++++++++++++++++++++++++++++++')
770 n = igetntbi( lun,
'A' )
774 write (
tamnem(lun),
'(A5,I3.3)')
'MSTTB', n
775 cseq =
'TABLE A MNEMONIC ' //
tamnem(lun)
780 if (
ncnem > mxcnem )
call bort(
'BUFRLIB: READS3 - MXCNEM OVERFLOW')
786 if ( iprt >= 2 )
then
787 call errwrt(
'+++++++++++++++++++++++++++++++++++++++++++++++++')
788 errstr =
'BUFRLIB: READS3 - STORED CACHE LIST FOR ' //
cnem(
ncnem)
790 call errwrt(
'+++++++++++++++++++++++++++++++++++++++++++++++++')
797 numb = adn30( idn, 6 )
828 recursive subroutine upds3(mbay,lcds3,cds3,nds3)
830 use modv_vars,
only: im8b
834 integer,
intent(in) :: mbay(*), lcds3
835 integer,
intent(out) :: nds3
836 integer my_lcds3, len0, len1, len2, len3, l4, l5, ipt, jj,
iupb
838 character*6,
intent(out) :: cds3(*)
846 call x84(lcds3,my_lcds3,1)
847 call upds3(mbay,my_lcds3,cds3,nds3)
848 call x48(nds3,nds3,1)
856 call getlens(mbay,3,len0,len1,len2,len3,l4,l5)
857 ipt = len0 + len1 + len2
864 if(nds3>lcds3)
call bort(
'BUFRLIB: UPDS3 - OVERFLOW OF OUTPUT DESCRIPTOR ARRAY; TRY A LARGER DIMENSION FOR THIS ARRAY')
865 cds3(nds3) =
adn30(
iupb(mbay,ipt+jj,16),6)
890 use modv_vars,
only: im8b, lendat
894 integer,
intent(in) :: len
897 character*128 bort_str
904 call x84(len,my_len,1)
911 if(len/=8 .and. len/=10)
then
912 write(bort_str,
'("BUFRLIB: DATELEN - INPUT ARGUMENT IS",I4," - IT MUST BE EITHER 8 OR 10")') len
936 recursive subroutine datebf(lunit,mear,mmon,mday,mour,idate)
938 use modv_vars,
only: im8b
944 integer,
intent(in) :: lunit
945 integer,
intent(out) :: mear, mmon, mday, mour, idate
957 call x84(lunit,my_lunit,1)
958 call datebf(my_lunit,mear,mmon,mday,mour,idate)
959 call x48(mear,mear,1)
960 call x48(mmon,mmon,1)
961 call x48(mday,mday,1)
962 call x48(mour,mour,1)
963 call x48(idate,idate,1)
971 if ( .not.
allocated(
mgwa) )
call openbf(lunit,
'FIRST',lunit)
975 call status(lunit,lun,jl,jm)
976 if(jl/=0)
call bort (
'BUFRLIB: DATEBF - INPUT BUFR FILE IS OPEN, IT MUST BE CLOSED')
980 call openbf(lunit,
'INX',lunit)
986 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
987 errstr =
'BUFRLIB: DATEBF - SECTION 1 DATE COULD NOT BE LOCATED - RETURN WITH IDATE = -1'
989 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
1021 recursive integer function igetdate(mbay,iyr,imo,idy,ihr)
result(iret)
1023 use modv_vars,
only: im8b, lendat
1027 integer,
intent(in) :: mbay(*)
1028 integer,
intent(out) :: iyr, imo, idy, ihr
1036 iret=
igetdate(mbay,iyr,imo,idy,ihr)
1050 if(lendat/=10) iyr = mod(iyr,100)
1051 iret = (iyr*1000000) + (imo*10000) + (idy*100) + ihr
1069 recursive integer function i4dy(idate)
result(iret)
1071 use modv_vars,
only: im8b
1075 integer,
intent(in) :: idate
1076 integer my_idate, iy
1083 call x84(idate,my_idate,1)
1090 if(idate<10**8)
then
1093 iret = idate + 19*100000000
1095 iret = idate + 20*100000000
1135 recursive subroutine dumpbf(lunit,jdate,jdump)
1137 use modv_vars,
only: im8b
1143 integer,
intent(in) :: lunit
1144 integer,
intent(out) :: jdate(*), jdump(*)
1145 integer my_lunit, lun, jl, jm, iprt, ier, ii,
igetdate,
idxmsg,
iupbs3,
iupbs01
1147 character*128 errstr
1156 call x84(lunit,my_lunit,1)
1157 call dumpbf(my_lunit,jdate,jdump)
1158 call x48(jdate(1),jdate(1),5)
1159 call x48(jdump(1),jdump(1),5)
1172 call status(lunit,lun,jl,jm)
1173 if(jl/=0)
call bort(
'BUFRLIB: DUMPBF - INPUT BUFR FILE IS OPEN, IT MUST BE CLOSED')
1174 call openbf(lunit,
'INX',lunit)
1183 ii =
igetdate(
mgwa,jdate(1),jdate(2),jdate(3),jdate(4))
1190 ii =
igetdate(
mgwa,jdump(1),jdump(2),jdump(3),jdump(4))
1197 if (iprt>=1 .and. (jdate(1)==-1.or.jdump(1)==-1))
then
1198 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
1199 if(jdate(1)==-1)
then
1200 errstr =
'BUFRLIB: DUMPBF - FIRST EMPTY BUFR MESSAGE SECTION 1 DATE COULD NOT BE LOCATED - RETURN WITH JDATE = 5*-1'
1203 if(jdump(1)==-1)
then
1204 errstr =
'BUFRLIB: DUMPBF - SECOND EMPTY BUFR MESSAGE SECTION 1 DATE COULD NOT BE LOCATED - RETURN WITH JDUMP = 5*-1'
1207 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
1225 use modv_vars,
only: im8b
1231 integer,
intent(in) :: lunit, mini
1232 integer my_lunit, my_mini, lun, il, im
1239 call x84(lunit,my_lunit,1)
1240 call x84(mini,my_mini,1)
1241 call minimg(my_lunit,my_mini)
1247 call status(lunit,lun,il,im)
1248 if(il==0)
call bort(
'BUFRLIB: MINIMG - OUTPUT BUFR FILE IS CLOSED, IT MUST BE OPEN FOR OUTPUT')
1249 if(il<0)
call bort(
'BUFRLIB: MINIMG - OUTPUT BUFR FILE IS OPEN FOR INPUT, IT MUST BE OPEN FOR OUTPUT')
1250 if(im==0)
call bort(
'BUFRLIB: MINIMG - A MESSAGE MUST BE OPEN IN OUTPUT BUFR FILE, NONE ARE')
1280 integer,
intent(in) :: lun
1281 integer,
intent(out) :: jdate, iret
1282 integer,
parameter :: ncpfx = 3
1283 integer ibct, ipd1, ipd2, ipd3, ipd4, iprt, mtyp, msbt, mty1, msb1, isub, ksub, len0, len1, len2, len3, l4, l5, lundx, ii, &
1284 itab, inod, iad3, iad4, iyr, imo, idy, ihr, iupb, iupbs01, iupbs3, i4dy, igetdate
1286 character*128 bort_str, errstr
1287 character*8,
intent(out) :: subset
1288 character*2,
parameter :: cpfx(ncpfx) = (/
'NC',
'FR',
'FN'/)
1293 common /padesc/ ibct, ipd1, ipd2, ipd3, ipd4
1302 mtyp = iupbs01(
mbay(1,lun),
'MTYP')
1303 msbt = iupbs01(
mbay(1,lun),
'MSBT')
1304 jdate = igetdate(
mbay(1,lun),iyr,imo,idy,ihr)
1310 if(
isc3(lun)==0)
then
1318 call getlens(
mbay(1,lun),3,len0,len1,len2,len3,l4,l5)
1319 iad3 = len0+len1+len2
1320 ksub = iupb(
mbay(1,lun),iad3+8,16)
1321 isub = iupb(
mbay(1,lun),iad3+10,16)
1329 outer:
do while (.true.)
1331 if(
isc3(lun)/=0)
then
1334 call nemtbax(lun,subset,mty1,msb1,inod)
1336 mbyt(lun) = 8*(iad4+4)
1342 inner:
do while (.true.)
1344 call numtab(lun,isub,subset,tab,itab)
1345 call nemtbax(lun,subset,mty1,msb1,inod)
1349 mbyt(lun) = (iad4+4)
1354 call numtab(lun,ksub,subset,tab,itab)
1355 call nemtbax(lun,subset,mty1,msb1,inod)
1358 mbyt(lun) = 8*(iad4+4)
1367 write(subset,
'(A2,2I3.3)') cpfx(ii),mtyp,msbt
1368 call nemtbax(lun,subset,mty1,msb1,inod)
1371 mbyt(lun) = (iad4+4)
1374 mbyt(lun) = 8*(iad4+4)
1387 call errwrt(
'++++++++++++++BUFR ARCHIVE LIBRARY+++++++++++++++++')
1388 errstr =
'BUFRLIB: CKTABA - LAST RESORT, CHECK FOR EXTERNAL BUFR TABLE VIA CALL TO IN-LINE OPENBT'
1390 call errwrt(
'++++++++++++++BUFR ARCHIVE LIBRARY+++++++++++++++++')
1404 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
1405 errstr =
'BUFRLIB: CKTABA - UNRECOGNIZED TABLE A MESSAGE TYPE (' // subset //
') - RETURN WITH IRET = -1'
1407 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
1419 if(
isc3(lun)==0)
then
1421 write(bort_str,
'("BUFRLIB: CKTABA - MESSAGE TYPE MISMATCH (SUBSET=",A8,", MTYP=",I3,", MTY1=",I3)') subset,mtyp,mty1
1424 if( msbt/=msb1 .and. ( verify(subset(3:8),
'1234567890') == 0 ) )
then
1425 write(bort_str,
'("BUFRLIB: CKTABA - MESSAGE SUBTYPE MISMATCH (SUBSET=",A8,", MSBT=",I3,", MSB1=",I3)') subset,msbt,msb1
1429 if(iupbs3(
mbay(1,lun),
'ICMP')>0)
msgunp(lun) = 2
1433 idate(lun) = i4dy(jdate)
1435 msub(lun) = iupbs3(
mbay(1,lun),
'NSUB')
1437 if(iret/=11)
nmsg(lun) =
nmsg(lun)+1
1481 recursive subroutine mesgbc(lunin,mesgtyp,icomp)
1483 use modv_vars,
only: im8b
1490 integer,
intent(in) :: lunin
1491 integer,
intent(out) :: mesgtyp, icomp
1492 integer my_lunin, lunit, irec, ier, i, lun, il, im,
iupbs01,
iupbs3,
idxmsg
1498 call x84(lunin,my_lunin,1)
1499 call mesgbc(my_lunin,mesgtyp,icomp)
1500 call x48(mesgtyp,mesgtyp,1)
1501 call x48(icomp,icomp,1)
1510 if(lunit==lunin)
then
1513 call openbf(lunit,
'INX',lunit)
1521 if(mesgtyp>=0) mesgtyp = -mesgtyp
1534 call status(lunit,lun,il,im)
1572 use modv_vars,
only: im8b
1578 integer,
intent(in) :: lunit
1579 integer,
intent(out) :: mesgtyp
1586 call x84(lunit,my_lunit,1)
1587 call mesgbf(my_lunit,mesgtyp)
1588 call x48(mesgtyp,mesgtyp,1)
1595 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.