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