da_oi_stats_ssmi_tb.inc

References to this file elsewhere.
1 subroutine da_oi_stats_ssmi_tb (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    integer                          :: ntb19v,ntb19h,ntb22v,ntb37v,ntb37h, &
13                                        ntb85v,ntb85h
14    integer                          :: n
15    type (stats_ssmi_tb_type)        :: ssmi_tb
16 
17    ntb19v = 0
18    ntb19h = 0
19    ntb22v = 0
20    ntb37v = 0
21    ntb37h = 0
22    ntb85v = 0
23    ntb85h = 0
24 
25    ssmi_tb%maximum%tb19v = maxmin_type(missing_r, 0, 0)
26    ssmi_tb%maximum%tb19h = maxmin_type(missing_r, 0, 0)
27    ssmi_tb%maximum%tb22v = maxmin_type(missing_r, 0, 0)
28    ssmi_tb%maximum%tb37v = maxmin_type(missing_r, 0, 0)
29    ssmi_tb%maximum%tb37h = maxmin_type(missing_r, 0, 0)
30    ssmi_tb%maximum%tb85v = maxmin_type(missing_r, 0, 0)
31    ssmi_tb%maximum%tb85h = maxmin_type(missing_r, 0, 0)
32    ssmi_tb%minimum%tb19v = maxmin_type(-missing_r, 0, 0)
33    ssmi_tb%minimum%tb19h = maxmin_type(-missing_r, 0, 0)
34    ssmi_tb%minimum%tb22v = maxmin_type(-missing_r, 0, 0)
35    ssmi_tb%minimum%tb37v = maxmin_type(-missing_r, 0, 0)
36    ssmi_tb%minimum%tb37h = maxmin_type(-missing_r, 0, 0)
37    ssmi_tb%minimum%tb85v = maxmin_type(-missing_r, 0, 0)
38    ssmi_tb%minimum%tb85h = maxmin_type(-missing_r, 0, 0)
39    ssmi_tb%average = residual_ssmi_tb_type(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
40    ssmi_tb%rms_err = ssmi_tb%average
41 
42    if (oi%num_ssmi_tb .gt. 0) then
43       do n=1, oi%num_ssmi_tb
44 
45          if (oi%ssmi_tb(n)%loc%proc_domain) then
46 
47             call da_stats_calculate(oi%ssmi_tb(n)%loc%obs_global_index, &
48                                   0, oi%ssmi_tb(n)%tb19v%qc, & 
49                                   oi%ssmi_tb(n)%tb19v%inv, ntb19v, &
50                                   ssmi_tb%minimum%tb19v, ssmi_tb%maximum%tb19v,&
51                                   ssmi_tb%average%tb19v, ssmi_tb%rms_err%tb19v)
52             call da_stats_calculate(oi%ssmi_tb(n)%loc%obs_global_index, &
53                                   0, oi%ssmi_tb(n)%tb19h%qc, & 
54                                   oi%ssmi_tb(n)%tb19h%inv, ntb19h, &
55                                   ssmi_tb%minimum%tb19h, ssmi_tb%maximum%tb19h,&
56                                   ssmi_tb%average%tb19h, ssmi_tb%rms_err%tb19h)
57             call da_stats_calculate(oi%ssmi_tb(n)%loc%obs_global_index, &
58                                   0, oi%ssmi_tb(n)%tb22v%qc, & 
59                                   oi%ssmi_tb(n)%tb22v%inv, ntb22v, &
60                                   ssmi_tb%minimum%tb22v, ssmi_tb%maximum%tb22v,&
61                                   ssmi_tb%average%tb22v, ssmi_tb%rms_err%tb22v)
62             call da_stats_calculate(oi%ssmi_tb(n)%loc%obs_global_index, &
63                                   0, oi%ssmi_tb(n)%tb37v%qc, & 
64                                   oi%ssmi_tb(n)%tb37v%inv, ntb37v, &
65                                   ssmi_tb%minimum%tb37v, ssmi_tb%maximum%tb37v,&
66                                   ssmi_tb%average%tb37v, ssmi_tb%rms_err%tb37v)
67             call da_stats_calculate(oi%ssmi_tb(n)%loc%obs_global_index, &
68                                   0, oi%ssmi_tb(n)%tb37h%qc, & 
69                                   oi%ssmi_tb(n)%tb37h%inv, ntb37h, &
70                                   ssmi_tb%minimum%tb37h, ssmi_tb%maximum%tb37h,&
71                                   ssmi_tb%average%tb37h, ssmi_tb%rms_err%tb37h)
72             call da_stats_calculate(oi%ssmi_tb(n)%loc%obs_global_index, &
73                                   0, oi%ssmi_tb(n)%tb85v%qc, & 
74                                   oi%ssmi_tb(n)%tb85v%inv, ntb85v, &
75                                   ssmi_tb%minimum%tb85v, ssmi_tb%maximum%tb85v,&
76                                   ssmi_tb%average%tb85v, ssmi_tb%rms_err%tb85v)
77             call da_stats_calculate(oi%ssmi_tb(n)%loc%obs_global_index, &
78                                   0, oi%ssmi_tb(n)%tb85h%qc, & 
79                                   oi%ssmi_tb(n)%tb85h%inv, ntb85h, &
80                                   ssmi_tb%minimum%tb85h, ssmi_tb%maximum%tb85h,&
81                                   ssmi_tb%average%tb85h, ssmi_tb%rms_err%tb85h)
82 
83          end if    ! end if (oi%ssmi_tb(n)%loc%proc_domain)
84       end do
85    end if
86 
87    ! Do inter-processor communication to gather statistics.
88    call da_proc_sum_int(ntb19v)
89    call da_proc_sum_int(ntb19h)
90    call da_proc_sum_int(ntb22v)
91    call da_proc_sum_int(ntb37v)
92    call da_proc_sum_int(ntb37h)
93    call da_proc_sum_int(ntb85v)
94    call da_proc_sum_int(ntb85h)
95 
96    call da_proc_stats_combine(ssmi_tb%average%tb19v, ssmi_tb%rms_err%tb19v, &
97               ssmi_tb%minimum%tb19v%value, ssmi_tb%maximum%tb19v%value, &
98               ssmi_tb%minimum%tb19v%n, ssmi_tb%maximum%tb19v%n, &
99               ssmi_tb%minimum%tb19v%l, ssmi_tb%maximum%tb19v%l)
100 
101    call da_proc_stats_combine(ssmi_tb%average%tb19h, ssmi_tb%rms_err%tb19h, &
102               ssmi_tb%minimum%tb19h%value, ssmi_tb%maximum%tb19h%value, &
103               ssmi_tb%minimum%tb19h%n, ssmi_tb%maximum%tb19h%n, &
104               ssmi_tb%minimum%tb19h%l, ssmi_tb%maximum%tb19h%l)
105 
106    call da_proc_stats_combine(ssmi_tb%average%tb22v, ssmi_tb%rms_err%tb22v, &
107               ssmi_tb%minimum%tb22v%value, ssmi_tb%maximum%tb22v%value, &
108               ssmi_tb%minimum%tb22v%n, ssmi_tb%maximum%tb22v%n, &
109               ssmi_tb%minimum%tb22v%l, ssmi_tb%maximum%tb22v%l)
110 
111    call da_proc_stats_combine(ssmi_tb%average%tb37v, ssmi_tb%rms_err%tb37v, &
112               ssmi_tb%minimum%tb37v%value, ssmi_tb%maximum%tb37v%value, &
113               ssmi_tb%minimum%tb37v%n, ssmi_tb%maximum%tb37v%n, &
114               ssmi_tb%minimum%tb37v%l, ssmi_tb%maximum%tb37v%l)
115 
116    call da_proc_stats_combine(ssmi_tb%average%tb37h, ssmi_tb%rms_err%tb37h, &
117               ssmi_tb%minimum%tb37h%value, ssmi_tb%maximum%tb37h%value, &
118               ssmi_tb%minimum%tb37h%n, ssmi_tb%maximum%tb37h%n, &
119               ssmi_tb%minimum%tb37h%l, ssmi_tb%maximum%tb37h%l)
120 
121    call da_proc_stats_combine(ssmi_tb%average%tb85v, ssmi_tb%rms_err%tb85v, &
122               ssmi_tb%minimum%tb85v%value, ssmi_tb%maximum%tb85v%value, &
123               ssmi_tb%minimum%tb85v%n, ssmi_tb%maximum%tb85v%n, &
124               ssmi_tb%minimum%tb85v%l, ssmi_tb%maximum%tb85v%l)
125 
126    call da_proc_stats_combine(ssmi_tb%average%tb85h, ssmi_tb%rms_err%tb85h, &
127               ssmi_tb%minimum%tb85h%value, ssmi_tb%maximum%tb85h%value, &
128               ssmi_tb%minimum%tb85h%n, ssmi_tb%maximum%tb85h%n, &
129               ssmi_tb%minimum%tb85h%l, ssmi_tb%maximum%tb85h%l)
130 
131    if (rootproc) then
132       if (ntb19v > 0) then
133          write(unit=stats_unit, fmt='(/a/)') ' Diagnostics of OI for ssmi_tb'
134          write(unit=stats_unit, fmt='(a/)') '   var           tb19v(m/s)     n'
135          write(unit=stats_unit, fmt='(a,i14)') '  Number: ', ntb19v
136          write(unit=stats_unit, fmt='(a, f12.4,i9)') &
137                          ' Minimum(n): ', ssmi_tb%minimum%tb19v%value, &
138                                           ssmi_tb%minimum%tb19v%n    , &
139                          ' Maximum(n): ', ssmi_tb%maximum%tb19v%value, &
140                                           ssmi_tb%maximum%tb19v%n
141          write(unit=stats_unit, fmt='(a, f12.4,5x)') &
142                        ' Average   : ', ssmi_tb%average%tb19v/real(ntb19v), &
143                        '    RMSE   : ', sqrt(ssmi_tb%rms_err%tb19v/real(ntb19v))
144       end if
145 
146       if (ntb19h > 0) then
147          write(unit=stats_unit, fmt='(/a/)') ' Diagnostics of OI for ssmi_tb'
148          write(unit=stats_unit, fmt='(a/)') '   var           tb19h(m/s)     n'
149          write(unit=stats_unit, fmt='(a,i14)') '  Number: ', ntb19h
150          write(unit=stats_unit, fmt='(a, f12.4,i9)') &
151                          ' Minimum(n): ', ssmi_tb%minimum%tb19h%value, &
152                                           ssmi_tb%minimum%tb19h%n    , &
153                          ' Maximum(n): ', ssmi_tb%maximum%tb19h%value, &
154                                           ssmi_tb%maximum%tb19h%n
155          write(unit=stats_unit, fmt='(a, f12.4,5x)') &
156                        ' Average   : ', ssmi_tb%average%tb19h/real(ntb19h), &
157                        '    RMSE   : ', sqrt(ssmi_tb%rms_err%tb19h/real(ntb19h))
158       end if
159 
160       if (ntb22v > 0) then
161          write(unit=stats_unit, fmt='(/a/)') ' Diagnostics of OI for ssmi_tb'
162          write(unit=stats_unit, fmt='(a/)') '   var           tb22v(m/s)     n'
163          write(unit=stats_unit, fmt='(a,i14)') '  Number: ', ntb22v
164          write(unit=stats_unit, fmt='(a, f12.4,i9)') &
165                          ' Minimum(n): ', ssmi_tb%minimum%tb22v%value, &
166                                           ssmi_tb%minimum%tb22v%n    , &
167                          ' Maximum(n): ', ssmi_tb%maximum%tb22v%value, &
168                                           ssmi_tb%maximum%tb22v%n
169           write(unit=stats_unit, fmt='(a, f12.4,5x)') &
170                        ' Average   : ', ssmi_tb%average%tb22v/real(ntb22v), &
171                        '    RMSE   : ', sqrt(ssmi_tb%rms_err%tb22v/real(ntb22v))
172       end if
173 
174       if (ntb37v > 0) then
175          write(unit=stats_unit, fmt='(/a/)') ' Diagnostics of OI for ssmi_tb'
176          write(unit=stats_unit, fmt='(a/)') '   var           tb37v(m/s)     n'
177          write(unit=stats_unit, fmt='(a,i14)') '  Number: ', ntb37v
178          write(unit=stats_unit, fmt='(a, f12.4,i9)') &
179                          ' Minimum(n): ', ssmi_tb%minimum%tb37v%value, &
180                                           ssmi_tb%minimum%tb37v%n    , &
181                          ' Maximum(n): ', ssmi_tb%maximum%tb37v%value, &
182                                           ssmi_tb%maximum%tb37v%n
183          write(unit=stats_unit, fmt='(a, f12.4,5x)') &
184                        ' Average   : ', ssmi_tb%average%tb37v/real(ntb37v), &
185                        '    RMSE   : ', sqrt(ssmi_tb%rms_err%tb37v/real(ntb37v))
186       end if
187 
188       if (ntb37h > 0) then
189          write(unit=stats_unit, fmt='(/a/)') ' Diagnostics of OI for ssmi_tb'
190          write(unit=stats_unit, fmt='(a/)') '   var           tb37h(m/s)     n'
191          write(unit=stats_unit, fmt='(a,i14)') '  Number: ', ntb37h
192          write(unit=stats_unit, fmt='(a, f12.4,i9)') &
193                          ' Minimum(n): ', ssmi_tb%minimum%tb37h%value, &
194                                           ssmi_tb%minimum%tb37h%n    , &
195                          ' Maximum(n): ', ssmi_tb%maximum%tb37h%value, &
196                                          ssmi_tb%maximum%tb37h%n
197          write(unit=stats_unit, fmt='(a, f12.4,5x)') &
198                        ' Average   : ', ssmi_tb%average%tb37h/real(ntb37h), &
199                        '    RMSE   : ', sqrt(ssmi_tb%rms_err%tb37h/real(ntb37h))
200       end if
201 
202       if (ntb85v > 0) then
203          write(unit=stats_unit, fmt='(/a/)') ' Diagnostics of OI for ssmi_tb'
204          write(unit=stats_unit, fmt='(a/)') '   var           tb85v(m/s)     n'
205          write(unit=stats_unit, fmt='(a,i14)') '  Number: ', ntb85v
206          write(unit=stats_unit, fmt='(a, f12.4,i9)') &
207                          ' Minimum(n): ', ssmi_tb%minimum%tb85v%value, &
208                                           ssmi_tb%minimum%tb85v%n    , &
209                          ' Maximum(n): ', ssmi_tb%maximum%tb85v%value, &
210                                           ssmi_tb%maximum%tb85v%n
211          write(unit=stats_unit, fmt='(a, f12.4,5x)') &
212                        ' Average   : ', ssmi_tb%average%tb85v/real(ntb85v), &
213                        '    RMSE   : ', sqrt(ssmi_tb%rms_err%tb85v/real(ntb85v))
214       end if
215 
216       if (ntb85h > 0) then
217          write(unit=stats_unit, fmt='(/a/)') ' Diagnostics of OI for ssmi_tb'
218          write(unit=stats_unit, fmt='(a/)') '   var           tb85h(m/s)     n'
219          write(unit=stats_unit, fmt='(a,i14)') '  Number: ', ntb85h
220          write(unit=stats_unit, fmt='(a, f12.4,i9)') &
221                          ' Minimum(n): ', ssmi_tb%minimum%tb85h%value, &
222                                           ssmi_tb%minimum%tb85h%n    , &
223                          ' Maximum(n): ', ssmi_tb%maximum%tb85h%value, &
224                                           ssmi_tb%maximum%tb85h%n
225          write(unit=stats_unit, fmt='(a, f12.4,5x)') &
226                        ' Average   : ', ssmi_tb%average%tb85h/real(ntb85h), &
227                        '    RMSE   : ', sqrt(ssmi_tb%rms_err%tb85h/real(ntb85h))
228       end if
229    end if
230 
231 end subroutine da_oi_stats_ssmi_tb
232 
233