Merge remote-tracking branch 'origin/release-v4.5.2'
[WRF.git] / var / da / da_tamdar / da_check_max_iv_tamdar_sfc.inc
blobd8d5ad624fe8c29d0d85d7a6df38ae1cfbd5d971
1 subroutine da_check_max_iv_tamdar_sfc(iv,ob, it, num_qcstat_conv)                                 
3    !-----------------------------------------------------------------------
4    ! Purpose: TBD
5    ! Update:
6    !    Removed Outerloop check as it is done in da_get_innov
7    !    Author: Syed RH Rizvi,  MMM/NESL/NCAR,  Date: 07/12/2009
8    !-----------------------------------------------------------------------
10    implicit none
12    type(iv_type), intent(inout) :: iv
13    integer,       intent(in)    :: it      ! Outer iteration
14    integer,       intent(inout) :: num_qcstat_conv(:,:,:,:)
15    type(y_type),  intent(in)    :: ob      ! Observation structure.
18    logical :: failed,failed1,failed2
19    integer :: n
21    if (trace_use_dull) call da_trace_entry("da_check_max_iv_tamdar_sfc")
24    !---------------------------------------------------------------------------
25    ! [1.0] Perform maximum innovation vector check:
26    !---------------------------------------------------------------------------
28    do n=iv%info(tamdar_sfc)%n1,iv%info(tamdar_sfc)%n2
29          if(.not. qc_rej_both)then
30             if(wind_sd_tamdar)then
31                failed=.false.
32                if( iv%tamdar_sfc(n)%u%qc >= obs_qc_pointer ) then
33                    call da_max_error_qc (it,iv%info(tamdar_sfc), n, iv%tamdar_sfc(n)%u, max_error_spd,failed)
34                    if( iv%info(tamdar_sfc)%proc_domain(1,n) ) then
35                        num_qcstat_conv(1,tamdar_sfc,1,1) = num_qcstat_conv(1,tamdar_sfc,1,1) + 1
36                        if(failed) then
37                           num_qcstat_conv(2,tamdar_sfc,1,1) = num_qcstat_conv(2,tamdar_sfc,1,1) + 1
38                           if ( write_rej_obs_conv ) then
39                           write(qcstat_conv_unit,'(2x,a10,2x,a4,3f12.2)')&
40                           'tamdar_sfc',ob_vars(1),iv%info(tamdar_sfc)%lat(1,n),iv%info(tamdar_sfc)%lon(1,n),0.01*ob%tamdar_sfc(n)%p
41                           end if
42                        end if
43                    end if
44                end if
46                failed=.false.
47                if( iv%tamdar_sfc(n)%v%qc >= obs_qc_pointer ) then
48                    call da_max_error_qc (it,iv%info(tamdar_sfc), n, iv%tamdar_sfc(n)%v, max_error_dir,failed)
49                    if( iv%info(tamdar_sfc)%proc_domain(1,n) ) then
50                        num_qcstat_conv(1,tamdar_sfc,2,1) = num_qcstat_conv(1,tamdar_sfc,2,1) + 1
51                        if(failed)then
52                           num_qcstat_conv(2,tamdar_sfc,2,1) = num_qcstat_conv(2,tamdar_sfc,2,1) + 1
53                           if ( write_rej_obs_conv ) then
54                           write(qcstat_conv_unit,'(2x,a10,2x,a4,3f12.2)')&
55                           'tamdar_sfc',ob_vars(2),iv%info(tamdar_sfc)%lat(1,n),iv%info(tamdar_sfc)%lon(1,n),0.01*ob%tamdar_sfc(n)%p
56                           end if
57                        end if
58                    end if
59                end if
60             else
61                failed=.false.
62                if( iv%tamdar_sfc(n)%u%qc >= obs_qc_pointer ) then
63                    call da_max_error_qc (it,iv%info(tamdar_sfc), n, iv%tamdar_sfc(n)%u, max_error_uv,failed)
64                    if( iv%info(tamdar_sfc)%proc_domain(1,n) ) then
65                        num_qcstat_conv(1,tamdar_sfc,1,1) = num_qcstat_conv(1,tamdar_sfc,1,1) + 1
66                        if(failed) then
67                           num_qcstat_conv(2,tamdar_sfc,1,1) = num_qcstat_conv(2,tamdar_sfc,1,1) + 1
68                           if ( write_rej_obs_conv ) then
69                           write(qcstat_conv_unit,'(2x,a10,2x,a4,3f12.2)')&
70                           'tamdar_sfc',ob_vars(1),iv%info(tamdar_sfc)%lat(1,n),iv%info(tamdar_sfc)%lon(1,n),0.01*ob%tamdar_sfc(n)%p
71                           end if
72                        end if
73                    end if
74                end if
76                failed=.false.
77                if( iv%tamdar_sfc(n)%v%qc >= obs_qc_pointer ) then
78                    call da_max_error_qc (it,iv%info(tamdar_sfc), n, iv%tamdar_sfc(n)%v, max_error_uv,failed)
79                    if( iv%info(tamdar_sfc)%proc_domain(1,n) ) then
80                        num_qcstat_conv(1,tamdar_sfc,2,1) = num_qcstat_conv(1,tamdar_sfc,2,1) + 1
81                        if(failed)then
82                           num_qcstat_conv(2,tamdar_sfc,2,1) = num_qcstat_conv(2,tamdar_sfc,2,1) + 1
83                           if ( write_rej_obs_conv ) then
84                           write(qcstat_conv_unit,'(2x,a10,2x,a4,3f12.2)')&
85                           'tamdar_sfc',ob_vars(2),iv%info(tamdar_sfc)%lat(1,n),iv%info(tamdar_sfc)%lon(1,n),0.01*ob%tamdar_sfc(n)%p
86                           end if
87                        end if
88                    end if
89                end if
90             end if
92             if(wind_sd_tamdar)then
93                if(iv%tamdar_sfc(n)%u%qc == fails_error_max .or.  abs(iv%tamdar_sfc(n)%u%inv) >= max_omb_spd) then
94                   iv%tamdar_sfc(n)%u%qc = fails_error_max
95                   iv%tamdar_sfc(n)%u%inv = 0.0
96                endif
97                if(iv%tamdar_sfc(n)%v%qc == fails_error_max .or.  abs(iv%tamdar_sfc(n)%v%inv) >= max_omb_dir) then
98                   iv%tamdar_sfc(n)%v%qc = fails_error_max
99                   iv%tamdar_sfc(n)%v%inv = 0.0
100                endif
101             endif
102          else
103             failed1=.false.
104             failed2=.false.
106             if( iv%tamdar_sfc(n)%v%qc >= obs_qc_pointer .or. iv%tamdar_sfc(n)%u%qc >= obs_qc_pointer )  then
107                 if(wind_sd_tamdar)then
108                    call da_max_error_qc (it,iv%info(tamdar_sfc), n, iv%tamdar_sfc(n)%u, max_error_spd,failed1)
109                    call da_max_error_qc (it,iv%info(tamdar_sfc), n, iv%tamdar_sfc(n)%v, max_error_dir,failed2)
110                 else
111                    call da_max_error_qc (it,iv%info(tamdar_sfc), n, iv%tamdar_sfc(n)%u, max_error_uv,failed1)
112                    call da_max_error_qc (it,iv%info(tamdar_sfc), n, iv%tamdar_sfc(n)%v, max_error_uv,failed2)
113                 endif
114             endif
116             if( iv%info(tamdar_sfc)%proc_domain(1,n) ) then
117                 num_qcstat_conv(1,tamdar_sfc,1,1) = num_qcstat_conv(1,tamdar_sfc,1,1) + 1
118                 num_qcstat_conv(1,tamdar_sfc,2,1) = num_qcstat_conv(1,tamdar_sfc,2,1) + 1
120                 if(failed1 .or. failed2) then
121                    num_qcstat_conv(2,tamdar_sfc,1,1) = num_qcstat_conv(2,tamdar_sfc,1,1) + 1
122                    if ( write_rej_obs_conv ) then
123                    write(qcstat_conv_unit,'(2x,a10,2x,a4,3f12.2)')&
124                          'tamdar_sfc',ob_vars(1),iv%info(tamdar_sfc)%lat(1,n),iv%info(tamdar_sfc)%lon(1,n),0.01*ob%tamdar_sfc(n)%p
125                    end if
126                    num_qcstat_conv(2,tamdar_sfc,2,1) = num_qcstat_conv(2,tamdar_sfc,2,1) + 1
127                    if ( write_rej_obs_conv ) then
128                    write(qcstat_conv_unit,'(2x,a10,2x,a4,3f12.2)')&
129                          'tamdar_sfc',ob_vars(2),iv%info(tamdar_sfc)%lat(1,n),iv%info(tamdar_sfc)%lon(1,n),0.01*ob%tamdar_sfc(n)%p
130                    end if
131                 endif
132             endif
134             if(wind_sd_tamdar)then
135                if(iv%tamdar_sfc(n)%u%qc == fails_error_max .or. iv%tamdar_sfc(n)%v%qc == fails_error_max .or. &
136                   abs(iv%tamdar_sfc(n)%v%inv) >= max_omb_dir .or. abs(iv%tamdar_sfc(n)%u%inv) >= max_omb_spd )then
137                   iv%tamdar_sfc(n)%u%qc = fails_error_max
138                   iv%tamdar_sfc(n)%v%qc = fails_error_max
139                   iv%tamdar_sfc(n)%u%inv = 0.0
140                   iv%tamdar_sfc(n)%v%inv = 0.0
141                endif
142             else
143                if(iv%tamdar_sfc(n)%u%qc == fails_error_max .or. iv%tamdar_sfc(n)%v%qc == fails_error_max ) then
144                   iv%tamdar_sfc(n)%u%qc = fails_error_max
145                   iv%tamdar_sfc(n)%v%qc = fails_error_max
146                   iv%tamdar_sfc(n)%u%inv = 0.0
147                   iv%tamdar_sfc(n)%v%inv = 0.0
148                endif
149             endif
150          endif
152       failed=.false.
153       if( iv%tamdar_sfc(n)%t%qc >= obs_qc_pointer )  then 
154       call da_max_error_qc (it, iv%info(tamdar_sfc), n, iv%tamdar_sfc(n)%t, max_error_t , failed)
155       if( iv%info(tamdar_sfc)%proc_domain(1,n) ) then
156       num_qcstat_conv(1,tamdar_sfc,3,1)= num_qcstat_conv(1,tamdar_sfc,3,1) + 1
157       if(failed) then
158       num_qcstat_conv(2,tamdar_sfc,3,1)= num_qcstat_conv(2,tamdar_sfc,3,1) + 1
159       if ( write_rej_obs_conv ) then
160       write(qcstat_conv_unit,'(2x,a10,2x,a4,3f12.2)')&
161            'tamdar_sfc',ob_vars(3),iv%info(tamdar_sfc)%lat(1,n),iv%info(tamdar_sfc)%lon(1,n),0.01*ob%tamdar_sfc(n)%p
162       end if
163       end if
164       end if
165       end if
167       failed=.false.
168       if( iv%tamdar_sfc(n)%p%qc >= obs_qc_pointer ) then
169       call da_max_error_qc (it, iv%info(tamdar_sfc), n, iv%tamdar_sfc(n)%p, max_error_p , failed)         
170       if( iv%info(tamdar_sfc)%proc_domain(1,n) ) then
171       num_qcstat_conv(1,tamdar_sfc,5,1)= num_qcstat_conv(1,tamdar_sfc,5,1) + 1
172       if(failed) then
173       num_qcstat_conv(2,tamdar_sfc,5,1)= num_qcstat_conv(2,tamdar_sfc,5,1) + 1
174       if ( write_rej_obs_conv ) then
175       write(qcstat_conv_unit,'(2x,a10,2x,a4,3f12.2)')&
176            'tamdar_sfc',ob_vars(5),iv%info(tamdar_sfc)%lat(1,n),iv%info(tamdar_sfc)%lon(1,n),0.01*ob%tamdar_sfc(n)%p
177       end if
178       end if
179       end if
180       end if
182       failed=.false.
183       if( iv%tamdar_sfc(n)%q%qc >= obs_qc_pointer ) then
184        if( iv%tamdar_sfc(n)%t%qc == fails_error_max .or. iv%tamdar_sfc(n)%p%qc == fails_error_max) then
185        failed=.true.
186        iv%tamdar_sfc(n)%q%qc  = fails_error_max
187        iv%tamdar_sfc(n)%q%inv = 0.0
188        else
189        call da_max_error_qc (it, iv%info(tamdar_sfc), n, iv%tamdar_sfc(n)%q, max_error_q , failed)
190        endif
191       if( iv%info(tamdar_sfc)%proc_domain(1,n) ) then
192       num_qcstat_conv(1,tamdar_sfc,4,1)= num_qcstat_conv(1,tamdar_sfc,4,1) + 1
193       if(failed) then
194       num_qcstat_conv(2,tamdar_sfc,4,1)= num_qcstat_conv(2,tamdar_sfc,4,1) + 1
195       if ( write_rej_obs_conv ) then
196       write(qcstat_conv_unit,'(2x,a10,2x,a4,3f12.2)')&
197            'tamdar_sfc',ob_vars(4),iv%info(tamdar_sfc)%lat(1,n),iv%info(tamdar_sfc)%lon(1,n),0.01*ob%tamdar_sfc(n)%p
198       end if
199       end if
200       end if
201       end if
203    end do
205    if (trace_use_dull) call da_trace_exit("da_check_max_iv_tamdar_sfc")
207 end subroutine da_check_max_iv_tamdar_sfc