da_oi_stats_airep.inc

References to this file elsewhere.
1 subroutine da_oi_stats_airep (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_airep_type)                :: Airep
13    integer                          :: nu, nv, nt
14    integer                          :: n, k
15 
16    nu = 0
17    nv = 0
18    nt = 0
19 
20    Airep%maximum%u = maxmin_type(missing_r, 0, 0)
21    Airep%maximum%v = maxmin_type(missing_r, 0, 0)
22    Airep%maximum%t = maxmin_type(missing_r, 0, 0)
23    Airep%minimum%u = maxmin_type(-missing_r, 0, 0)
24    Airep%minimum%v = maxmin_type(-missing_r, 0, 0)
25    Airep%minimum%t = maxmin_type(-missing_r, 0, 0)
26    Airep%average = residual_airep1_type(0.0, 0.0, 0.0)
27    Airep%rms_err = Airep%average
28 
29    if (oi%num_Airep > 0) then
30       do n=1, oi%num_Airep
31          if (oi%airep(n)%loc%proc_domain) then
32             do k=1, oi%Airep(n)%info%levels
33                call da_stats_calculate(oi%airep(n)%loc%obs_global_index, &
34                                k, oi%airep(n)%u(k)%qc, &
35                                oi%airep(n)%u(k)%inv, nu, &
36                                airep%minimum%u, airep%maximum%u, &
37                                airep%average%u, airep%rms_err%u)
38                call da_stats_calculate(oi%airep(n)%loc%obs_global_index, &
39                                k, oi%airep(n)%v(k)%qc, &
40                                oi%airep(n)%v(k)%inv, nv, &
41                                airep%minimum%v, airep%maximum%v, &
42                                airep%average%v, airep%rms_err%v)
43                call da_stats_calculate(oi%airep(n)%loc%obs_global_index, &
44                                k, oi%Airep(n)%t(k)%qc, &
45                                oi%Airep(n)%t(k)%inv, nt, &
46                                Airep%minimum%t, Airep%maximum%t, &
47                                Airep%average%t, Airep%rms_err%t)
48             end do
49          end if    ! end if (oi%airep(n)%loc%proc_domain)
50       end do
51    end if
52 
53    ! Do inter-processor communication to gather statistics.
54    call da_proc_sum_int(nu)
55    call da_proc_sum_int(nv)
56    call da_proc_sum_int(nt)
57 
58    call da_proc_stats_combine(Airep%average%u, Airep%rms_err%u, &
59                            Airep%minimum%u%value, Airep%maximum%u%value, &
60                            Airep%minimum%u%n, Airep%maximum%u%n, &
61                            Airep%minimum%u%l, Airep%maximum%u%l)
62    call da_proc_stats_combine(Airep%average%v, Airep%rms_err%v, &
63                            Airep%minimum%v%value, Airep%maximum%v%value, &
64                            Airep%minimum%v%n, Airep%maximum%v%n, &
65                            Airep%minimum%v%l, Airep%maximum%v%l)
66    call da_proc_stats_combine(Airep%average%t, Airep%rms_err%t, &
67                            Airep%minimum%t%value, Airep%maximum%t%value, &
68                            Airep%minimum%t%n, Airep%maximum%t%n, &
69                            Airep%minimum%t%l, Airep%maximum%t%l)
70 
71    if (rootproc) then
72       if (nu /= 0 .or. nv /= 0 .or. nt /= 0) then
73          write(unit=stats_unit, fmt='(/a/)') ' Diagnostics of OI for airep'
74          call da_print_stats_airep(stats_unit, nu, nv, nt, Airep)
75       end if
76    end if
77 
78  end subroutine da_oi_stats_airep
79 
80