da_get_innov_vector_ssmi_tb.inc
References to this file elsewhere.
1 subroutine da_get_innov_vector_ssmi_tb (it, grid, ob, iv)
2
3 !-----------------------------------------------------------------------
4 ! Purpose: TBD
5 !-----------------------------------------------------------------------
6
7 implicit none
8
9 integer, intent(in) :: it ! External iteration.
10 type(domain), intent(in) :: grid ! first guess state.
11 type(y_type), intent(in) :: ob ! Observation structure.
12 type(iv_type), intent(inout) :: iv ! O-B structure.
13
14 integer :: n ! Loop counter.
15 integer :: i, j ! Index dimension.
16 real :: dx, dxm ! Interpolation weights.
17 real :: dy, dym ! Interpolation weights.
18 real :: model_tb19h ! Model value tb19h at oblocation.
19 real :: model_tb19v ! Model value tb19v at oblocation.
20 real :: model_tb22v ! Model value tb22v at oblocation.
21 real :: model_tb37h ! Model value tb37h at oblocation.
22 real :: model_tb37v ! Model value tb37v at oblocation.
23 real :: model_tb85h ! Model value tb85h at oblocation.
24 real :: model_tb85v ! Model value tb85v at oblocation.
25
26 integer :: itb19v, itb19vf, &
27 itb19h, itb19hf, &
28 itb22v, itb22vf, &
29 itb37v, itb37vf, &
30 itb37h, itb37hf, &
31 itb85v, itb85vf, &
32 itb85h, itb85hf
33
34 if (trace_use) call da_trace_entry("da_get_innov_vector_ssmi_tb")
35
36 itb19v = 0
37 itb19vf = 0
38 itb19h = 0
39 itb19hf = 0
40 itb22v = 0
41 itb22vf = 0
42 itb37v = 0
43 itb37vf = 0
44 itb37h = 0
45 itb37hf = 0
46 itb85v = 0
47 itb85vf = 0
48 itb85h = 0
49 itb85hf = 0
50
51 do n=iv%info(ssmi_tb)%n1,iv%info(ssmi_tb)%n2
52 ! compute innovation vector
53 ! =========================
54
55 ! Obs coordinates on model grid
56
57 ! TB
58
59 i = iv%info(ssmi_tb)%i(1,n)
60 j = iv%info(ssmi_tb)%j(1,n)
61 dx = iv%info(ssmi_tb)%dx(1,n)
62 dy = iv%info(ssmi_tb)%dy(1,n)
63 dxm = iv%info(ssmi_tb)%dxm(1,n)
64 dym = iv%info(ssmi_tb)%dym(1,n)
65
66 ! Tb19h
67
68 if (abs(ob % ssmi_tb(n) % tb19h - missing_r) > 1.0) then
69 model_tb19h = dym*(dxm*grid%xb%tb19h(i,j) + dx*grid%xb%tb19h(i+1,j)) &
70 + dy *(dxm*grid%xb%tb19h(i,j+1) + dx*grid%xb%tb19h(i+1,j+1))
71 iv % ssmi_tb(n) % tb19h % inv = ob % ssmi_tb(n) % tb19h - &
72 model_tb19h
73 else
74 iv % ssmi_tb(n) % tb19h % inv = 0.0
75 end if
76
77 ! Tb19v
78
79 if (abs(ob % ssmi_tb(n) % tb19v - missing_r) > 1.0) then
80 model_tb19v = dym*(dxm*grid%xb%tb19v(i,j) + dx *grid%xb%tb19v(i+1,j)) &
81 + dy *(dxm*grid%xb%tb19v(i,j+1) + dx *grid%xb%tb19v(i+1,j+1))
82 iv % ssmi_tb(n) % tb19v % inv = ob % ssmi_tb(n) % tb19v - &
83 model_tb19v
84 else
85 iv % ssmi_tb(n) % tb19v % inv = 0.0
86 end if
87
88 ! Tb19v
89
90 if (abs(ob % ssmi_tb(n) % tb22v - missing_r) > 1.0) then
91 model_tb22v = dym*(dxm*grid%xb%tb22v(i,j) + dx *grid%xb%tb22v(i+1,j)) &
92 + dy *(dxm*grid%xb%tb22v(i,j+1) + dx *grid%xb%tb22v(i+1,j+1))
93 iv % ssmi_tb(n) % tb22v % inv = ob % ssmi_tb(n) % tb22v - &
94 model_tb22v
95 else
96 iv % ssmi_tb(n) % tb22v % inv = 0.0
97 end if
98
99 ! Tb37h
100
101 if (abs(ob % ssmi_tb(n) % tb37h - missing_r) > 1.0) then
102 model_tb37h = dym*(dxm*grid%xb%tb37h(i,j) + dx *grid%xb%tb37h(i+1,j)) &
103 + dy *(dxm*grid%xb%tb37h(i,j+1) + dx *grid%xb%tb37h(i+1,j+1))
104 iv % ssmi_tb(n) % tb37h % inv = ob % ssmi_tb(n) % tb37h - &
105 model_tb37h
106 else
107 iv % ssmi_tb(n) % tb37h % inv = 0.0
108 end if
109
110 ! Tb37v
111
112 if (abs(ob % ssmi_tb(n) % tb37v - missing_r) > 1.0) then
113 model_tb37v = dym*(dxm*grid%xb%tb37v(i,j) + dx *grid%xb%tb37v(i+1,j)) &
114 + dy *(dxm*grid%xb%tb37v(i,j+1) + dx *grid%xb%tb37v(i+1,j+1))
115 iv % ssmi_tb(n) % tb37v % inv = ob % ssmi_tb(n) % tb37v - &
116 model_tb37v
117 else
118 iv % ssmi_tb(n) % tb37v % inv = 0.0
119 end if
120
121 ! Tb85h
122
123 if (abs(ob % ssmi_tb(n) % tb85h - missing_r) > 1.0) then
124 model_tb85h = dym*(dxm*grid%xb%tb85h(i,j) + dx *grid%xb%tb85h(i+1,j)) &
125 + dy *(dxm*grid%xb%tb85h(i,j+1) + dx *grid%xb%tb85h(i+1,j+1))
126 iv % ssmi_tb(n) % tb85h % inv = ob % ssmi_tb(n) % tb85h - &
127 model_tb85h
128 else
129 iv % ssmi_tb(n) % tb85h % inv = 0.0
130 end if
131
132 ! Tb85v
133
134 if (abs(ob % ssmi_tb(n) % tb85v - missing_r) > 1.0) then
135 model_tb85v = dym*(dxm*grid%xb%tb85v(i,j) + dx *grid%xb%tb85v(i+1,j)) &
136 + dy *(dxm*grid%xb%tb85v(i,j+1) + dx *grid%xb%tb85v(i+1,j+1))
137 iv % ssmi_tb(n) % tb85v % inv = ob % ssmi_tb(n) % tb85v - &
138 model_tb85v
139 else
140 iv % ssmi_tb(n) % tb85v % inv = 0.0
141 end if
142 end do
143
144 !----------------------------------------------------------------
145 ! Perform optional maximum error check:
146 !----------------------------------------------------------------
147
148 if (check_max_iv) then
149 call da_check_max_iv_ssmi_tb(iv, it, &
150 itb19v, itb19vf, itb19h, itb19hf, &
151 itb22v, itb22vf, &
152 itb37v, itb37vf, itb37h, itb37hf, &
153 itb85v, itb85vf, itb85h, itb85hf )
154 end if
155
156 if (rootproc .and. check_max_iv_print) then
157 write(unit = check_max_iv_unit, fmt ='(A,i5,A)')'For outer iteration ', &
158 it,'Total Rejections for SSMI(Tbs) follows:'
159 write(unit = check_max_iv_unit, fmt = '(2(A,I6))') &
160 'Number of failed ssmi tb19v observations: ',itb19v, ' on ',itb19v, &
161 'Number of failed ssmi tb19h observations: ',itb19h, ' on ',itb19h, &
162 'Number of failed ssmi tb22v observations: ',itb22v, ' on ',itb22v, &
163 'Number of failed ssmi tb37v observations: ',itb37v, ' on ',itb37v, &
164 'Number of failed ssmi tb37h observations: ',itb37h, ' on ',itb37h, &
165 'Number of failed ssmi tb85v observations: ',itb85v, ' on ',itb85v, &
166 'Number of failed ssmi tb85h observations: ',itb85h, ' on ',itb85h
167 end if
168
169 if (trace_use) call da_trace_exit("da_get_innov_vector_ssmi_tb")
170
171 end subroutine da_get_innov_vector_ssmi_tb
172
173