1 subroutine da_check_max_iv_sonde_sfc(iv,ob, it, num_qcstat_conv)
3 !-----------------------------------------------------------------------
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 !-----------------------------------------------------------------------
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
21 if (trace_use_dull) call da_trace_entry("da_check_max_iv_sonde_sfc")
24 !---------------------------------------------------------------------------
25 ! [1.0] Perform maximum innovation vector check:
26 !---------------------------------------------------------------------------
28 do n=iv%info(sonde_sfc)%n1,iv%info(sonde_sfc)%n2
29 if(.not. qc_rej_both)then
32 if( iv%sonde_sfc(n)%u%qc >= obs_qc_pointer ) then
33 call da_max_error_qc (it,iv%info(sonde_sfc), n, iv%sonde_sfc(n)%u, max_error_spd,failed)
34 if( iv%info(sonde_sfc)%proc_domain(1,n) ) then
35 num_qcstat_conv(1,sonde_sfc,1,1) = num_qcstat_conv(1,sonde_sfc,1,1) + 1
37 num_qcstat_conv(2,sonde_sfc,1,1) = num_qcstat_conv(2,sonde_sfc,1,1) + 1
38 if ( write_rej_obs_conv ) then
39 write(qcstat_conv_unit,'(2x,a10,2x,a4,3f12.2)')&
40 'sonde_sfc',ob_vars(1),iv%info(sonde_sfc)%lat(1,n),iv%info(sonde_sfc)%lon(1,n),0.01*ob%sonde_sfc(n)%p
47 if( iv%sonde_sfc(n)%v%qc >= obs_qc_pointer ) then
48 call da_max_error_qc (it,iv%info(sonde_sfc), n, iv%sonde_sfc(n)%v, max_error_dir,failed)
49 if( iv%info(sonde_sfc)%proc_domain(1,n) ) then
50 num_qcstat_conv(1,sonde_sfc,2,1) = num_qcstat_conv(1,sonde_sfc,2,1) + 1
52 num_qcstat_conv(2,sonde_sfc,2,1) = num_qcstat_conv(2,sonde_sfc,2,1) + 1
53 if ( write_rej_obs_conv ) then
54 write(qcstat_conv_unit,'(2x,a10,2x,a4,3f12.2)')&
55 'sonde_sfc',ob_vars(2),iv%info(sonde_sfc)%lat(1,n),iv%info(sonde_sfc)%lon(1,n),0.01*ob%sonde_sfc(n)%p
62 if( iv%sonde_sfc(n)%u%qc >= obs_qc_pointer ) then
63 call da_max_error_qc (it,iv%info(sonde_sfc), n, iv%sonde_sfc(n)%u, max_error_uv,failed)
64 if( iv%info(sonde_sfc)%proc_domain(1,n) ) then
65 num_qcstat_conv(1,sonde_sfc,1,1) = num_qcstat_conv(1,sonde_sfc,1,1) + 1
67 num_qcstat_conv(2,sonde_sfc,1,1) = num_qcstat_conv(2,sonde_sfc,1,1) + 1
68 if ( write_rej_obs_conv ) then
69 write(qcstat_conv_unit,'(2x,a10,2x,a4,3f12.2)')&
70 'sonde_sfc',ob_vars(1),iv%info(sonde_sfc)%lat(1,n),iv%info(sonde_sfc)%lon(1,n),0.01*ob%sonde_sfc(n)%p
77 if( iv%sonde_sfc(n)%v%qc >= obs_qc_pointer ) then
78 call da_max_error_qc (it,iv%info(sonde_sfc), n, iv%sonde_sfc(n)%v, max_error_uv,failed)
79 if( iv%info(sonde_sfc)%proc_domain(1,n) ) then
80 num_qcstat_conv(1,sonde_sfc,2,1) = num_qcstat_conv(1,sonde_sfc,2,1) + 1
82 num_qcstat_conv(2,sonde_sfc,2,1) = num_qcstat_conv(2,sonde_sfc,2,1) + 1
83 if ( write_rej_obs_conv ) then
84 write(qcstat_conv_unit,'(2x,a10,2x,a4,3f12.2)')&
85 'sonde_sfc',ob_vars(2),iv%info(sonde_sfc)%lat(1,n),iv%info(sonde_sfc)%lon(1,n),0.01*ob%sonde_sfc(n)%p
93 if(iv%sonde_sfc(n)%u%qc == fails_error_max .or. abs(iv%sonde_sfc(n)%u%inv) >= max_omb_spd) then
94 iv%sonde_sfc(n)%u%qc = fails_error_max
95 iv%sonde_sfc(n)%u%inv = 0.0
97 if(iv%sonde_sfc(n)%v%qc == fails_error_max .or. abs(iv%sonde_sfc(n)%v%inv) >= max_omb_dir) then
98 iv%sonde_sfc(n)%v%qc = fails_error_max
99 iv%sonde_sfc(n)%v%inv = 0.0
106 if( iv%sonde_sfc(n)%v%qc >= obs_qc_pointer .or. iv%sonde_sfc(n)%u%qc >= obs_qc_pointer ) then
107 if(wind_sd_sound)then
108 call da_max_error_qc (it,iv%info(sonde_sfc), n, iv%sonde_sfc(n)%u, max_error_spd,failed1)
109 call da_max_error_qc (it,iv%info(sonde_sfc), n, iv%sonde_sfc(n)%v, max_error_dir,failed2)
111 call da_max_error_qc (it,iv%info(sonde_sfc), n, iv%sonde_sfc(n)%u, max_error_uv,failed1)
112 call da_max_error_qc (it,iv%info(sonde_sfc), n, iv%sonde_sfc(n)%v, max_error_uv,failed2)
116 if( iv%info(sonde_sfc)%proc_domain(1,n) ) then
117 num_qcstat_conv(1,sonde_sfc,1,1) = num_qcstat_conv(1,sonde_sfc,1,1) + 1
118 num_qcstat_conv(1,sonde_sfc,2,1) = num_qcstat_conv(1,sonde_sfc,2,1) + 1
119 if(failed1 .or. failed2) then
120 num_qcstat_conv(2,sonde_sfc,1,1) = num_qcstat_conv(2,sonde_sfc,1,1) + 1
121 if ( write_rej_obs_conv ) then
122 write(qcstat_conv_unit,'(2x,a10,2x,a4,3f12.2)')&
123 'sonde_sfc',ob_vars(1),iv%info(sonde_sfc)%lat(1,n),iv%info(sonde_sfc)%lon(1,n),0.01*ob%sonde_sfc(n)%p
125 num_qcstat_conv(2,sonde_sfc,2,1) = num_qcstat_conv(2,sonde_sfc,2,1) + 1
126 if ( write_rej_obs_conv ) then
127 write(qcstat_conv_unit,'(2x,a10,2x,a4,3f12.2)')&
128 'sonde_sfc',ob_vars(2),iv%info(sonde_sfc)%lat(1,n),iv%info(sonde_sfc)%lon(1,n),0.01*ob%sonde_sfc(n)%p
133 if(wind_sd_sound)then
134 if(iv%sonde_sfc(n)%u%qc == fails_error_max .or. iv%sonde_sfc(n)%v%qc == fails_error_max .or. &
135 abs(iv%sonde_sfc(n)%v%inv) >= max_omb_dir .or. abs(iv%sonde_sfc(n)%u%inv) >= max_omb_spd )then
136 iv%sonde_sfc(n)%u%qc = fails_error_max
137 iv%sonde_sfc(n)%v%qc = fails_error_max
138 iv%sonde_sfc(n)%u%inv = 0.0
139 iv%sonde_sfc(n)%v%inv = 0.0
142 if(iv%sonde_sfc(n)%u%qc == fails_error_max .or. iv%sonde_sfc(n)%v%qc == fails_error_max ) then
143 iv%sonde_sfc(n)%u%qc = fails_error_max
144 iv%sonde_sfc(n)%v%qc = fails_error_max
145 iv%sonde_sfc(n)%u%inv = 0.0
146 iv%sonde_sfc(n)%v%inv = 0.0
152 if( iv%sonde_sfc(n)%t%qc >= obs_qc_pointer ) then
153 call da_max_error_qc (it, iv%info(sonde_sfc), n, iv%sonde_sfc(n)%t, max_error_t , failed)
154 if( iv%info(sonde_sfc)%proc_domain(1,n) ) then
155 num_qcstat_conv(1,sonde_sfc,3,1)= num_qcstat_conv(1,sonde_sfc,3,1) + 1
157 num_qcstat_conv(2,sonde_sfc,3,1)= num_qcstat_conv(2,sonde_sfc,3,1) + 1
158 if ( write_rej_obs_conv ) then
159 write(qcstat_conv_unit,'(2x,a10,2x,a4,3f12.2)')&
160 'sonde_sfc',ob_vars(3),iv%info(sonde_sfc)%lat(1,n),iv%info(sonde_sfc)%lon(1,n),0.01*ob%sonde_sfc(n)%p
167 if( iv%sonde_sfc(n)%p%qc >= obs_qc_pointer ) then
168 call da_max_error_qc (it, iv%info(sonde_sfc), n, iv%sonde_sfc(n)%p, max_error_p , failed)
169 if( iv%info(sonde_sfc)%proc_domain(1,n) ) then
170 num_qcstat_conv(1,sonde_sfc,5,1)= num_qcstat_conv(1,sonde_sfc,5,1) + 1
172 num_qcstat_conv(2,sonde_sfc,5,1)= num_qcstat_conv(2,sonde_sfc,5,1) + 1
173 if ( write_rej_obs_conv ) then
174 write(qcstat_conv_unit,'(2x,a10,2x,a4,3f12.2)')&
175 'sonde_sfc',ob_vars(5),iv%info(sonde_sfc)%lat(1,n),iv%info(sonde_sfc)%lon(1,n),0.01*ob%sonde_sfc(n)%p
182 if( iv%sonde_sfc(n)%q%qc >= obs_qc_pointer ) then
183 if( iv%sonde_sfc(n)%t%qc == fails_error_max .or. iv%sonde_sfc(n)%p%qc == fails_error_max) then
185 iv%sonde_sfc(n)%q%qc = fails_error_max
186 iv%sonde_sfc(n)%q%inv = 0.0
188 call da_max_error_qc (it, iv%info(sonde_sfc), n, iv%sonde_sfc(n)%q, max_error_q , failed)
190 if( iv%info(sonde_sfc)%proc_domain(1,n) ) then
191 num_qcstat_conv(1,sonde_sfc,4,1)= num_qcstat_conv(1,sonde_sfc,4,1) + 1
193 num_qcstat_conv(2,sonde_sfc,4,1)= num_qcstat_conv(2,sonde_sfc,4,1) + 1
194 if ( write_rej_obs_conv ) then
195 write(qcstat_conv_unit,'(2x,a10,2x,a4,3f12.2)')&
196 'sonde_sfc',ob_vars(4),iv%info(sonde_sfc)%lat(1,n),iv%info(sonde_sfc)%lon(1,n),0.01*ob%sonde_sfc(n)%p
203 if (trace_use_dull) call da_trace_exit("da_check_max_iv_sonde_sfc")
205 end subroutine da_check_max_iv_sonde_sfc