Merge remote-tracking branch 'origin/release-v4.6.1'
[WRF.git] / var / external / bufr / readns.f
blob4652f5a773fe589eb17ebe011215c9c89ea60953
1 SUBROUTINE READNS(LUNIT,SUBSET,JDATE,IRET)
3 C$$$ SUBPROGRAM DOCUMENTATION BLOCK
5 C SUBPROGRAM: READNS
6 C PRGMMR: WOOLLEN ORG: NP20 DATE: 1994-01-06
8 C ABSTRACT: THIS SUBROUTINE SHOULD ONLY BE CALLED WHEN LOGICAL UNIT
9 C LUNIT HAS BEEN OPENED FOR INPUT OPERATIONS. IT READS THE NEXT
10 C SUBSET FROM LOGICAL UNIT NUMBER LUNIT INTO INTERNAL SUBSET ARRAYS.
11 C BUFR MESSAGES IN LUNIT MAY BE EITHER COMPRESSED OR UNCOMPRESSED.
12 C THIS SUBROUTINE IS ACTUALLY A COMBINATION OF BUFR ARCHIVE LIBRARY
13 C SUBROUTINES READMG AND READSB.
15 C PROGRAM HISTORY LOG:
16 C 1994-01-06 J. WOOLLEN -- ORIGINAL AUTHOR
17 C 1998-07-08 J. WOOLLEN -- REPLACED CALL TO CRAY LIBRARY ROUTINE
18 C "ABORT" WITH CALL TO NEW INTERNAL BUFRLIB
19 C ROUTINE "BORT"
20 C 1999-11-18 J. WOOLLEN -- THE NUMBER OF BUFR FILES WHICH CAN BE
21 C OPENED AT ONE TIME INCREASED FROM 10 TO 32
22 C (NECESSARY IN ORDER TO PROCESS MULTIPLE
23 C BUFR FILES UNDER THE MPI)
24 C 2003-11-04 S. BENDER -- ADDED REMARKS/BUFRLIB ROUTINE
25 C INTERDEPENDENCIES
26 C 2003-11-04 D. KEYSER -- MAXJL (MAXIMUM NUMBER OF JUMP/LINK ENTRIES)
27 C INCREASED FROM 15000 TO 16000 (WAS IN
28 C VERIFICATION VERSION); UNIFIED/PORTABLE FOR
29 C WRF; ADDED DOCUMENTATION (INCLUDING
30 C HISTORY); OUTPUTS MORE COMPLETE DIAGNOSTIC
31 C INFO WHEN ROUTINE TERMINATES ABNORMALLY
33 C USAGE: CALL READNS (LUNIT, SUBSET, JDATE, IRET)
34 C INPUT ARGUMENT LIST:
35 C LUNIT - INTEGER: FORTRAN LOGICAL UNIT NUMBER FOR BUFR FILE
37 C OUTPUT ARGUMENT LIST:
38 C SUBSET - CHARACTER*8: TABLE A MNEMONIC FOR BUFR MESSAGE
39 C CONTAINING SUBSET BEING READ
40 C JDATE - INTEGER: DATE-TIME STORED WITHIN SECTION 1 OF BUFR
41 C MESSAGE CONTAINING SUBSET BEING READ, IN FORMAT OF
42 C EITHER YYMMDDHH OR YYYYMMDDHH, DEPENDING ON DATELEN()
43 C VALUE
44 C IREADNS - INTEGER: RETURN CODE:
45 C 0 = normal return
46 C -1 = there are no more subsets in the BUFR file
48 C REMARKS:
49 C THIS ROUTINE CALLS: BORT READMG READSB STATUS
50 C THIS ROUTINE IS CALLED BY: IREADNS
51 C Also called by application programs.
53 C ATTRIBUTES:
54 C LANGUAGE: FORTRAN 77
55 C MACHINE: PORTABLE TO ALL PLATFORMS
57 C$$$
59 INCLUDE 'bufrlib.prm'
61 COMMON /MSGCWD/ NMSG(NFILES),NSUB(NFILES),MSUB(NFILES),
62 . INODE(NFILES),IDATE(NFILES)
63 COMMON /BTABLES/ MAXTAB,NTAB,TAG(MAXJL),TYP(MAXJL),KNT(MAXJL),
64 . JUMP(MAXJL),LINK(MAXJL),JMPB(MAXJL),
65 . IBT(MAXJL),IRF(MAXJL),ISC(MAXJL),
66 . ITP(MAXJL),VALI(MAXJL),KNTI(MAXJL),
67 . ISEQ(MAXJL,2),JSEQ(MAXJL)
69 CHARACTER*10 TAG
70 CHARACTER*8 SUBSET
71 CHARACTER*3 TYP
73 C-----------------------------------------------------------------------
74 C-----------------------------------------------------------------------
76 C REFRESH THE SUBSET AND JDATE PARAMETERS
77 C ---------------------------------------
79 CALL STATUS(LUNIT,LUN,IL,IM)
80 IF(IL.EQ.0) GOTO 900
81 IF(IL.GT.0) GOTO 901
82 SUBSET = TAG(INODE(LUN))
83 JDATE = IDATE(LUN)
85 C READ THE NEXT SUBSET IN THE BUFR FILE
86 C -------------------------------------
88 1 CALL READSB(LUNIT,IRET)
89 IF(IRET.NE.0) THEN
90 CALL READMG(LUNIT,SUBSET,JDATE,IRET)
91 IF(IRET.EQ.0) GOTO 1
92 ENDIF
94 C EXITS
95 C -----
97 RETURN
98 900 CALL BORT('BUFRLIB: READNS - INPUT BUFR FILE IS CLOSED, IT MUST'//
99 . ' BE OPEN FOR INPUT')
100 901 CALL BORT('BUFRLIB: READNS - INPUT BUFR FILE IS OPEN FOR OUTPUT'//
101 . ', IT MUST BE OPEN FOR INPUT')