da_bias_scan.f90
References to this file elsewhere.
1 PROGRAM da_bias_scan
2
3 USE RAD_BIAS, only : long, bias, jpchan, jpscan, da_read_biasprep, print_bias, &
4 qc_amsua, qc_amsub, jband, boff, bdiv
5
6 ! PURPOSE.
7 ! -------
8 ! TO CALCULATE SCAN BIAS CORRECTIONS.
9
10 ! REFERENCE.
11 ! ----------
12 ! The ECMWF Tovs BIAs Correction, Harris and Kelly..
13
14 IMPLICIT NONE
15
16 ! Local Variables
17
18 TYPE(BIAS) :: tovs
19
20 INTEGER :: nobs(JPCHAN)
21 INTEGER :: nscan(JPSCAN), nscanch(JPCHAN,JPSCAN)
22 INTEGER :: nscanchb(JPCHAN,JPSCAN,JBAND)
23
24 REAL(KIND=LONG) :: vmean_dep(JPCHAN), vmean_abs(JPCHAN)
25 REAL(KIND=LONG) :: vstd_dep(JPCHAN), vstd_abs(JPCHAN)
26 REAL(KIND=LONG) :: vec_dep(JPCHAN), vec_abs(JPCHAN)
27
28 REAL(KIND=LONG) :: vmn(JPCHAN), vstd(JPCHAN)
29 REAL(KIND=LONG) :: vmnsc(JPCHAN,JPSCAN), vstdsc(JPCHAN,JPSCAN), vmnrl(JPCHAN,JPSCAN)
30
31 REAL(KIND=LONG) :: vmnscb(JPCHAN,JPSCAN,JBAND), vstdscb(JPCHAN,JPSCAN,JBAND)
32 REAL(KIND=LONG) :: vmnrlb(JPCHAN,JPSCAN,JBAND)
33
34 ! smoothed values
35 INTEGER :: nscanchbt(JPCHAN,JPSCAN,JBAND)
36 REAL(KIND=LONG) :: vmnscbt(JPCHAN,JPSCAN,JBAND), vstdscbt(JPCHAN,JPSCAN,JBAND)
37 REAL(KIND=LONG) :: vmnrlbt(JPCHAN,JPSCAN,JBAND)
38
39 ! INTEGER :: ibin
40 INTEGER :: ierr, iscanm
41 INTEGER :: j, jv, jscan, js, k , l
42 ! INTEGER :: path
43 ! INTEGER :: cloud_flag
44
45 INTEGER :: iband
46 ! INTEGER :: ia
47 ! INTEGER :: iab
48 ! INTEGER :: aoff
49 ! INTEGER :: avb
50
51 ! CHARACTER(LEN=2) :: cchan
52
53 REAL(KIND=LONG) :: vmn0, vmn0b(JBAND)
54 ! REAL(KIND=LONG) :: VDHL_WINDOW, VDLL_WINDOW
55
56 LOGICAL :: global, smoothing
57
58 ! definition of defaut namelist values
59 !-----------------------------------------
60 INTEGER :: sband =1
61 INTEGER :: eband =18
62 INTEGER :: kscan =90
63 INTEGER :: ICOUNT = 0 ! connter
64 REAL(KIND=LONG) :: fac = 3.0 ! Sdev factor
65 NAMELIST /INPUTS/ kscan,fac,global,sband,eband,smoothing
66
67 !------------------------------------------------------------------------------
68 ! 1. SETUP.
69 ! -----
70
71 READ(5,INPUTS,END=100)
72
73 100 CONTINUE
74
75 WRITE(6,INPUTS)
76
77 OPEN(UNIT=10,FORM='UNFORMATTED') ! Open input file : Input data from select
78 OPEN(UNIT=11,FORM='UNFORMATTED') ! Open output file : Scan mean core arrays
79 OPEN(UNIT=12,FORM='UNFORMATTED') ! Open output file : Scan bias coef
80
81
82 !------------------------------------------------------------------------------
83 ! 2. READ IN DATA, Q.C., CALC MEANS AND VARIANCES.
84 ! ---- -- ----- ----- ---- ----- --- ---------
85
86 vmean_dep = 0.0 ! Clear matrices
87 vstd_dep = 0.0
88 vmean_abs = 0.0 ! Clear matrices
89 vstd_abs = 0.0
90 nobs = 0
91
92 READ(UNIT=10,END=265) tovs%nchan, tovs%npred ! Read in data
93 REWIND(UNIT=10)
94
95 allocate(tovs%tb(tovs%nchan))
96 allocate(tovs%omb(tovs%nchan))
97 allocate(tovs%bias(tovs%nchan))
98 allocate(tovs%qc_flag(tovs%nchan))
99 allocate(tovs%cloud_flag(tovs%nchan))
100 allocate(tovs%pred(tovs%npred))
101
102 loop1:&
103 DO
104 icount=icount+1
105
106 !
107 ! 2.1 read in data
108 !
109 call da_read_biasprep(tovs,10,ierr)
110 if (ierr == 0) then ! not end
111 continue
112 elseif (ierr == 1) then ! end
113 exit
114 else ! error
115 stop 'read error in da_scan_bias'
116 endif
117
118 if (icount < 2) call print_bias(tovs)
119
120 vec_dep(1:tovs%nchan) = tovs%omb(1:tovs%nchan) ! obs minus guess
121 vec_abs(1:tovs%nchan) = tovs%tb(1:tovs%nchan) ! obs
122
123 !
124 ! 2.2 QC: extrme values/extrme departure/window channel
125 !
126 if (tovs%sensor_id == 3) then
127 call qc_amsua(tovs)
128 elseif(tovs%sensor_id == 4) then
129 call qc_amsub(tovs)
130 elseif(tovs%sensor_id == 15) then
131 call qc_amsub(tovs)
132 endif
133
134 DO j=1,tovs%nchan
135 !-------------------------------
136 ! 2.3 compute the statistics
137 !-------------------------------
138 IF ( tovs%qc_flag(j) == 1 ) THEN
139 nobs(j) = nobs(j) + 1
140 vmean_dep(j) = vmean_dep(j) + vec_dep(j)
141 vstd_dep(j) = vstd_dep(j) + vec_dep(j)*vec_dep(j)
142 vmean_abs(j) = vmean_abs(j) + vec_abs(j)
143 vstd_abs(j) = vstd_abs(j) + vec_abs(j)*vec_abs(j)
144 ENDIF
145 ENDDO
146
147 ENDDO loop1
148
149 265 CONTINUE ! MEANS AND STANDARD DEVIATIONS
150
151 WRITE (6,270) icount,nobs(1:tovs%nchan)
152 270 FORMAT (/1X,'NUMBER OF DATA Total/ACCEPTED'/1X,i10/1X,15I10)
153
154 !---------------------------------
155 ! 2.8 mean and std for channels
156 !---------------------------------
157 WHERE (nobs(:) /= 0)
158 vmean_dep(:) = vmean_dep(:)/nobs(:)
159 vstd_dep(:) = vstd_dep(:)/nobs(:) - vmean_dep(:)**2
160 vstd_dep(:) = SQRT(MAX(0.0,vstd_dep(:)))
161 vmean_abs(:) = vmean_abs(:)/nobs(:)
162 vstd_abs(:) = vstd_abs(:)/nobs(:) - vmean_abs(:)**2
163 vstd_abs(:) = SQRT(MAX(0.0,vstd_abs(:)))
164 END WHERE
165
166 vmn(:) = vmean_dep(:) ! used by outlier check later
167 vstd(:) = vstd_dep(:)
168
169 WRITE (6,288)
170 288 FORMAT (/1X,'FIRST PASS: MEANS AND STANDARD DEVIATIONS')
171
172 DO j=1,tovs%nchan
173 jv = j
174 WRITE (6,289) jv, nobs(j), vmean_abs(j),vstd_abs(j), vmean_dep(j),vstd_dep(j)
175 ENDDO
176 289 FORMAT (1X,I5,I10,4F15.2)
177
178 !-------------------------------------------------------------------------------
179 ! 3. SECOND PASS THROUGH DATA, EXTRA Q.C.
180 ! ------ ---- ------- ----- ----- ----
181
182 REWIND(UNIT=10)
183
184 vmean_dep = 0.0 ! Clear matrices
185 vstd_dep = 0.0
186 vmean_abs = 0.0 ! Clear matrices
187 vstd_abs = 0.0
188 vmnsc = 0.0
189 vstdsc = 0.0
190 vmnscb = 0.0
191 vstdscb = 0.0
192 nobs = 0
193 nscan = 0
194 nscanch = 0
195 nscanchb = 0
196
197 loop2:&
198 DO
199
200 call da_read_biasprep(tovs,10,ierr)
201 if (ierr == 0) then ! not end
202 continue
203 elseif (ierr == 1) then ! end
204 exit
205 else ! error
206 stop 'read error in da_scan_bias'
207 endif
208
209 vec_dep(1:tovs%nchan) = tovs%omb(1:tovs%nchan)
210 vec_abs(1:tovs%nchan) = tovs%tb(1:tovs%nchan)
211
212 if (tovs%sensor_id == 3) then
213 call qc_amsua(tovs)
214 elseif(tovs%sensor_id == 4) then
215 call qc_amsub(tovs)
216 elseif(tovs%sensor_id == 15) then ! mhs
217 call qc_amsub(tovs)
218 endif
219
220 !---------------------------------------------------------------------------------
221 ! 3.6 Reject outliers : using fac and stdv calculated in the first pass : loop 1
222 !---------------------------------------------------------------------------------
223 DO j=1, tovs%nchan
224 IF ( (ABS(vec_dep(j)-vmn(j)) > (vstd(j)*FAC)) ) THEN
225 tovs%qc_flag(j) = -1
226 ENDIF
227 ENDDO
228
229 ! Good data : count and use in the ststistics
230 !----------------------------------------------------
231
232 jscan = tovs%scanpos
233 nscan(jscan) = nscan(jscan) + 1
234
235 iband = FLOOR(tovs%lat/BDIV) + BOFF !! latitude band
236
237 DO j=1, tovs%nchan
238 IF ( tovs%qc_flag(j) == 1 ) THEN
239
240 ! statistics for channel
241 !--------------------------
242 nobs(j) = nobs(j) + 1
243 vmean_dep(j) = vmean_dep(j) + vec_dep(j)
244 vstd_dep(j) = vstd_dep(j) + vec_dep(j)*vec_dep(j)
245 vmean_abs(j) = vmean_abs(j) + vec_abs(j)
246 vstd_abs(j) = vstd_abs(j) + vec_abs(j)*vec_abs(j)
247
248 ! statistics for channel+scan position
249 !----------------------------------------
250 nscanch(j,jscan) = nscanch(j,jscan) + 1
251 vmnsc(j,jscan) = vmnsc(j,jscan) + vec_dep(j)
252 vstdsc(j,jscan) = vstdsc(j,jscan) + vec_dep(j)*vec_dep(j)
253
254 ! statistics for channel + scan position + lat band
255 !----------------------------------------------------------
256 nscanchb(j,jscan,iband) = nscanchb(j,jscan,iband) + 1
257 vmnscb(j,jscan,iband) = vmnscb(j,jscan,iband) + vec_dep(j)
258 vstdscb(j,jscan,iband) = vstdscb(j,jscan,iband) + vec_dep(j)*vec_dep(j)
259
260 ENDIF
261 ENDDO
262
263 ENDDO loop2
264
265 ! Write scan 'core' arrays NOTE: not divided by nobs
266 !------------------------------------------------------
267 WRITE(11) nobs(:) ! statistics for channel
268 WRITE(11) vmean_dep(:)
269 WRITE(11) vstd_dep(:)
270 WRITE(11) vmean_abs(:)
271 WRITE(11) vstd_abs(:)
272
273 WRITE(11) nscanch(:,:) ! statistics for channel + scan position
274 WRITE(11) vmnsc(:,:)
275 WRITE(11) vstdsc(:,:)
276
277 WRITE(11) nscanchb(:,:,:) ! statistics for channel + scan position + lat band
278 WRITE(11) vmnscb(:,:,:)
279 WRITE(11) vstdscb(:,:,:)
280
281 ! Write out copious amounts of output
282 !----------------------------------------
283 WRITE (6,270) icount,nobs(1:tovs%nchan)
284
285 WHERE (nobs(:) /= 0) ! for channels
286 vmean_dep(:) = vmean_dep(:)/nobs(:)
287 vstd_dep(:) = vstd_dep(:)/nobs(:) - vmean_dep(:)**2
288 vstd_dep(:) = SQRT(MAX(0.0,vstd_dep(:)))
289 vmean_abs(:) = vmean_abs(:)/nobs(:)
290 vstd_abs(:) = vstd_abs(:)/nobs(:) - vmean_abs(:)**2
291 vstd_abs(:) = SQRT(MAX(0.0,vstd_abs(:)))
292 END WHERE
293
294 DO j=1, tovs%nchan
295 WHERE (nscanch(j,:) /= 0) ! for channels + scan
296 vmnsc(j,:) = vmnsc(j,:)/nscanch(j,:)
297 vstdsc(j,:) = vstdsc(j,:)/nscanch(j,:) - vmnsc(j,:)**2
298 vstdsc(j,:) = SQRT(MAX(0.0,vstdsc(j,:)))
299 END WHERE
300 WHERE (nscanchb(j,:,:) /= 0) ! for channels + scan + band
301 vmnscb(j,:,:) = vmnscb(j,:,:)/nscanchb(j,:,:)
302 vstdscb(j,:,:) = vstdscb(j,:,:)/nscanchb(j,:,:) - vmnscb(j,:,:)**2
303 vstdscb(j,:,:) = SQRT(MAX(0.0,vstdscb(j,:,:)))
304 END WHERE
305
306 ! 4.1 compute central scan position mean
307 !--------------------------------------------
308 IF (MOD(KSCAN,2) == 0 ) THEN ! even scan number
309 iscanm = KSCAN/2 !! middle scan position
310
311 IF( nscanch(j,iscanm) .ne. 0 .and. nscanch(j,iscanm+1) .ne.0 )then
312 vmn0 = 0.5*(vmnsc(j,iscanm)+vmnsc(j,iscanm+1))
313 vmn0b(:) = 0.5*(vmnscb(j,iscanm,:)+vmnscb(j,iscanm+1,:))
314 ENDIF
315
316 IF( nscanch(j,iscanm) .eq. 0 .and. nscanch(j,iscanm+1) .ne.0 )then
317 vmn0 = vmnsc(j,iscanm+1)
318 vmn0b(:) = vmnscb(j,iscanm+1,:)
319 ENDIF
320
321 IF( nscanch(j,iscanm) .ne. 0 .and. nscanch(j,iscanm+1) .eq.0 )then
322 vmn0 = vmnsc(j,iscanm)
323 vmn0b(:) = vmnscb(j,iscanm,:)
324 ENDIF
325
326 ELSE
327 iscanm = kscan/2 + 1
328 vmn0 = vmnsc(j,iscanm)
329 vmn0b(:) = vmnscb(j,iscanm,:)
330 ENDIF
331
332 ! 4.2 compute relative bias
333 !------------------------------------
334 DO k=1,KSCAN
335 IF( nscanch(j,k) .ne. 0 )then
336 vmnrl(j,k)=vmnsc(j,k) - vmn0
337 DO l=1, JBAND
338 vmnrlb(j,K,l) = vmnscb(j,K,l) - vmn0b(l)
339 ENDDO
340 ENDIF
341 ENDDO
342
343 ENDDO
344
345 ! prinit output
346
347 !------------------
348 WRITE (6,388)
349 388 FORMAT (/1X,'SECOND PASS: MEANS AND STANDARD DEVIATIONS')
350 DO j=1, tovs%nchan
351 jv = j
352 WRITE (6,289) jv, nobs(j), vmean_abs(j), vstd_abs(j), vmean_dep(j), vstd_dep(j)
353 ENDDO
354
355 !-------------------
356 WRITE (6,370) (js,js=1,KSCAN)
357 370 FORMAT (/5X,'NUMBER AT EACH SCAN POSITION'/5X,30I7)
358
359 DO j=1, tovs%nchan
360 jv = j
361 WRITE(6,371) jv, nscanch(j,1:KSCAN)
362 ENDDO
363 371 FORMAT(1X,I4,30I7)
364
365 WRITE (6,391) (js,js=1,KSCAN)
366 391 FORMAT (/1X,'BIASES FOR EACH SCAN ANGLE'/4X,30I7)
367 DO j=1, tovs%nchan
368 jv = j
369 WRITE (6,393) jv, (vmnsc(j,js),js=1,KSCAN)
370 ENDDO
371 393 FORMAT (1X,I3,30F7.2)
372
373 WRITE (6,394) (js,js=1,KSCAN)
374 394 FORMAT (/1X,'STD DEV FOR EACH SCAN ANGLE'/4X,30I7)
375 DO j=1, tovs%nchan
376 jv = j
377 WRITE (6,396) jv, (vstdsc(j,js),js=1,KSCAN)
378 ENDDO
379 396 FORMAT (1X,I3,30F7.2)
380
381 !----------------------
382 if (global) then
383 WRITE(6,'(1x,a17,2i4)') 'SCAN COEFFICIENTS', jband,kscan
384 DO j=1,tovs%nchan
385 jv = j
386 DO iband=1, jband
387 WRITE(6,'(2i3,30f7.2)') jv, iband, vmnrlb(j,1:KSCAN,iband)
388 ENDDO
389 ENDDO
390
391 if (smoothing) then
392
393 CLOSE(11)
394
395 OPEN(11,FORM='UNFORMATTED')
396
397 READ(11) nobs(:)
398 READ(11) vmean_dep(:)
399 READ(11) vstd_dep(:)
400 READ(11) vmean_abs(:)
401 READ(11) vstd_abs(:)
402
403 READ(11) nscanch(:,:)
404 READ(11) vmnsc(:,:)
405 READ(11) vstdsc(:,:)
406
407 READ(11) nscanchb(:,:,:)
408 READ(11) vmnscb(:,:,:)
409 READ(11) vstdscb(:,:,:)
410
411 ! Perform smoothing on banded corrections.
412 ! for absolute bias/stdev
413
414 vmnscbt = 0.0
415 vstdscbt= 0.0
416 nscanchbt = 0
417
418 DO j=1, tovs%nchan
419 DO iband=1, JBAND
420
421 ! IF (iband <= AVBAND) THEN
422 ! aoff = AVBAND - iband + 1
423 ! avb = AVBAND
424 ! ELSEIF ((iband < 2*AVBAND+1) .AND. (iband > AVBAND)) THEN
425 ! aoff = 0
426 ! avb = 2*AVBAND+1 - iband
427 ! ELSEIF ((iband >= 2*AVBAND+1) .AND. (JBAND-iband+1 >= 2*AVBAND+1)) THEN
428 ! aoff = 0
429 ! avb = 0
430 ! ELSEIF ((JBAND-iband+1 < 2*AVBAND+1) .AND. (JBAND-iband+1 > AVBAND)) THEN
431 ! aoff = 0
432 ! avb = 2*AVBAND+1 - (JBAND-iband+1)
433 ! ELSEIF (JBAND-iband+1 <= AVBAND) THEN
434 ! aoff = -(AVBAND - (JBAND-iband+1) + 1)
435 ! avb = AVBAND
436 ! ENDIF
437
438 ! DO ia=-avb, avb
439 ! iab = iband + ia + aoff
440 ! vmnscbt(j,1:KSCAN,iband) = vmnscbt(j,1:KSCAN,iband) + vmnscb(j,1:KSCAN,IAb)
441 ! vstdscbt(j,1:KSCAN,iband) = vstdscbt(j,1:KSCAN,iband) + vstdscb(j,1:KSCAN,IAb)
442 ! nscanchbt(j,1:KSCAN,iband) = nscanchbt(j,1:KSCAN,iband) + nscanchb(j,1:KSCAN,IAb)
443 ! ENDDO
444 vmnscbt(j,1:KSCAN,iband) = vmnscb(j,1:KSCAN,iband)
445 vstdscbt(j,1:KSCAN,iband) = vstdscb(j,1:KSCAN,iband)
446 nscanchbt(j,1:KSCAN,iband) = nscanchb(j,1:KSCAN,iband)
447 ENDDO
448 ENDDO
449
450 DO j=1, tovs%nchan
451 WHERE (nscanchbt(j,1:KSCAN,:) /= 0)
452 vmnscbt(j,1:KSCAN,:) = vmnscbt(j,1:KSCAN,:)/nscanchbt(j,1:KSCAN,:)
453 vstdscbt(j,1:KSCAN,:) = vstdscbt(j,1:KSCAN,:)/nscanchbt(j,1:KSCAN,:) - vmnscbt(j,1:KSCAN,:)**2
454 vstdscbt(j,1:KSCAN,:) = SQRT(MAX(0.0,vstdscbt(j,1:KSCAN,:)))
455 END WHERE
456
457 ! get bias at nadir
458 IF (MOD(KSCAN,2) == 0 ) THEN ! even scan number
459 iscanm = KSCAN/2
460
461 IF( nscanch(j,iscanm) .ne. 0 .and. nscanch(j,iscanm+1) .ne.0 )then
462 vmn0b(:) = 0.5*(vmnscbt(j,iscanm,:)+vmnscbt(j,iscanm+1,:))
463 ENDIF
464
465 IF( nscanch(j,iscanm) .eq. 0 .and. nscanch(j,iscanm+1) .ne.0 )then
466 vmn0b(:) = vmnscbt(j,iscanm+1,:)
467 ENDIF
468
469 IF( nscanch(j,iscanm) .ne. 0 .and. nscanch(j,iscanm+1) .eq.0 )then
470 vmn0b(:) = vmnscbt(j,iscanm,:)
471 ENDIF
472
473 ELSE
474 iscanm = kscan/2 + 1
475 vmn0b(:) = vmnscbt(j,iscanm,:)
476 ENDIF
477
478 ! 4.2 compute relative bias
479 !------------------------------------
480 DO k=1,KSCAN
481 IF( nscanch(j,k) .ne. 0 )then
482 DO l=1, JBAND
483 vmnrlb(j,k,l) = vmnscbt(j,k,l) - vmn0b(l)
484 ENDDO
485 ENDIF
486 ENDDO
487
488 ENDDO
489
490 ! Perform smoothing on banded corrections.
491 ! for relative bias
492
493 ! DO j=1, tovs%nchan
494 ! vmnrlbt(j,1:KSCAN,1) = 0.50*vmnrlb(j,1:KSCAN,1) &
495 ! + 0.50*vmnrlb(j,1:KSCAN,2)
496 ! DO iband=2, JBAND-1
497 ! vmnrlbt(j,1:KSCAN,iband) = 0.25*vmnrlb(j,1:KSCAN,iband-1) &
498 ! + 0.50*vmnrlb(j,1:KSCAN,iband) &
499 ! + 0.25*vmnrlb(j,1:KSCAN,iband+1)
500 ! ENDDO
501 ! vmnrlbt(j,1:KSCAN,JBAND) = 0.50*vmnrlb(j,1:KSCAN,JBAND-1) &
502 ! + 0.50*vmnrlb(j,1:KSCAN,JBAND)
503 ! ENDDO
504
505 if ( (eband-sband+1) >= 3 ) then
506 DO j=1, tovs%nchan
507 vmnrlbt(j,1:KSCAN,sband) = 0.50*vmnrlb(j,1:KSCAN,sband) &
508 + 0.50*vmnrlb(j,1:KSCAN,sband+1)
509 DO iband=sband, eband-1
510 vmnrlbt(j,1:KSCAN,iband) = 0.25*vmnrlb(j,1:KSCAN,iband-1) &
511 + 0.50*vmnrlb(j,1:KSCAN,iband) &
512 + 0.25*vmnrlb(j,1:KSCAN,iband+1)
513 ENDDO
514 vmnrlbt(j,1:KSCAN,eband) = 0.50*vmnrlb(j,1:KSCAN,eband-1) &
515 + 0.50*vmnrlb(j,1:KSCAN,eband)
516 ENDDO
517 elseif ( (eband-sband+1) == 2 ) then
518 vmnrlbt(j,1:KSCAN,sband) = 0.50*vmnrlb(j,1:KSCAN,sband) &
519 + 0.50*vmnrlb(j,1:KSCAN,sband+1)
520 vmnrlbt(j,1:KSCAN,eband) = 0.50*vmnrlb(j,1:KSCAN,eband-1) &
521 + 0.50*vmnrlb(j,1:KSCAN,eband)
522 elseif ( (eband-sband+1) == 1 ) then
523 vmnrlbt(j,1:KSCAN,sband) = vmnrlb(j,1:KSCAN,sband)
524 vmnrlbt(j,1:KSCAN,eband) = vmnrlb(j,1:KSCAN,eband)
525 endif
526
527 ! output relative bias
528 DO j=1, tovs%nchan
529 jv = j
530 DO iband=1,JBAND
531 WRITE(12) jv, vmnrlbt(j,1:KSCAN,iband)
532 ENDDO
533 ENDDO
534
535 !----------------------
536 WRITE(6,'(1x,a30,2i4)') 'SMOOTHED SCAN COEFFICIENTS', jband,kscan
537 DO j=1,tovs%nchan
538 jv = j
539 DO iband=1, jband
540 WRITE(6,'(2i3,30f7.2)') jv, iband, vmnrlbt(j,1:KSCAN,iband)
541 ENDDO
542 ENDDO
543
544 end if ! end if smoothing
545
546 else ! regional
547 !---------------------
548 WRITE (6,397) (js,js=1,KSCAN)
549 397 FORMAT (/1X,'RELATIVE BIASES FOR EACH SCAN ANGLE'/4X,30I7)
550 DO j=1, tovs%nchan
551 jv = j
552 WRITE (6,399) jv, vmnrl(j,1:KSCAN)
553 ENDDO
554 399 FORMAT (1X,I3,30F7.2)
555
556 DO j=1, tovs%nchan
557 jv = j
558 WRITE(12) jv, vmnrl(j,1:KSCAN)
559 ENDDO
560
561 !----------------------
562 end if ! global
563
564 deallocate(tovs%tb)
565 deallocate(tovs%omb)
566 deallocate(tovs%bias)
567 deallocate(tovs%qc_flag)
568 deallocate(tovs%cloud_flag)
569 deallocate(tovs%pred)
570
571 CLOSE(UNIT=10)
572 CLOSE(UNIT=11)
573 CLOSE(UNIT=12)
574
575 END PROGRAM da_bias_scan