1 SUBROUTINE ipxwafs3(IDIR, NUMPTS_THIN, NUMPTS_FULL, KM, NUM_OPT, OPT_PTS, &
2 IGDTLEN, IGDTMPL_THIN, DATA_THIN, IB_THIN, BITMAP_THIN, &
3 IGDTMPL_FULL, DATA_FULL, IB_FULL, BITMAP_FULL, IRET)
119 INTEGER,
INTENT(IN ) :: NUM_OPT
120 INTEGER,
INTENT(INOUT) :: OPT_PTS(NUM_OPT)
121 INTEGER,
INTENT(IN ) :: IDIR, KM, NUMPTS_THIN, NUMPTS_FULL
122 INTEGER,
INTENT(IN ) :: IGDTLEN
123 INTEGER,
INTENT(INOUT) :: IGDTMPL_THIN(IGDTLEN)
124 INTEGER,
INTENT(INOUT) :: IGDTMPL_FULL(IGDTLEN)
125 INTEGER,
INTENT(INOUT) :: IB_THIN(KM), IB_FULL(KM)
126 INTEGER,
INTENT( OUT) :: IRET
128 LOGICAL(KIND=1),
INTENT(INOUT) :: BITMAP_THIN(NUMPTS_THIN,KM)
129 LOGICAL(KIND=1),
INTENT(INOUT) :: BITMAP_FULL(NUMPTS_FULL,KM)
131 REAL,
INTENT(INOUT) :: DATA_THIN(NUMPTS_THIN,KM)
132 REAL,
INTENT(INOUT) :: DATA_FULL(NUMPTS_FULL,KM)
134 INTEGER,
PARAMETER :: MISSING=-1
136 INTEGER :: SCAN_MODE, I, J, K, IDLAT, IDLON
137 INTEGER :: IA, IB, IM, IM1, IM2, NPWAFS(73)
138 INTEGER :: IS1, IS2, ISCAN, ISCALE
140 LOGICAL :: TEST1, TEST2
143 REAL :: RAT1, RAT2, RLON1, RLON2
144 REAL :: WA, WB, X1, X2
147 73, 73, 73, 73, 73, 73, 73, 73, 72, 72, 72, 71, 71, 71, 70,&
148 70, 69, 69, 68, 67, 67, 66, 65, 65, 64, 63, 62, 61, 60, 60,&
149 59, 58, 57, 56, 55, 54, 52, 51, 50, 49, 48, 47, 45, 44, 43,&
150 42, 40, 39, 38, 36, 35, 33, 32, 30, 29, 28, 26, 25, 23, 22,&
151 20, 19, 17, 16, 14, 12, 11, 9, 8, 6, 5, 3, 2/
157 IF (igdtlen /= 19 .OR. numpts_thin/=3447 .OR. numpts_full/=5329)
THEN
164 scan_mode=igdtmpl_thin(19)
165 iscale=igdtmpl_thin(10)*igdtmpl_thin(11)
166 IF(iscale==0) iscale=10**6
167 idlat=nint(1.25*float(iscale))
168 test1=all(opt_pts==npwafs)
169 test2=all(opt_pts==npwafs(73:1:-1))
172 IF(scan_mode==64 .AND. igdtmpl_thin(9)==73 .AND. &
173 idlat==igdtmpl_thin(18) .AND. (test1 .OR. test2) )
THEN
174 igdtmpl_full=igdtmpl_thin
177 rlon1=float(igdtmpl_full(13))/float(iscale)
178 rlon2=float(igdtmpl_full(16))/float(iscale)
179 iscan=mod(igdtmpl_full(19)/128,2)
181 dlon=hi*(mod(hi*(rlon2-rlon1)-1+3600,360.)+1)/(im-1)
182 igdtmpl_full(17)=nint(dlon*float(iscale))
188 ELSEIF(idir.LT.0)
THEN
189 scan_mode=igdtmpl_full(19)
190 iscale=igdtmpl_full(10)*igdtmpl_full(11)
191 IF(iscale==0) iscale=10**6
192 idlat=nint(1.25*float(iscale))
196 IF(scan_mode==64 .AND. igdtmpl_full(8)==73 .AND. igdtmpl_full(9)==73 .AND. &
197 num_opt==73 .AND. idlat==igdtmpl_full(18) .AND. idlon==igdtmpl_full(17))
THEN
198 igdtmpl_thin=igdtmpl_full
199 igdtmpl_thin(8)=missing
200 igdtmpl_thin(17)=missing
201 IF(igdtmpl_thin(12)==0)
THEN
204 opt_pts=npwafs(73:1:-1)
220 DO j=1,igdtmpl_full(9)
223 rat1=float(im1-1)/float(im2-1)
227 ia=min(max(ia,1),im1-1)
232 IF(ib_thin(k).EQ.0.OR.bitmap_thin(is1+ia,k))
THEN
233 data_full(is2+i,k)=data_thin(is1+ia,k)
234 bitmap_full(is2+i,k)=.true.
236 data_full(is2+i,k)=0.0
237 bitmap_full(is2+i,k)=.false.
241 IF(ib_thin(k).EQ.0.OR.bitmap_thin(is1+ib,k))
THEN
242 data_full(is2+i,k)=data_thin(is1+ib,k)
243 bitmap_full(is2+i,k)=.true.
245 data_full(is2+i,k)=0.0
246 bitmap_full(is2+i,k)=.false.
257 ELSEIF(idir.EQ.-1)
THEN
262 DO j=1,igdtmpl_full(9)
265 rat2=float(im2-1)/float(im1-1)
269 ia=min(max(ia,1),im2-1)
274 IF(ib_full(k).EQ.0.OR.bitmap_full(is2+ia,k))
THEN
275 data_thin(is1+i,k)=data_full(is2+ia,k)
276 bitmap_thin(is1+i,k)=.true.
278 data_thin(is1+i,k)=0.0
279 bitmap_thin(is1+i,k)=.false.
283 IF(ib_full(k).EQ.0.OR.bitmap_full(is2+ib,k))
THEN
284 data_thin(is1+i,k)=data_full(is2+ib,k)
285 bitmap_thin(is1+i,k)=.true.
287 data_thin(is1+i,k)=0.0
288 bitmap_thin(is1+i,k)=.false.
300 END SUBROUTINE ipxwafs3