da_jo_and_grady.inc

References to this file elsewhere.
1 subroutine da_jo_and_grady(iv, re, jot, jo, jo_grad_y)
2 
3    !-----------------------------------------------------------------------
4    ! Purpose: TBD
5    !-----------------------------------------------------------------------
6 
7    implicit none
8 
9    type (ob_type), intent(in)   :: iv          ! Innovation vector (O-B).
10    type (y_type), intent(in)    :: re          ! Residual vector (O-A).
11    real, intent(out)            :: jot         ! Obs cost function.
12    type (jo_type), intent(out)  :: jo          ! Obs cost function.
13    type (y_type), intent(out)   :: jo_grad_y   ! Grad_y(Jo)
14    real                         :: jo_sound, jo_synop, jo_geoamv, jo_polaramv, &
15                                    jo_airep, jo_pilot, jo_satem, &
16                                    jo_metar, jo_ships, jo_gpspw, &
17                                    jo_ssmi , jo_ssmt1, jo_ssmt2, &
18                                    jo_pseudo, jo_qscat, jo_buoy, &
19                                    jo_profiler, jo_Radar, jo_gpsref, jo_bogus, &
20                                    jo_radiance, jo_airsr
21    integer                      :: i,k
22 
23    if (trace_use) call da_trace_entry("da_jo_and_grady")
24 
25    !-------------------------------------------------------------------------
26    ! [1.0] Compute components of Grad_y(Jo):
27    !-------------------------------------------------------------------------
28 
29    ! Radiosonde
30 
31    call da_jo_and_grady_sound(iv, re, jo, jo_grad_y)
32    jo_sound = jo % sound_u + jo % sound_v + &
33               jo % sound_t + jo % sound_q
34 
35    if (print_detail_grad) then
36       write(unit=stdout, fmt='(a, e24.12)') &
37          'jo_sound        ', jo_sound, &
38          'jo%sound_u      ', jo%sound_u, &
39          'jo%sound_v      ', jo%sound_v, &
40          'jo%sound_t      ', jo%sound_t, &
41          'jo%sound_q      ', jo%sound_q
42    end if
43 
44    call da_jo_and_grady_sonde_sfc(iv, re, jo, jo_grad_y)
45    jo_sound = jo_sound         + jo % sonde_sfc_u + jo % sonde_sfc_v + &
46               jo % sonde_sfc_t + jo % sonde_sfc_q + jo % sonde_sfc_p
47 
48    if (print_detail_grad) then
49       write(unit=stdout, fmt='(a, e24.12)') &
50          'jo_sound        ', jo_sound, &
51          'jo%sonde_sfc_u  ', jo%sonde_sfc_u, &
52          'jo%sonde_sfc_v  ', jo%sonde_sfc_v, &
53          'jo%sonde_sfc_t  ', jo%sonde_sfc_t, &
54          'jo%sonde_sfc_p  ', jo%sonde_sfc_p, &
55          'jo%sonde_sfc_q  ', jo%sonde_sfc_q
56    end if
57 
58    ! Surface
59 
60    call da_jo_and_grady_synop(iv, re, jo, jo_grad_y)
61    jo_synop = jo % synop_u + jo % synop_v + jo % synop_t + &
62               jo % synop_p + jo % synop_q
63 
64    if (print_detail_grad) then
65       write(unit=stdout, fmt='(a, e24.12)') &
66          'jo_synop        ', jo_synop, &
67          'jo%synop_u      ', jo%synop_u, &
68          'jo%synop_v      ', jo%synop_v, &
69          'jo%synop_t      ', jo%synop_t, &
70          'jo%synop_p      ', jo%synop_p, &
71          'jo%synop_q      ', jo%synop_q
72    end if
73 
74 
75    ! Geostationary Satellite AMVs:
76 
77    call da_jo_and_grady_geoamv(iv, re, jo, jo_grad_y)
78    jo_geoamv = jo % geoamv_u + jo % geoamv_v
79    if (print_detail_grad) then
80       write(unit=stdout, fmt='(a, e24.12)') &
81          'jo_geoamv       ', jo_geoamv, &
82          'jo%geoamv_u     ', jo%geoamv_u, &
83          'jo%geoamv_v     ', jo%geoamv_v
84    end if
85 
86    ! Polar orbitting Satellite AMVs:
87 
88    call da_jo_and_grady_polaramv(iv, re, jo, jo_grad_y)
89    jo_polaramv = jo % polaramv_u + jo % polaramv_v
90    if (print_detail_grad) then
91       write(unit=stdout, fmt='(a, e24.12)') &
92          'jo_polaramv     ', jo_polaramv, &
93          'jo%polaramv_u   ', jo%polaramv_u, &
94          'jo%polaramv_v   ', jo%polaramv_v
95    end if
96 
97    ! Airep
98 
99    call da_jo_and_grady_airep(iv, re, jo, jo_grad_y)
100    jo_airep = jo % airep_u + jo % airep_v + jo % airep_t
101 
102    ! Pilot
103 
104    call da_jo_and_grady_pilot(iv, re, jo, jo_grad_y)
105    jo_pilot = jo % pilot_u + jo % pilot_v
106 
107    ! Satem
108 
109    call da_jo_and_grady_satem(iv, re, jo, jo_grad_y)
110    jo_satem = jo % satem_thickness
111 
112    ! Metar:
113 
114    call da_jo_and_grady_metar(iv, re, jo, jo_grad_y)
115    jo_metar = jo % metar_u + jo % metar_v + jo % metar_t + &
116               jo % metar_p + jo % metar_q
117 
118    ! Ships:
119 
120    call da_jo_and_grady_ships(iv, re, jo, jo_grad_y)
121    jo_ships = jo % ships_u + jo % ships_v + jo % ships_t + &
122               jo % ships_p + jo % ships_q
123 
124    ! GPSPW:
125 
126    call da_jo_and_grady_gpspw(iv, re, jo, jo_grad_y)
127    jo_gpspw = jo % gpspw_tpw
128 
129    ! GPSRF:
130 
131    call da_jo_and_grady_gpsref(iv, re, jo, jo_grad_y)
132    jo_gpsref = jo % gpsref_ref
133 
134    ! SSMI:
135 
136    call da_jo_and_grady_ssmi(iv, re, jo, jo_ssmi, jo_grad_y) 
137 
138    ! SSMT1:
139 
140    call da_jo_and_grady_ssmt1(iv, re, jo, jo_grad_y)
141    jo_ssmt1 = jo % ssmt1_t
142 
143    ! SSMT2:
144 
145    call da_jo_and_grady_ssmt2(iv, re, jo, jo_grad_y)  
146    jo_ssmt2 = jo % ssmt2_rh
147 
148    ! Radar obs:
149 
150    call da_jo_and_grady_radar(iv, re, jo, jo_grad_y)
151    jo_Radar = jo % Radar_rv + jo % Radar_rf
152 
153    ! Pseudo obs:
154 
155    call da_jo_and_grady_pseudo(iv, re, jo, jo_grad_y)    
156    jo_pseudo = jo % pseudo_u + jo % pseudo_v + jo % pseudo_t + &
157                jo % pseudo_p + jo % pseudo_q
158 
159    ! Quikscat scatterometer:
160 
161    call da_jo_and_grady_qscat(iv, re, jo, jo_grad_y)
162    jo_qscat = jo % qscat_u + jo % qscat_v
163 
164    ! Profiler:
165 
166    call da_jo_and_grady_profiler (iv, re, jo, jo_grad_y)
167    jo_profiler = jo % profiler_u + jo % profiler_v
168 
169    ! TC bogus:
170 
171    call da_jo_and_grady_bogus (iv, re, jo, jo_grad_y)
172    jo_bogus = jo % bogus_u + jo % bogus_v + jo % bogus_slp + &
173               jo % bogus_t + jo % bogus_q
174 
175    ! Buoy: 
176 
177    call da_jo_and_grady_buoy (iv, re, jo, jo_grad_y)
178    jo_buoy = jo % buoy_u + jo % buoy_v + jo % buoy_t + &
179              jo % buoy_p + jo % buoy_q
180 
181    ! Radiance:
182 
183    call da_jo_and_grady_rad (iv, re, jo, jo_grad_y)
184 
185    jo_radiance = 0. 
186    if (use_rad) then
187       do i=1,iv%num_inst
188          do k=1,iv%instid(i)%nchan
189             jo_radiance = jo_radiance + jo % rad(i)%jo_ichan(k)
190          end do
191       end do
192    end if
193    if (print_detail_grad) then
194       write(unit=stdout, fmt='(a, e24.12)') &
195          'jo_radiance     ', jo_radiance
196       do i = 1, iv%num_inst
197          write(unit=stdout, fmt='(a, e24.12)') &
198             trim('jo_'//iv%instid(i)%rttovid_string), sum(jo % rad(i)%jo_ichan(:))
199       end do
200    end if
201 
202    ! AIRS retrievals 
203    
204    call da_jo_and_grady_airsr(iv, re, jo, jo_grad_y)
205    jo_airsr = jo % airsr_t + jo % airsr_q
206 
207    if (print_detail_grad) then
208       write(unit=stdout, fmt='(a, e24.12)') &
209          'jo_airsr        ', jo_airsr, &
210          'jo%airsr_t      ', jo%airsr_t, &
211          'jo%airsr_q      ', jo%airsr_q
212    end if
213 
214    !-------------------------------------------------------------------------
215    ! [2.0] Jo = 1/2 * (yo-y)**2/ob_err_variance:
216    !-------------------------------------------------------------------------
217 
218    jo % total = jo_sound + jo_geoamv + jo_polaramv + jo_synop + jo_satem + &
219                 jo_pilot + jo_airep + jo_metar + jo_ships + &
220                 jo_gpspw + jo_ssmi + jo_ssmt1 + jo_ssmt2 + &
221                 jo_pseudo + jo_qscat + jo_profiler + jo_buoy + &
222                 jo_Radar + jo_gpsref + jo_bogus + jo_radiance + jo_airsr
223 
224    jot = jo % total
225 
226    if (print_detail_grad) then
227       write(unit=stdout, fmt='(a, e24.12)') &
228          'jo % total      ', jot
229 
230       write(unit=stdout, fmt='(a, e24.12)') &
231          'jo_sound        ', jo_sound, &
232          'jo_geoamv       ', jo_geoamv, &
233          'jo_polaramv     ', jo_polaramv, &
234          'jo_synop        ', jo_synop, &
235          'jo_satem        ', jo_satem, &
236          'jo_pilot        ', jo_pilot, &
237          'jo_airep        ', jo_airep, &
238          'jo_metar        ', jo_metar, &
239          'jo_ships        ', jo_ships, &
240          'jo_gpspw        ', jo_gpspw, &
241          'jo_ssmi         ', jo_ssmi, &
242          'jo_ssmt1        ', jo_ssmt1, &
243          'jo_ssmt2        ', jo_ssmt2, &
244          'jo_pseudo       ', jo_pseudo, &
245          'jo_qscat        ', jo_qscat, &
246          'jo_profil       ', jo_profiler, &
247          'jo_buoy         ', jo_buoy, &
248          'jo_radar        ', jo_radar, &
249          'jo_gpsref       ', jo_gpsref, &
250          'jo_bogus        ', jo_bogus,  &
251          'jo_radiance     ', jo_radiance, &
252          'jo_airsr        ', jo_airsr          
253 
254    end if
255 
256    if (trace_use) call da_trace_exit("da_jo_and_grady")
257 
258 end subroutine da_jo_and_grady
259 
260