NCEPLIBS-w3emc  2.11.0
w3fi73.f
Go to the documentation of this file.
1 C> @file
2 C> @brief Construct grib bit map section (BMS).
3 C> @author M. Farley @date 1992-07-01
4 
5 C> This subroutine constructs a grib bit map section.
6 C>
7 C> Program history log:
8 C> - M. Farley 1992-07-01
9 C> - Bill Cavanaugh 1994-02-14 Recoded
10 C> - Ebisuzaki 1998-06-30 Linux port
11 C>
12 C> @param[in] IBFLAG
13 C> - 0, if bit map supplied by user
14 C> - #, Number of predefined center bit map
15 C> @param[in] IBMAP Integer array containing user bit map.
16 C> @param[in] IBLEN Length of bit map.
17 C> @param[out] BMS Completed grib bit map section.
18 C> @param[out] LENBMS Length of bit map section in bytes.
19 C> @param[out] IER 0 normal exit, 8 = ibmap values are all zero.
20 C>
21 C> @author M. Farley @date 1992-07-01
22  SUBROUTINE w3fi73 (IBFLAG,IBMAP,IBLEN,BMS,LENBMS,IER)
23 C
24  INTEGER IBMAP(*)
25  INTEGER LENBMS
26  INTEGER IBLEN
27  INTEGER IBFLAG
28 C
29  CHARACTER*1 BMS(*)
30 C
31  ier = 0
32 C
33  iz = 0
34  DO 20 i = 1, iblen
35  IF (ibmap(i).EQ.0) iz = iz + 1
36  20 CONTINUE
37  IF (iz.EQ.iblen) THEN
38 C
39 C AT THIS POINT ALL BIT MAP POSITIONS ARE ZERO
40 C
41  ier = 8
42  RETURN
43  END IF
44 C
45 C BIT MAP IS A COMBINATION OF ONES AND ZEROS
46 C OR BIT MAP ALL ONES
47 C
48 C CONSTRUCT BIT MAP FIELD OF BIT MAP SECTION
49 C
50  CALL sbytesc(bms,ibmap,48,1,0,iblen)
51 C
52  IF (mod(iblen,16).NE.0) THEN
53  nleft = 16 - mod(iblen,16)
54  ELSE
55  nleft = 0
56  END IF
57 C
58  num = 6 + (iblen+nleft) / 8
59 C
60 C CONSTRUCT BMS FROM COLLECTED DATA
61 C
62 C SIZE INTO FIRST THREE BYTES
63 C
64  CALL sbytec(bms,num,0,24)
65 C NUMBER OF FILL BITS INTO BYTE 4
66  CALL sbytec(bms,nleft,24,8)
67 C OCTET 5-6 TO CONTAIN INFO FROM IBFLAG
68  CALL sbytec(bms,ibflag,32,16)
69 C
70 C BIT MAP MAY BE ALL ONES OR A COMBINATION
71 C OF ONES AND ZEROS
72 C
73 C ACTUAL BITS OF BIT MAP PLACED ALL READY
74 C
75 C INSTALL FILL POSITIONS IF NEEDED
76  IF (nleft.NE.0) THEN
77  nleft = 16 - nleft
78 C ZERO FILL POSITIONS
79  CALL sbytec(bms,0,iblen+48,nleft)
80  END IF
81 C
82 C STORE NUM IN LENBMS (LENGTH OF BMS SECTION)
83 C
84  lenbms = num
85 C PRINT *,'W3FI73 - BMS LEN =',NUM,LENBMS
86 C
87  RETURN
88  END
subroutine sbytec(OUT, IN, ISKIP, NBYTE)
This is a wrapper for sbytesc()
Definition: sbytec.f:14
subroutine sbytesc(OUT, IN, ISKIP, NBYTE, NSKIP, N)
Store bytes - pack bits: Put arbitrary size values into a packed bit string, taking the low order bit...
Definition: sbytesc.f:17
subroutine w3fi73(IBFLAG, IBMAP, IBLEN, BMS, LENBMS, IER)
This subroutine constructs a grib bit map section.
Definition: w3fi73.f:23