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