1 SUBROUTINE REWNBF (LUNIT, ISR)
3 !$$$ SUBPROGRAM DOCUMENTATION BLOCK
6 ! PRGMMR: WOOLLEN ORG: NP20 DATE: 2003-11-04
8 ! ABSTRACT: THIS SUBROUTINE, DEPENDING ON THE VALUE OF ISR, WILL
10 ! 1) STORE THE CURRENT PARAMETERS ASSOCIATED WITH A BUFR FILE
11 ! CONNECTED TO LUNIT (READ/WRITE POINTERS, ETC.), SET THE FILE STATUS
12 ! TO READ, THEN REWIND THE BUFR FILE AND POSITION IT SUCH THAT THE
13 ! NEXT BUFR MESSAGE READ WILL BE THE FIRST MESSAGE IN THE FILE
14 ! CONTAINING ACTUAL SUBSETS WITH DATA; OR
15 ! 2) RESTORE THE BUFR FILE CONNECTED TO LUNIT TO THE PARAMETERS
16 ! IT HAD PRIOR TO 1) ABOVE USING THE INFORMATION SAVED IN 1) ABOVE.
18 ! THIS ALLOWS INFORMATION TO BE EXTRACTED FROM A PARTICULAR SUBSET IN
19 ! A BUFR FILE WHICH IS IN THE MIDST OF BEING READ FROM OR WRITTEN TO
20 ! BY AN APPLICATION PROGRAM. NOTE THAT FOR A PARTICULAR BUFR FILE 1)
21 ! ABOVE MUST PRECEDE 2) ABOVE. AN APPLICATION PROGRAM MIGHT FIRST
22 ! CALL THIS SUBROUTINE WITH ISR = 0, THEN CALL EITHER BUFR ARCHIVE
23 ! LIBRARY SUBROUTINE RDMGSB OR UFBINX TO GET INFO FROM A SUBSET, THEN
24 ! CALL THIS ROUTINE AGAIN WITH ISR = 1 TO RESTORE THE POINTERS IN THE
25 ! BUFR FILE TO THEIR ORIGINAL LOCATION. ALSO, BUFR ARCHIVE LIBRARY
26 ! SUBROUTINE UFBTAB WILL CALL THIS ROUTINE IF THE BUFR FILE IT IS
27 ! ACTING UPON IS ALREADY OPEN FOR INPUT OR OUTPUT.
29 ! PROGRAM HISTORY LOG:
30 ! 2003-11-04 J. WOOLLEN -- ORIGINAL AUTHOR (WAS IN VERIFICATION
31 ! VERSION BUT MAY HAVE BEEN IN THE PRODUCTION
32 ! VERSION AT ONE TIME AND THEN REMOVED)
33 ! 2003-11-04 D. KEYSER -- UNIFIED/PORTABLE FOR WRF; ADDED
34 ! DOCUMENTATION; OUTPUTS MORE COMPLETE
35 ! DIAGNOSTIC INFO WHEN ROUTINE TERMINATES
37 ! 2004-08-09 J. ATOR -- MAXIMUM MESSAGE LENGTH INCREASED FROM
38 ! 20,000 TO 50,000 BYTES
40 ! USAGE: CALL REWNBF (LUNIT, ISR)
41 ! INPUT ARGUMENT LIST:
42 ! LUNIT - INTEGER: FORTRAN LOGICAL UNIT NUMBER FOR BUFR FILE
43 ! ISR - INTEGER: SWITCH:
44 ! 0 = store current parameters associated with
45 ! BUFR file, set file status to read, rewind
46 ! file such that next message read is first
47 ! message containing subset data
48 ! 1 = restore BUFR file with parameters saved
49 ! from the previous call to this routine with
53 ! UNIT "LUNIT" - BUFR FILE
56 ! THIS ROUTINE CALLS: BORT I4DY RDMSGW STATUS
58 ! THIS ROUTINE IS CALLED BY: UFBINX UFBTAB
59 ! Also called by application programs.
62 ! LANGUAGE: FORTRAN 77
63 ! MACHINE: PORTABLE TO ALL PLATFORMS
69 COMMON / MSGCWD / NMSG (NFILES), NSUB (NFILES), MSUB (NFILES), &
70 INODE (NFILES), IDATE (NFILES)
71 COMMON / BITBUF / MAXBYT, IBIT, IBAY (MXMSGLD4), MBYT (NFILES), &
72 MBAY (MXMSGLD4, NFILES)
73 COMMON / BUFRSR / JUNN, JILL, JIMM, JBIT, JBYT, JMSG, JSUB, KSUB, &
74 JNOD, JDAT, JSR (NFILES), JBAY (MXMSGLD4)
76 CHARACTER(128) BORT_STR
78 DIMENSION MESG (MXMSGLD4)
80 !-----------------------------------------------------------------------
81 !-----------------------------------------------------------------------
83 ! TRY TO TRAP BAD CALL PROBLEMS
84 ! -----------------------------
87 CALL STATUS (LUNIT, LUN, IL, IM)
88 IF (JSR (LUN) .NE.0) GOTO 900
90 ELSEIF (ISR.EQ.1) THEN
92 IF (JSR (JUNN) .NE.1) GOTO 902
97 ! STORE FILE PARAMETERS AND SET FOR READING
98 ! -----------------------------------------
112 JBAY (I) = MBAY (I, LUN)
114 CALL WTSTAT (LUNIT, LUN, - 1, 0)
117 ! REWIND THE FILE AND POSITION AFTER THE DICTIONARY
118 ! -------------------------------------------------
121 1 CALL RDMSGW (LUNIT, MESG, IER)
122 IF (IER.EQ. - 1) GOTO 2
123 IF (IER.EQ. - 2) GOTO 904
124 IF (IUPBS01 (MESG, 'MTYP') .EQ.11) GOTO 1
127 ! RESTORE FILE PARAMETERS AND POSITION IT TO WHERE IT WAS SAVED
128 ! -------------------------------------------------------------
140 IDATE (LUN) = I4DY (JDAT)
142 MBAY (I, LUN) = JBAY (I)
145 READ (LUNIT, ERR = 905, END = 906)
147 CALL WTSTAT (LUNIT, LUN, IL, IM)
150 JSR (LUN) = MOD (JSR (LUN) + 1, 2)
156 900 WRITE (BORT_STR, '("BUFRLIB: REWNBF - ATTEMPING TO SAVE '//'PARAME&
157 &TERS FOR FILE FOR WHICH THEY HAVE ALREADY BEEN SAVED '//'(AND NOT &
158 &YET RESTORED) (UNIT",I3,")")') LUNIT
160 901 WRITE (BORT_STR, '("BUFRLIB: REWNBF - ATTEMPING TO SAVE '// &
161 'PARAMETERS FOR BUFR FILE WHICH IS NOT OPENED FOR EITHER INPUT'// &
162 ' OR OUTPUT) (UNIT",I3,")")') LUNIT
164 902 WRITE (BORT_STR, '("BUFRLIB: REWNBF - ATTEMPING TO RESTORE '// &
165 'PARAMETERS TO BUFR FILE WHICH WERE NEVER SAVED (UNIT",I3,")")') &
168 903 WRITE (BORT_STR, '("BUFRLIB: REWNBF - SAVE/RESTORE SWITCH (INPUT '&
169 &//'ARGUMENT ISR) IS NOT ZERO OR ONE (HERE =",I4,") (UNIT",I3,")")'&
172 904 WRITE (BORT_STR, '("BUFRLIB: REWNBF - ERROR READING A DICTIONARY '&
173 &//'MESSAGE AFTER REWIND OF BUFR FILE IN UNIT",I4,")")') LUNIT
175 905 WRITE (BORT_STR, '("BUFRLIB: REWNBF - ERROR READING MSG (RECORD) '&
176 &//'NO.",I5," IN ATTEMPT TO REPOSITION BUFR FILE IN UNIT",I3," TO'/&
177 &/' ORIGINAL MSG NO.",I5)') IMSG, LUNIT, JMSG
179 906 WRITE (BORT_STR, '("BUFRLIB: REWNBF - HIT END OF FILE BEFORE '// &
180 'REPOSITIONING BUFR FILE IN UNIT",I3," TO ORIGINAL MESSAGE '// &
181 'NO.",I5)') LUNIT, JMSG
183 END SUBROUTINE REWNBF