da_ao_stats_airsr.inc

References to this file elsewhere.
1 subroutine da_ao_stats_airsr (stats_unit, oi, re)
2 
3    !-------------------------------------------------------------------------
4    ! Purpose: Compute analysis increment at AIRS retrieval locations
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    type  (y_type), intent (in)      :: re            ! A - O
12 
13    type (stats_airsr_type)          :: airsr
14    integer                          :: nt, nq
15    integer                          :: n, k
16 
17    nt = 0
18    nq = 0
19    num_airsr_tot = 0
20    airsr%maximum%t = maxmin_type (missing_r, 0, 0)
21    airsr%maximum%q = maxmin_type (missing_r, 0, 0)
22    airsr%minimum%t = maxmin_type(-missing_r, 0, 0)
23    airsr%minimum%q = maxmin_type(-missing_r, 0, 0)
24    airsr%average = residual_airsr1_type(0.0, 0.0)
25    airsr%rms_err = airsr%average
26 
27    if (oi%num_airsr > 0) then
28       do n=1, oi%num_airsr
29          if (oi%airsr(n)%loc%proc_domain) then
30             do k=1, oi%airsr(n)%info%levels
31                call da_stats_calculate (n, k, oi%airsr(n)%t(k)%qc, & 
32                                re%airsr(n)%t(k), nt, &
33                                airsr%minimum%t, airsr%maximum%t, &
34                                airsr%average%t, airsr%rms_err%t)
35                call da_stats_calculate (n, k, oi%airsr(n)%q(k)%qc, & 
36                                re%airsr(n)%q(k), nq, &
37                                airsr%minimum%q, airsr%maximum%q, &
38                                airsr%average%q, airsr%rms_err%q)
39             end do
40          end if    ! end if (oi%airsr(n)%loc%proc_domain)
41       end do
42    end if
43 
44    ! Do inter-processor communication to gather statistics.
45    call da_proc_sum_int (nt)
46    call da_proc_sum_int (nq)
47    num_airsr_tot = nt + nq
48 
49    call da_proc_stats_combine(airsr%average%t, airsr%rms_err%t, &
50                            airsr%minimum%t%value, airsr%maximum%t%value, &
51                            airsr%minimum%t%n, airsr%maximum%t%n, &
52                            airsr%minimum%t%l, airsr%maximum%t%l)
53    call da_proc_stats_combine(airsr%average%q, airsr%rms_err%q, &
54                            airsr%minimum%q%value, airsr%maximum%q%value, &
55                            airsr%minimum%q%n, airsr%maximum%q%n, &
56                            airsr%minimum%q%l, airsr%maximum%q%l)
57 
58    if (rootproc) then
59       if (nt /= 0 .or. nq /= 0) then
60          write(unit=stats_unit, fmt='(/a/)') ' Diagnostics of AO for airs retrievals'
61          call da_print_stats_airsr(stats_unit, nt, nq, airsr)
62       end if
63    end if
64 
65 end subroutine da_ao_stats_airsr
66 
67