source: trunk/WRF.COMMON/WRFV3/external/io_grib2/g2lib/skgb.F @ 3567

Last change on this file since 3567 was 2759, checked in by aslmd, 2 years ago

adding unmodified code from WRFV3.0.1.1, expurged from useless data +1M size

File size: 2.7 KB
Line 
1C-----------------------------------------------------------------------
2      SUBROUTINE SKGB(LUGB,ISEEK,MSEEK,LSKIP,LGRIB)
3C$$$  SUBPROGRAM DOCUMENTATION BLOCK
4C
5C SUBPROGRAM: SKGB           SEARCH FOR NEXT GRIB MESSAGE
6C   PRGMMR: IREDELL          ORG: W/NMC23     DATE: 93-11-22
7C
8C ABSTRACT: THIS SUBPROGRAM SEARCHES A FILE FOR THE NEXT GRIB 1 MESSAGE.
9C   A GRIB 1 MESSAGE IS IDENTIFIED BY ITS INDICATOR SECTION, I.E.
10C   AN 8-BYTE SEQUENCE WITH 'GRIB' IN BYTES 1-4 AND 1 IN BYTE 8.
11C   IF FOUND, THE LENGTH OF THE MESSAGE IS DECODED FROM BYTES 5-7.
12C   THE SEARCH IS DONE OVER A GIVEN SECTION OF THE FILE.
13C   THE SEARCH IS TERMINATED IF AN EOF OR I/O ERROR IS ENCOUNTERED.
14C
15C PROGRAM HISTORY LOG:
16C   93-11-22  IREDELL
17C   95-10-31  IREDELL   ADD CALL TO BAREAD
18C   97-03-14  IREDELL   CHECK FOR '7777'
19C 2001-12-05  GILBERT   MODIFIED TO ALSO LOOK FOR GRIB2 MESSAGES
20C
21C USAGE:    CALL SKGB(LUGB,ISEEK,MSEEK,LSKIP,LGRIB)
22C   INPUT ARGUMENTS:
23C     LUGB         INTEGER LOGICAL UNIT OF INPUT GRIB FILE
24C     ISEEK        INTEGER NUMBER OF BYTES TO SKIP BEFORE SEARCH
25C     MSEEK        INTEGER MAXIMUM NUMBER OF BYTES TO SEARCH
26C   OUTPUT ARGUMENTS:
27C     LSKIP        INTEGER NUMBER OF BYTES TO SKIP BEFORE MESSAGE
28C     LGRIB        INTEGER NUMBER OF BYTES IN MESSAGE (0 IF NOT FOUND)
29C
30C SUBPROGRAMS CALLED:
31C   BAREAD       BYTE-ADDRESSABLE READ
32C   G2LIB_GBYTE         GET INTEGER DATA FROM BYTES
33C
34C ATTRIBUTES:
35C   LANGUAGE: FORTRAN
36C
37C$$$
38      PARAMETER(LSEEK=128)
39      CHARACTER Z(LSEEK)
40      CHARACTER Z4(4)
41C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
42      LGRIB=0
43      KS=ISEEK
44      KN=MIN(LSEEK,MSEEK)
45      KZ=LSEEK
46C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
47C  LOOP UNTIL GRIB MESSAGE IS FOUND
48      DOWHILE(LGRIB.EQ.0.AND.KN.GE.8.AND.KZ.EQ.LSEEK)
49C  READ PARTIAL SECTION
50        CALL BAREAD(LUGB,KS,KN,KZ,Z)
51        KM=KZ-8+1
52        K=0
53C  LOOK FOR 'GRIB...1' IN PARTIAL SECTION
54        DOWHILE(LGRIB.EQ.0.AND.K.LT.KM)
55          CALL G2LIB_GBYTE(Z,I4,(K+0)*8,4*8)
56          CALL G2LIB_GBYTE(Z,I1,(K+7)*8,1*8)
57          IF(I4.EQ.1196575042.AND.(I1.EQ.1.OR.I1.EQ.2)) THEN
58C  LOOK FOR '7777' AT END OF GRIB MESSAGE
59            IF (I1.EQ.1) CALL G2LIB_GBYTE(Z,KG,(K+4)*8,3*8)
60            IF (I1.EQ.2) CALL G2LIB_GBYTE(Z,KG,(K+12)*8,4*8)
61            CALL BAREAD(LUGB,KS+K+KG-4,4,K4,Z4)
62            IF(K4.EQ.4) THEN
63              CALL G2LIB_GBYTE(Z4,I4,0,4*8)
64              IF(I4.EQ.926365495) THEN
65C  GRIB MESSAGE FOUND
66                LSKIP=KS+K
67                LGRIB=KG
68              ENDIF
69            ENDIF
70          ENDIF
71          K=K+1
72        ENDDO
73        KS=KS+KM
74        KN=MIN(LSEEK,ISEEK+MSEEK-KS)
75      ENDDO
76C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
77      RETURN
78      END
Note: See TracBrowser for help on using the repository browser.