da_oi_stats_radar.inc
References to this file elsewhere.
1 subroutine da_oi_stats_radar (stats_unit, iv)
2
3 !-----------------------------------------------------------------------
4 ! Purpose: TBD
5 !-----------------------------------------------------------------------
6
7 implicit none
8
9 integer, intent (in) :: stats_unit ! Output unit for stats.
10 type (iv_type), intent (in) :: iv ! OI
11
12 type (stats_radar_type) :: stats
13 integer :: nrv, nrf
14 integer :: n, k
15
16 if (trace_use) call da_trace_entry("da_oi_stats_radar")
17
18 nrv = 0
19 nrf = 0
20
21 stats%maximum%rv = maxmin_type(missing_r, 0, 0)
22 stats%minimum%rv = maxmin_type(-missing_r, 0, 0)
23 stats%maximum%rf = maxmin_type(missing_r, 0, 0)
24 stats%minimum%rf = maxmin_type(-missing_r, 0, 0)
25
26 stats%average = residual_radar1_type(0.0, 0.0)
27 stats%rms_err = stats%average
28
29 do n=1, iv%info(radar)%nlocal
30 if (iv%info(radar)%proc_domain(1,n)) then
31 do k=1, iv%info(radar)%levels(n)
32 if (use_radar_rv) then
33 call da_stats_calculate(iv%info(radar)%obs_global_index(n), &
34 k, iv%radar(n)%rv(k)%qc, &
35 iv%radar(n)%rv(k)%inv, nrv, &
36 stats%minimum%rv, stats%maximum%rv, &
37 stats%average%rv, stats%rms_err%rv)
38 end if
39
40 if (use_radar_rf) then
41 call da_stats_calculate(iv%info(radar)%obs_global_index(n), &
42 k, iv%radar(n)%rf(k)%qc, &
43 iv%radar(n)%rf(k)%inv, nrf, &
44 stats%minimum%rf, stats%maximum%rf, &
45 stats%average%rf, stats%rms_err%rf)
46 end if
47 end do
48 end if
49 end do
50
51 ! Do inter-processor communication to gather statistics.
52
53 if (use_radar_rv) then
54 call da_proc_sum_int(nrv)
55 call da_proc_stats_combine(stats%average%rv, stats%rms_err%rv, &
56 stats%minimum%rv%value, stats%maximum%rv%value, &
57 stats%minimum%rv%n, stats%maximum%rv%n, &
58 stats%minimum%rv%l, stats%maximum%rv%l)
59 end if
60
61 if (use_radar_rf) then
62 call da_proc_sum_int(nrf)
63 call da_proc_stats_combine(stats%average%rf, stats%rms_err%rf, &
64 stats%minimum%rf%value, stats%maximum%rf%value, &
65 stats%minimum%rf%n, stats%maximum%rf%n, &
66 stats%minimum%rf%l, stats%maximum%rf%l)
67 end if
68
69 if (rootproc) then
70 if (nrv /= 0 .or. nrf /= 0) then
71 write(unit=stats_unit, fmt='(/a/)') ' Diagnostics of OI for radar'
72 call da_print_stats_radar(stats_unit, nrv, nrf, stats)
73 end if
74 end if
75
76 if (trace_use) call da_trace_exit("da_oi_stats_radar")
77
78 end subroutine da_oi_stats_radar
79
80