da_oi_stats_radar.inc

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