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