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
63 call x84(iben,my_iben,1)
64 call gets1loc(s1mnem,my_iben,isbyt,iwid,iret)
65 call x48(isbyt,isbyt,1)
75 if(s1mnem==
'LEN1')
then
78 else if(s1mnem==
'BMT')
then
80 else if(s1mnem==
'OGCE')
then
88 else if(s1mnem==
'GSES')
then
97 else if(s1mnem==
'USN')
then
103 else if(s1mnem==
'ISC2')
then
110 else if(s1mnem==
'MTYP')
then
116 else if(s1mnem==
'MSBTI')
then
122 else if(s1mnem==
'MSBT')
then
128 else if(s1mnem==
'MTV')
then
134 else if(s1mnem==
'MTVL')
then
140 else if(s1mnem==
'YEAR')
then
147 else if(s1mnem==
'YCEN')
then
153 else if(s1mnem==
'CENT')
then
159 else if(s1mnem==
'MNTH')
then
165 else if(s1mnem==
'DAYS')
then
171 else if(s1mnem==
'HOUR')
then
177 else if(s1mnem==
'MINU')
then
183 else if(s1mnem==
'SECO')
then
244 recursive integer function iupbs01(mbay,s01mnem)
result(iret)
246 use modv_vars,
only: im8b, nby0
250 character*(*),
intent(in) :: s01mnem
252 integer,
intent(in) :: mbay(*)
253 integer ival,
iupb,
i4dy, iben, isbyt, iwid, iretgs, iyoc, icen
258 ok4cent(ival) = ((ival>=19).and.(ival<=21))
271 if(s01mnem==
'LENM')
then
272 iret =
iupb(mbay,5,24)
276 if(s01mnem==
'LEN0')
then
283 iben =
iupb(mbay,8,8)
284 if(s01mnem==
'BEN')
then
291 call gets1loc(s01mnem,iben,isbyt,iwid,iretgs)
293 iret =
iupb(mbay,nby0+isbyt,iwid)
294 if(s01mnem==
'CENT')
then
298 if(.not.ok4cent(iret)) iret = -1
300 else if( (s01mnem==
'YEAR') .and. (iben<4) )
then
304 iyoc =
iupb(mbay,21,8)
305 icen =
iupb(mbay,26,8)
309 if(ok4cent(icen))
then
312 iret = (icen-1)*100 + iyoc
315 iret =
i4dy(mod(iyoc,100)*1000000)/10**6
343 recursive integer function iupbs3(mbay,s3mnem)
result(iret)
345 use modv_vars,
only: im8b
349 character*(*),
intent(in) :: s3mnem
351 integer,
intent(in) :: mbay(*)
352 integer len0, len1, len2, len3, l4, l5, ipt, ival, imask,
iupb
358 iret =
iupbs3(mbay,s3mnem)
365 call getlens(mbay,3,len0,len1,len2,len3,l4,l5)
366 ipt = len0 + len1 + len2
370 if(s3mnem==
'NSUB')
then
371 iret =
iupb(mbay,ipt+5,16)
372 else if( (s3mnem==
'IOBS') .or. (s3mnem==
'ICMP') )
then
373 ival =
iupb(mbay,ipt+7,8)
374 if(s3mnem==
'IOBS')
then
379 iret = min(1,iand(ival,imask))
435 recursive integer function iupvs01(lunit,s01mnem)
result(iret)
439 use modv_vars,
only: im8b
445 character*(*),
intent(in) :: s01mnem
446 character*12 cs01mnem
448 integer,
intent(in) :: lunit
455 call x84(lunit,my_lunit,1)
464 call strsuc(s01mnem,cs01mnem,lcs)
474 call status(lunit,lun,ilst,imst)
475 if(ilst==0)
call bort(
'BUFRLIB: IUPVS01 - INPUT BUFR FILE IS CLOSED, IT MUST BE OPEN FOR INPUT')
476 if(ilst>0)
call bort(
'BUFRLIB: IUPVS01 - INPUT BUFR FILE IS OPEN FOR OUTPUT, IT MUST BE OPEN FOR INPUT')
477 if(imst==0)
call bort(
'BUFRLIB: IUPVS01 - A MESSAGE MUST BE OPEN IN INPUT BUFR FILE, NONE ARE')
523 recursive subroutine pkbs1(ival,mbay,s1mnem)
527 use modv_vars,
only: im8b
531 character*(*),
intent(in) :: s1mnem
533 integer,
intent(in) :: ival
534 integer,
intent(inout) :: mbay(*)
537 character*128 bort_str
544 call x84(ival,my_ival,1)
545 call pkbs1(my_ival,mbay,s1mnem)
553 call strsuc(s1mnem,cs1mnem,lcs)
563 call gets1loc(s1mnem,iben,isbyt,iwid,iret)
564 if ( (iret==0) .and. &
565 ( (s1mnem==
'USN') .or. (s1mnem==
'BMT') .or. (s1mnem==
'OGCE') .or. (s1mnem==
'GSES') .or. (s1mnem==
'MTYP') .or. &
566 (s1mnem==
'MSBTI') .or. (s1mnem==
'MSBT') .or. (s1mnem==
'MTV') .or. (s1mnem==
'MTVL') .or. (s1mnem==
'YCEN') .or.&
567 (s1mnem==
'CENT') .or. (s1mnem==
'YEAR') .or. (s1mnem==
'MNTH') .or. (s1mnem==
'DAYS') .or. (s1mnem==
'HOUR') .or.&
568 (s1mnem==
'MINU') .or. (s1mnem==
'SECO') ) )
then
570 ibit = (
iupbs01(mbay,
'LEN0')+isbyt-1)*8
571 call pkb(ival,iwid,mbay,ibit)
573 write(bort_str,
'("BUFRLIB: PKBS1 - CANNOT OVERWRITE LOCATION CORRESPONDING TO MNEMONIC (",A,") WITHIN BUFR EDITION '// &
574 '(",I1,")")') s1mnem, iben
631 recursive subroutine pkvs01(s01mnem,ival)
635 use modv_vars,
only: im8b, mxs01v
641 character*(*),
intent(in) :: s01mnem
643 integer,
intent(in) :: ival
646 character*128 bort_str
647 character*12 cs01mnem
653 call x84(ival,my_ival,1)
654 call pkvs01(s01mnem,my_ival)
662 call strsuc(s01mnem,cs01mnem,lcs)
671 if ( ( .not.
allocated(
cmnem) ) .or. ( .not.
allocated(
ivmnem) ) )
then
680 if(s01mnem==
cmnem(i))
then
689 if(
ns01v>=mxs01v)
then
690 write(bort_str,
'("BUFRLIB: PKVS01 - CANNOT OVERWRITE MORE THAN ",I2," DIFFERENT LOCATIONS WITHIN SECTION 0 '// &
691 'OR SECTION 1")') mxs01v
712 use modv_vars,
only: maxnc, mxcnem, iprt
721 integer,
intent(in) :: lun
722 integer irepct, ireadmt, igettdi, itmp, ncds3, ii, jj, ifxy, igetntbi, n, idn
724 character*6 numb, adn30
734 if ( ireadmt( lun ) == 1 )
then
757 if (
ncnem > 0 )
then
759 do while ( (.not.incach) .and. (ii<=
ncnem) )
760 if ( ncds3 ==
ndc(ii) )
then
763 do while ( (incach) .and. (jj<=ncds3) )
774 if ( iprt >= 2 )
then
775 call errwrt(
'+++++++++++++++++++++++++++++++++++++++++++++++++')
776 errstr =
'BUFRLIB: READS3 - RE-USED CACHE LIST FOR ' //
cnem(ii)
778 call errwrt(
'+++++++++++++++++++++++++++++++++++++++++++++++++')
791 n = igetntbi( lun,
'A' )
795 write (
tamnem(lun),
'(A5,I3.3)')
'MSTTB', n
796 cseq =
'TABLE A MNEMONIC ' //
tamnem(lun)
801 if (
ncnem > mxcnem )
call bort(
'BUFRLIB: READS3 - MXCNEM OVERFLOW')
807 if ( iprt >= 2 )
then
808 call errwrt(
'+++++++++++++++++++++++++++++++++++++++++++++++++')
809 errstr =
'BUFRLIB: READS3 - STORED CACHE LIST FOR ' //
cnem(
ncnem)
811 call errwrt(
'+++++++++++++++++++++++++++++++++++++++++++++++++')
818 numb = adn30( idn, 6 )
849 recursive subroutine upds3(mbay,lcds3,cds3,nds3)
853 use modv_vars,
only: im8b
857 integer,
intent(in) :: mbay(*), lcds3
858 integer,
intent(out) :: nds3
859 integer my_lcds3, len0, len1, len2, len3, l4, l5, ipt, ii, jj,
iupb,
bort_target_set
861 character*6,
intent(out) :: cds3(*)
863 character,
allocatable :: ccds3(:,:)
869 call x84(lcds3,my_lcds3,1)
870 call upds3(mbay,my_lcds3,cds3,nds3)
871 call x48(nds3,nds3,1)
879 allocate(ccds3(6,lcds3))
883 cds3(ii)(jj:jj) = ccds3(jj,ii)
893 call getlens(mbay,3,len0,len1,len2,len3,l4,l5)
894 ipt = len0 + len1 + len2
901 if(nds3>lcds3)
call bort(
'BUFRLIB: UPDS3 - OVERFLOW OF OUTPUT DESCRIPTOR ARRAY; TRY A LARGER DIMENSION FOR THIS ARRAY')
902 cds3(nds3) =
adn30(
iupb(mbay,ipt+jj,16),6)
928 use modv_vars,
only: im8b, lendat
932 integer,
intent(in) :: len
935 character*128 bort_str
941 call x84(len,my_len,1)
955 if(len/=8 .and. len/=10)
then
956 write(bort_str,
'("BUFRLIB: DATELEN - INPUT ARGUMENT IS",I4," - IT MUST BE EITHER 8 OR 10")') len
980 recursive subroutine datebf(lunit,mear,mmon,mday,mour,idate)
984 use modv_vars,
only: im8b, iprt
990 integer,
intent(in) :: lunit
991 integer,
intent(out) :: mear, mmon, mday, mour, idate
1000 call x84(lunit,my_lunit,1)
1001 call datebf(my_lunit,mear,mmon,mday,mour,idate)
1002 call x48(mear,mear,1)
1003 call x48(mmon,mmon,1)
1004 call x48(mday,mday,1)
1005 call x48(mour,mour,1)
1006 call x48(idate,idate,1)
1021 if ( .not.
allocated(
mgwa) )
call openbf(lunit,
'FIRST',lunit)
1025 call status(lunit,lun,jl,jm)
1026 if(jl/=0)
call bort (
'BUFRLIB: DATEBF - INPUT BUFR FILE IS OPEN, IT MUST BE CLOSED')
1030 call openbf(lunit,
'INX',lunit)
1036 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
1037 errstr =
'BUFRLIB: DATEBF - SECTION 1 DATE COULD NOT BE LOCATED - RETURN WITH IDATE = -1'
1039 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
1071 recursive integer function igetdate(mbay,iyr,imo,idy,ihr)
result(iret)
1073 use modv_vars,
only: im8b, lendat
1077 integer,
intent(in) :: mbay(*)
1078 integer,
intent(out) :: iyr, imo, idy, ihr
1085 iret=
igetdate(mbay,iyr,imo,idy,ihr)
1098 if(lendat/=10) iyr = mod(iyr,100)
1099 iret = (iyr*1000000) + (imo*10000) + (idy*100) + ihr
1117 recursive integer function i4dy(idate)
result(iret)
1119 use modv_vars,
only: im8b
1123 integer,
intent(in) :: idate
1124 integer my_idate, iy
1130 call x84(idate,my_idate,1)
1136 if(idate<10**8)
then
1139 iret = idate + 19*100000000
1141 iret = idate + 20*100000000
1181 recursive subroutine dumpbf(lunit,jdate,jdump)
1185 use modv_vars,
only: im8b, iprt
1191 integer,
intent(in) :: lunit
1192 integer,
intent(out) :: jdate(*), jdump(*)
1193 integer my_lunit, lun, jl, jm, ier, ii,
igetdate,
idxmsg,
iupbs3,
iupbs01,
bort_target_set
1195 character*128 errstr
1201 call x84(lunit,my_lunit,1)
1202 call dumpbf(my_lunit,jdate,jdump)
1203 call x48(jdate(1),jdate(1),5)
1204 call x48(jdump(1),jdump(1),5)
1224 call status(lunit,lun,jl,jm)
1225 if(jl/=0)
call bort(
'BUFRLIB: DUMPBF - INPUT BUFR FILE IS OPEN, IT MUST BE CLOSED')
1226 call openbf(lunit,
'INX',lunit)
1235 ii =
igetdate(
mgwa,jdate(1),jdate(2),jdate(3),jdate(4))
1242 ii =
igetdate(
mgwa,jdump(1),jdump(2),jdump(3),jdump(4))
1249 if (iprt>=1 .and. (jdate(1)==-1.or.jdump(1)==-1))
then
1250 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
1251 if(jdate(1)==-1)
then
1252 errstr =
'BUFRLIB: DUMPBF - FIRST EMPTY BUFR MESSAGE SECTION 1 DATE COULD NOT BE LOCATED - RETURN WITH JDATE = 5*-1'
1255 if(jdump(1)==-1)
then
1256 errstr =
'BUFRLIB: DUMPBF - SECOND EMPTY BUFR MESSAGE SECTION 1 DATE COULD NOT BE LOCATED - RETURN WITH JDUMP = 5*-1'
1259 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
1279 use modv_vars,
only: im8b
1285 integer,
intent(in) :: lunit, mini
1292 call x84(lunit,my_lunit,1)
1293 call x84(mini,my_mini,1)
1294 call minimg(my_lunit,my_mini)
1307 call status(lunit,lun,il,im)
1308 if(il==0)
call bort(
'BUFRLIB: MINIMG - OUTPUT BUFR FILE IS CLOSED, IT MUST BE OPEN FOR OUTPUT')
1309 if(il<0)
call bort(
'BUFRLIB: MINIMG - OUTPUT BUFR FILE IS OPEN FOR INPUT, IT MUST BE OPEN FOR OUTPUT')
1310 if(im==0)
call bort(
'BUFRLIB: MINIMG - A MESSAGE MUST BE OPEN IN OUTPUT BUFR FILE, NONE ARE')
1333 use modv_vars,
only: iprt, fxy_sbyct
1342 integer,
intent(in) :: lun
1343 integer,
intent(out) :: jdate, iret
1344 integer,
parameter :: ncpfx = 3
1345 integer mtyp, msbt, mty1, msb1, isub, ksub, len0, len1, len2, len3, l4, l5, lundx, ii, &
1346 itab, inod, iad3, iad4, iyr, imo, idy, ihr, iupb, ifxy, iupbs01, iupbs3, i4dy, igetdate
1348 character*128 bort_str, errstr
1349 character*8,
intent(out) :: subset
1350 character*2,
parameter :: cpfx(ncpfx) = (/
'NC',
'FR',
'FN'/)
1361 mtyp = iupbs01(
mbay(1,lun),
'MTYP')
1362 msbt = iupbs01(
mbay(1,lun),
'MSBT')
1363 jdate = igetdate(
mbay(1,lun),iyr,imo,idy,ihr)
1369 if(
isc3(lun)==0)
then
1377 call getlens(
mbay(1,lun),3,len0,len1,len2,len3,l4,l5)
1378 iad3 = len0+len1+len2
1379 ksub = iupb(
mbay(1,lun),iad3+8,16)
1380 isub = iupb(
mbay(1,lun),iad3+10,16)
1388 outer:
do while (.true.)
1390 if(
isc3(lun)/=0)
then
1393 call nemtbax(lun,subset,mty1,msb1,inod)
1395 mbyt(lun) = 8*(iad4+4)
1401 inner:
do while (.true.)
1403 call numtab(lun,isub,subset,tab,itab)
1404 call nemtbax(lun,subset,mty1,msb1,inod)
1408 mbyt(lun) = (iad4+4)
1413 call numtab(lun,ksub,subset,tab,itab)
1414 call nemtbax(lun,subset,mty1,msb1,inod)
1417 mbyt(lun) = 8*(iad4+4)
1426 write(subset,
'(A2,2I3.3)') cpfx(ii),mtyp,msbt
1427 call nemtbax(lun,subset,mty1,msb1,inod)
1429 if(ksub==ifxy(fxy_sbyct))
then
1430 mbyt(lun) = (iad4+4)
1433 mbyt(lun) = 8*(iad4+4)
1446 call errwrt(
'++++++++++++++BUFR ARCHIVE LIBRARY+++++++++++++++++')
1447 errstr =
'BUFRLIB: CKTABA - LAST RESORT, CHECK FOR EXTERNAL BUFR TABLE VIA CALL TO IN-LINE OPENBT'
1449 call errwrt(
'++++++++++++++BUFR ARCHIVE LIBRARY+++++++++++++++++')
1463 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
1464 errstr =
'BUFRLIB: CKTABA - UNRECOGNIZED TABLE A MESSAGE TYPE (' // subset //
') - RETURN WITH IRET = -1'
1466 call errwrt(
'+++++++++++++++++++++WARNING+++++++++++++++++++++++')
1478 if(
isc3(lun)==0)
then
1480 write(bort_str,
'("BUFRLIB: CKTABA - MESSAGE TYPE MISMATCH (SUBSET=",A8,", MTYP=",I3,", MTY1=",I3)') subset,mtyp,mty1
1483 if( msbt/=msb1 .and. ( verify(subset(3:8),
'1234567890') == 0 ) )
then
1484 write(bort_str,
'("BUFRLIB: CKTABA - MESSAGE SUBTYPE MISMATCH (SUBSET=",A8,", MSBT=",I3,", MSB1=",I3)') subset,msbt,msb1
1488 if(iupbs3(
mbay(1,lun),
'ICMP')>0)
msgunp(lun) = 2
1492 idate(lun) = i4dy(jdate)
1494 msub(lun) = iupbs3(
mbay(1,lun),
'NSUB')
1496 if(iret/=11)
nmsg(lun) =
nmsg(lun)+1
1540 recursive subroutine mesgbc(lunin,mesgtyp,icomp)
1544 use modv_vars,
only: im8b
1551 integer,
intent(in) :: lunin
1552 integer,
intent(out) :: mesgtyp, icomp
1553 integer my_lunin, lunit, irec, ier, i, lun, il, im,
iupbs01,
iupbs3,
idxmsg,
bort_target_set
1559 call x84(lunin,my_lunin,1)
1560 call mesgbc(my_lunin,mesgtyp,icomp)
1561 call x48(mesgtyp,mesgtyp,1)
1562 call x48(icomp,icomp,1)
1579 if(lunit==lunin)
then
1582 call openbf(lunit,
'INX',lunit)
1590 if(mesgtyp>=0) mesgtyp = -mesgtyp
1603 call status(lunit,lun,il,im)
1643 use modv_vars,
only: im8b
1649 integer,
intent(in) :: lunit
1650 integer,
intent(out) :: mesgtyp
1657 call x84(lunit,my_lunit,1)
1658 call mesgbf(my_lunit,mesgtyp)
1659 call x48(mesgtyp,mesgtyp,1)
1674 call openbf(lunit,
'INX',lunit)
recursive subroutine bort(str)
Log an error message, then either return to or abort the application program.
subroutine bort_target_unset
Clear any existing bort target.
integer function bort_target_set()
Sets a new bort target, if bort catching is enabled and such a target doesn't already exist.
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...
subroutine strsuc(str1, str2, lens)
Remove leading and trailing blanks from a character string.
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.