da_write_obs.inc
References to this file elsewhere.
1 subroutine da_write_obs(ob, iv, re)
2
3 !-------------------------------------------------------------------------
4 ! Purpose: Writes out components of iv=O-B structure.
5 !-------------------------------------------------------------------------
6
7 implicit none
8
9 type (y_type), intent(in) :: ob ! Observation structure.
10 type (iv_type), intent(in) :: iv ! O-B structure.
11 type (y_type), intent(inout) :: re ! residual vector.
12
13 integer :: n, k, num_obs, ios
14 integer :: ounit ! Output unit
15 character(len=filename_len) :: filename
16
17 if (trace_use) call da_trace_entry("da_write_obs")
18
19 !-------------------------------------------------------------------------
20 ! Fix output unit
21 !-------------------------------------------------------------------------
22
23 call da_get_unit(ounit)
24
25 #ifdef DM_PARALLEL
26 write(unit=filename, fmt='(a,i3.3)') 'gts_omb_oma.', myproc
27 #else
28 write(unit=filename, fmt='(a)') 'gts_omb_oma.000'
29 #endif
30
31 open (unit=ounit,file=trim(filename),form='formatted',status='replace', &
32 iostat=ios)
33 if (ios /= 0) then
34 call da_error(__FILE__,__LINE__, &
35 (/"Cannot open conventional observation omb and oma file"//filename/))
36 end if
37
38 num_obs = 0
39 do n = 1, iv%info(synop)%nlocal
40 if (iv%info(synop)%proc_domain(1,n)) num_obs = num_obs + 1
41 end do
42 if (num_obs > 0) then
43 write(ounit,'(a20,i8)')'synop', num_obs
44 num_obs = 0
45 do n = 1, iv%info(synop)%nlocal
46 if (iv%info(synop)%proc_domain(1,n)) then
47 num_obs = num_obs + 1
48 write(ounit,'(i8)') 1
49 write(ounit,'(2i8,a5,2f9.2,f17.7,5(2f17.7,i8,2f17.7))')&
50 num_obs , 1, iv%info(synop)%id(n), & ! Station
51 iv%info(synop)%lat(1,n), & ! Latitude
52 iv%info(synop)%lon(1,n), & ! Longitude
53 ob % synop(n) % p, & ! Obs Pressure
54 ob%synop(n)%u, iv%synop(n)%u, re%synop(n)%u, &! O, O-B, O-A u
55 ob%synop(n)%v, iv%synop(n)%v, re%synop(n)%v, &! O, O-B, O-A v
56 ob%synop(n)%t, iv%synop(n)%t, re%synop(n)%t, &! O, O-B, O-A t
57 ob%synop(n)%p, iv%synop(n)%p, re%synop(n)%p, &! O, O-B, O-A p
58 ob%synop(n)%q, iv%synop(n)%q, re%synop(n)%q ! O, O-B, O-A q
59 end if
60 end do
61 end if
62
63 num_obs = 0
64 do n = 1, iv%info(metar)%nlocal
65 if (iv%info(metar)%proc_domain(1,n)) num_obs = num_obs + 1
66 end do
67 if (num_obs > 0) then
68 write(ounit,'(a20,i8)')'metar', num_obs
69 num_obs = 0
70 do n = 1, iv%info(metar)%nlocal
71 if (iv%info(metar)%proc_domain(1,n)) then
72 num_obs = num_obs + 1
73 write(ounit,'(i8)') 1
74 write(ounit,'(2i8,a5,2f9.2,f17.7,5(2f17.7,i8,2f17.7))')&
75 num_obs , 1, iv%info(metar)%id(n), & ! Station
76 iv%info(metar)%lat(1,n), & ! Latitude
77 iv%info(metar)%lon(1,n), & ! Longitude
78 ob % metar(n) % p, & ! Obs Pressure
79 ob%metar(n)%u, iv%metar(n)%u, re%metar(n)%u, &! O, O-B, O-A u
80 ob%metar(n)%v, iv%metar(n)%v, re%metar(n)%v, &! O, O-B, O-A v
81 ob%metar(n)%t, iv%metar(n)%t, re%metar(n)%t, &! O, O-B, O-A t
82 ob%metar(n)%p, iv%metar(n)%p, re%metar(n)%p, &! O, O-B, O-A p
83 ob%metar(n)%q, iv%metar(n)%q, re%metar(n)%q ! O, O-B, O-A q
84 end if
85 end do
86 end if
87
88 num_obs = 0
89 do n = 1, iv%info(ships)%nlocal
90 if (iv%info(ships)%proc_domain(1,n)) num_obs = num_obs + 1
91 end do
92 if (num_obs > 0) then
93 write(ounit,'(a20,i8)')'ships', num_obs
94 num_obs = 0
95 do n = 1, iv%info(ships)%nlocal
96 if (iv%info(ships)%proc_domain(1,n)) then
97 write(ounit,'(i8)') 1
98 num_obs = num_obs + 1
99 write(ounit,'(2i8,a5,2f9.2,f17.7,5(2f17.7,i8,2f17.7))')&
100 num_obs,1, iv%info(ships)%id(n), & ! Station
101 iv%info(ships)%lat(1,n), & ! Latitude
102 iv%info(ships)%lon(1,n), & ! Longitude
103 ob % ships(n) % p, & ! Obs Pressure
104 ob%ships(n)%u, iv%ships(n)%u, re%ships(n)%u, &! O, O-B, O-A u
105 ob%ships(n)%v, iv%ships(n)%v, re%ships(n)%v, &! O, O-B, O-A v
106 ob%ships(n)%t, iv%ships(n)%t, re%ships(n)%t, &! O, O-B, O-A t
107 ob%ships(n)%p, iv%ships(n)%p, re%ships(n)%p, &! O, O-B, O-A p
108 ob%ships(n)%q, iv%ships(n)%q, re%ships(n)%q ! O, O-B, O-A q
109 end if
110 end do
111 end if
112
113 num_obs = 0
114 do n = 1, iv%info(geoamv)%nlocal
115 if (iv%info(geoamv)%proc_domain(1,n)) num_obs = num_obs + 1
116 end do
117 if (num_obs > 0) then
118 write(ounit,'(a20,i8)')'geoamv', num_obs
119 num_obs = 0
120 do n = 1, iv%info(geoamv)%nlocal
121 if (iv%info(geoamv)%proc_domain(1,n)) then
122 num_obs = num_obs + 1
123 write(ounit,'(i8)')iv%info(geoamv)%levels(n)
124 do k = 1, iv%info(geoamv)%levels(n)
125 write(ounit,'(2i8,a5,2f9.2,f17.7,5(2f17.7,i8,2f17.7))')&
126 num_obs, 1, iv%info(geoamv)%id(n), & ! Station
127 iv%info(geoamv)%lat(k,n), & ! Latitude
128 iv%info(geoamv)%lon(k,n), & ! Longitude
129 iv % geoamv(n) % p(k), & ! Obs Pressure
130 ob%geoamv(n)%u(k), iv%geoamv(n)%u(k), re%geoamv(n)%u(k), &! O, O-B, O-A u
131 ob%geoamv(n)%v(k), iv%geoamv(n)%v(k), re%geoamv(n)%v(k)
132 end do
133 end if
134 end do
135 end if
136
137 num_obs = 0
138 do n = 1, iv%info(polaramv)%nlocal
139 if (iv%info(polaramv)%proc_domain(1,n)) num_obs = num_obs + 1
140 end do
141 if (num_obs > 0) then
142 write(ounit,'(a20,i8)')'polaramv', num_obs
143 num_obs = 0
144 do n = 1, iv%info(polaramv)%nlocal
145 if (iv%info(polaramv)%proc_domain(1,n)) then
146 num_obs = num_obs + 1
147 write(ounit,'(i8)')iv%info(polaramv)%levels(n)
148 do k = 1, iv%info(polaramv)%levels(n)
149 write(ounit,'(2i8,a5,2f9.2,f17.7,5(2f17.7,i8,2f17.7))')&
150 num_obs, 1, iv%info(polaramv)%id(n), & ! Station
151 iv%info(polaramv)%lat(k,n), & ! Latitude
152 iv%info(polaramv)%lon(k,n), & ! Longitude
153 iv%polaramv(n)%p(k), & ! Obs Pressure
154 ob%polaramv(n)%u(k), iv%polaramv(n)%u(k), re%polaramv(n)%u(k), &! O, O-B, O-A u
155 ob%polaramv(n)%v(k), iv%polaramv(n)%v(k), re%polaramv(n)%v(k)
156 end do
157 end if
158 end do
159 end if
160
161 num_obs = 0
162 do n = 1, iv%info(gpspw)%nlocal
163 if (iv%info(gpspw)%proc_domain(1,n)) num_obs = num_obs + 1
164 end do
165 if (num_obs > 0) then
166 write(ounit,'(a20,i8)')'gpspw', num_obs
167 num_obs = 0
168 do n = 1, iv%info(gpspw)%nlocal
169 if (iv%info(gpspw)%proc_domain(1,n)) then
170 num_obs = num_obs + 1
171 write(ounit,'(i8)') 1
172 write(ounit,'(2i8,a5,2f9.2,f17.7,5(2f17.7,i8,2f17.7))')&
173 num_obs, 1, iv%info(gpspw)%id(n), & ! Station
174 iv%info(gpspw)%lat(1,n), & ! Latitude
175 iv%info(gpspw)%lon(1,n), & ! Longitude
176 missing_r, &
177 ob%gpspw(n)%tpw, iv%gpspw(n)%tpw, re%gpspw(n)%tpw ! O, O-B, O-A u
178 end if
179 end do
180 end if
181
182 num_obs = 0
183 do n = 1, iv%info(sound)%nlocal
184 if (iv%info(sound)%proc_domain(1,n)) num_obs = num_obs + 1
185 end do
186 if (num_obs > 0) then
187 write(ounit,'(a20,i8)')'sound', num_obs
188 num_obs = 0
189 do n = 1, iv%info(sound)%nlocal
190 if (iv%info(sound)%proc_domain(1,n)) then
191 num_obs = num_obs + 1
192 write(ounit,'(i8)')iv%info(sound)%levels(n)
193 do k = 1, iv%info(sound)%levels(n)
194 write(ounit,'(2i8,a5,2f9.2,f17.7,5(2f17.7,i8,2f17.7))')&
195 num_obs,k, iv%info(sound)%id(n), & ! Station
196 iv%info(sound)%lat(k,n), & ! Latitude
197 iv%info(sound)%lon(k,n), & ! Longitude
198 iv%sound(n) % p(k), & ! Obs Pressure
199 ob%sound(n)%u(k), iv%sound(n)%u(k), re%sound(n)%u(k), &! O,O-B,O-A u
200 ob%sound(n)%v(k), iv%sound(n)%v(k), re%sound(n)%v(k), &! O,O-B,O-A v
201 ob%sound(n)%t(k), iv%sound(n)%t(k), re%sound(n)%t(k), &! O,O-B,O-A t
202 ob%sound(n)%q(k), iv%sound(n)%q(k), re%sound(n)%q(k) ! O,O-B,O-A q
203 end do
204 end if
205 end do
206 end if
207
208 if (num_obs > 0) then
209 write(ounit,'(a20,i8)')'sonde_sfc', num_obs
210 num_obs = 0
211 do n = 1, iv%info(sonde_sfc)%nlocal
212 if (iv%info(sound)%proc_domain(1,n)) then
213 num_obs = num_obs + 1
214 write(ounit,'(i8)') 1
215 write(ounit,'(2i8,a5,2f9.2,f17.7,5(2f17.7,i8,2f17.7))')&
216 num_obs , 1, iv%info(sonde_sfc)%id(n), & ! Station
217 iv%info(sonde_sfc)%lat(1,n), & ! Latitude
218 iv%info(sonde_sfc)%lon(1,n), & ! Longitude
219 ob % sonde_sfc(n) % p, & ! Obs Pressure
220 ob%sonde_sfc(n)%u, iv%sonde_sfc(n)%u, re%sonde_sfc(n)%u, &! O, O-B, O-A u
221 ob%sonde_sfc(n)%v, iv%sonde_sfc(n)%v, re%sonde_sfc(n)%v, &! O, O-B, O-A v
222 ob%sonde_sfc(n)%t, iv%sonde_sfc(n)%t, re%sonde_sfc(n)%t, &! O, O-B, O-A t
223 ob%sonde_sfc(n)%p, iv%sonde_sfc(n)%p, re%sonde_sfc(n)%p, &! O, O-B, O-A p
224 ob%sonde_sfc(n)%q, iv%sonde_sfc(n)%q, re%sonde_sfc(n)%q ! O, O-B, O-A q
225 end if
226 end do
227 end if
228
229 num_obs = 0
230 do n = 1, iv%info(airep)%nlocal
231 if (iv%info(airep)%proc_domain(1,n)) num_obs = num_obs + 1
232 end do
233 if (num_obs > 0) then
234 write(ounit,'(a20,i8)')'airep', num_obs
235 num_obs = 0
236 do n = 1, iv%info(airep)%nlocal
237 if (iv%info(airep)%proc_domain(1,n)) then
238 num_obs = num_obs + 1
239 write(ounit,'(i8)')iv%info(airep)%levels(n)
240 do k = 1, iv%info(airep)%levels(n)
241 write(ounit,'(2i8,a5,2f9.2,f17.7,5(2f17.7,i8,2f17.7))')&
242 num_obs, k, iv%info(airep)%id(n), & ! Station
243 iv%info(airep)%lat(k,n), & ! Latitude
244 iv%info(airep)%lon(k,n), & ! Longitude
245 iv%airep(n) % p(k), & ! Obs pressure
246 ob%airep(n)%u(k), iv%airep(n)%u(k), re%airep(n)%u(k), &! O,O-B,O-A u
247 ob%airep(n)%v(k), iv%airep(n)%v(k), re%airep(n)%v(k), &! O,O-B,O-A v
248 ob%airep(n)%t(k), iv%airep(n)%t(k), re%airep(n)%t(k)
249 end do
250 end if
251 end do
252 end if
253
254 num_obs = 0
255 do n = 1, iv%info(pilot)%nlocal
256 if (iv%info(pilot)%proc_domain(1,n)) num_obs = num_obs + 1
257 end do
258 if (num_obs > 0) then
259 write(ounit,'(a20,i8)')'pilot', num_obs
260 num_obs = 0
261 do n = 1, iv%info(pilot)%nlocal
262 if (iv%info(pilot)%proc_domain(1,n)) then
263 num_obs = num_obs + 1
264 write(ounit,'(i8)')iv%info(pilot)%levels(n)
265 do k = 1, iv%info(pilot)%levels(n)
266 write(ounit,'(2i8,a5,2f9.2,f17.7,5(2f17.7,i8,2f17.7))')&
267 num_obs, k, iv%info(pilot)%id(n), & ! Station
268 iv%info(pilot)%lat(1,n), & ! Latitude
269 iv%info(pilot)%lon(1,n), & ! Longitude
270 iv % pilot(n) % p(k), & ! Obs Pressure
271 ob%pilot(n)%u(k), iv%pilot(n)%u(k), re%pilot(n)%u(k), &! O,O-B,O-A u
272 ob%pilot(n)%v(k), iv%pilot(n)%v(k), re%pilot(n)%v(k) ! O,O-B,O-A v
273 end do
274 end if
275 end do
276 end if
277
278 num_obs = 0
279 do n = 1, iv%info(ssmi_rv)%nlocal
280 if (iv%info(ssmi_rv)%proc_domain(1,n)) num_obs = num_obs + 1
281 end do
282 if (num_obs > 0) then
283 write(ounit,'(a20,i8)')'ssmir', num_obs
284 num_obs = 0
285 do n = 1, iv%info(ssmi_rv)%nlocal
286 if (iv%info(ssmi_rv)%proc_domain(1,n)) then
287 num_obs = num_obs + 1
288 write(ounit,'(i8)') 1
289 write(ounit,'(2i8,a5,2f9.2,f17.7,5(2f17.7,i8,2f17.7))')&
290 num_obs, 1, 'SSMIR', & ! Station
291 iv%info(ssmi_rv)%lat(1,n), &! Latitude
292 iv%info(ssmi_rv)%lon(1,n), &! Longitude
293 missing_r, & ! Obs height
294 ob%ssmi_rv(n)%speed, iv%ssmi_rv(n)%speed, re%ssmi_rv(n)%speed, & ! O, O-B, O-A speed
295 ob%ssmi_rv(n)%tpw, iv%ssmi_rv(n)%tpw, re%ssmi_rv(n)%tpw ! O, O-B, O-A tpw
296 end if
297 end do
298 end if
299
300 num_obs = 0
301 do n = 1, iv%info(ssmi_tb)%nlocal
302 if (iv%info(ssmi_tb)%proc_domain(1,n)) num_obs = num_obs + 1
303 end do
304 if (num_obs > 0) then
305 write(ounit,'(a20,i8)')'ssmiT', num_obs
306 num_obs = 0
307 do n = 1, iv%info(ssmi_tb)%nlocal
308 write(ounit,*)' SSMI radiance output not yet coded.'
309 if (iv%info(ssmi_tb)%proc_domain(1,n)) then
310 num_obs = num_obs + 1
311 write(ounit,'(i8)') 1
312 write(ounit,'(2i8,a5,2f9.2,f17.7,7(2f17.7,i8,2f17.7))')&
313 num_obs, 1, 'SSMIT', & ! Station
314 iv%info(ssmi_tb)%lat(1,n), &! Latitude
315 iv%info(ssmi_tb)%lon(1,n), &! Longitude
316 missing_r, & ! Obs height
317 ob%ssmi_tb(n)%tb19h, iv%ssmi_tb(n)%tb19h, re%ssmi_tb(n)%tb19h, & ! O, O-B, O-A Tb19h
318 ob%ssmi_tb(n)%tb19v, iv%ssmi_tb(n)%tb19v, re%ssmi_tb(n)%tb19v, & ! O, O-B, O-A Tb19v
319 ob%ssmi_tb(n)%tb22v, iv%ssmi_tb(n)%tb22v, re%ssmi_tb(n)%tb22v, & ! O, O-B, O-A Tb22v
320 ob%ssmi_tb(n)%tb37h, iv%ssmi_tb(n)%tb37h, re%ssmi_tb(n)%tb37h, & ! O, O-B, O-A Tb37h
321 ob%ssmi_tb(n)%tb37v, iv%ssmi_tb(n)%tb37v, re%ssmi_tb(n)%tb37v, & ! O, O-B, O-A Tb37v
322 ob%ssmi_tb(n)%tb85h, iv%ssmi_tb(n)%tb85h, re%ssmi_tb(n)%tb85h, & ! O, O-B, O-A Tb85h
323 ob%ssmi_tb(n)%tb85v, iv%ssmi_tb(n)%tb85v, re%ssmi_tb(n)%tb85v ! O, O-B, O-A Tb85v
324 end if
325 end do
326 end if
327
328 num_obs = 0
329 do n = 1, iv%info(satem)%nlocal
330 if (iv%info(satem)%proc_domain(1,n)) num_obs = num_obs + 1
331 end do
332 if (num_obs > 0) then
333 write(ounit,'(a20,i8)')'satem', num_obs
334 num_obs = 0
335 do n = 1, iv%info(satem)%nlocal
336 if (iv%info(satem)%proc_domain(1,n)) then
337 num_obs = num_obs + 1
338 write(ounit,'(i8)')iv%info(satem)%levels(n)
339 do k = 1, iv%info(satem)%levels(n)
340 write(ounit,'(2i8,a5,2f9.2,f17.7,5(2f17.7,i8,2f17.7))')&
341 num_obs , k, iv%info(satem)%id(n), & ! Station
342 iv%info(satem)%lat(1,n), & ! Latitude
343 iv%info(satem)%lon(1,n), & ! Longitude
344 iv%satem(n) % p(k), & ! Obs Pressure
345 ob%satem(n)%thickness(k), &
346 iv%satem(n)%thickness(k), &
347 re%satem(n)%thickness(k) ! O,O-B,O-A
348 end do
349 end if
350 end do
351 end if
352
353 num_obs = 0
354 do n = 1, iv%info(ssmt1)%nlocal
355 if (iv%info(ssmt1)%proc_domain(1,n)) num_obs = num_obs + 1
356 end do
357 if (num_obs > 0) then
358 write(ounit,'(a20,i8)')'ssmt1', num_obs
359 num_obs = 0
360 do n = 1, iv%info(ssmt1)%nlocal
361 if (iv%info(ssmt1)%proc_domain(1,n)) then
362 num_obs = num_obs + 1
363 write(ounit,'(i8)')iv%info(ssmt1)%levels(n)
364 do k = 1, iv%info(ssmt1)%levels(n)
365 write(ounit,'(2i8,a5,2f9.2,f17.7,5(2f17.7,i8,2f17.7))')&
366 num_obs , k, iv%info(ssmt1)%id(n), & ! Station
367 iv%info(ssmt1)%lat(1,n), & ! Latitude
368 iv%info(ssmt1)%lon(1,n), & ! Longitude
369 iv % ssmt1(n) % h(k), & ! Obs height
370 ob%ssmt1(n)%t(k), &
371 iv%ssmt1(n)%t(k), &
372 re%ssmt1(n)%t(k) ! O,O-B,O-A u
373 end do
374 end if
375 end do
376 end if
377
378 num_obs = 0
379 do n = 1, iv%info(ssmt2)%nlocal
380 if (iv%info(ssmt2)%proc_domain(1,n)) num_obs = num_obs + 1
381 end do
382 if (num_obs > 0) then
383 write(ounit,'(a20,i8)')'ssmt2', num_obs
384 num_obs = 0
385 do n = 1, iv%info(ssmt2)%nlocal
386 if (iv%info(ssmt2)%proc_domain(1,n)) then
387 num_obs = num_obs + 1
388 write(ounit,'(i8)')iv%info(ssmt2)%levels(n)
389 do k = 1, iv%info(ssmt2)%levels(n)
390 write(ounit,'(2i8,a5,2f9.2,f17.7,5(2f17.7,i8,2f17.7))')&
391 num_obs , k, iv%info(ssmt2)%id(n), & ! Station
392 iv%info(ssmt2)%lat(1,n), & ! Latitude
393 iv%info(ssmt2)%lon(1,n), & ! Longitude
394 iv % ssmt2(n) % h(k), & ! Obs height
395 ob%ssmt2(n)%rh(k), &
396 iv%ssmt2(n)%rh(k), &
397 re%ssmt2(n)%rh(k) ! O,O-B,O-A u
398 end do
399 end if
400 end do
401 end if
402
403 num_obs = 0
404 do n = 1, iv%info(qscat)%nlocal
405 if (iv%info(qscat)%proc_domain(1,n)) num_obs = num_obs + 1
406 end do
407 if (num_obs > 0) then
408 write(ounit,'(a20,i8)')'qscat', num_obs
409 num_obs = 0
410 do n = 1, iv%info(qscat)%nlocal
411 if (iv%info(qscat)%proc_domain(1,n)) then
412 num_obs = num_obs + 1
413 write(ounit,'(i8)') 1
414 write(ounit,'(2i8,a5,2f9.2,f17.7,5(2f17.7,i8,2f17.7))')&
415 num_obs, 1, iv%info(qscat)%id(n), & ! Station
416 iv%info(qscat)%lat(1,n), & ! Latitude
417 iv%info(qscat)%lon(1,n), & ! Longitude
418 iv % qscat(n) % h, & ! Obs height
419 ob%qscat(n)%u, iv%qscat(n)%u, re%qscat(n)%u, &! O, O-B, O-A u
420 ob%qscat(n)%v, iv%qscat(n)%v, re%qscat(n)%v ! O, O-B, O-A v
421 end if
422 end do
423 end if
424
425 num_obs = 0
426 do n = 1, iv%info(profiler)%nlocal
427 if (iv%info(profiler)%proc_domain(1,n)) num_obs = num_obs + 1
428 end do
429 if (num_obs > 0) then
430 write(ounit,'(a20,i8)')'profiler', num_obs
431 num_obs = 0
432 do n = 1, iv%info(profiler)%nlocal
433 if (iv%info(profiler)%proc_domain(1,n)) then
434 num_obs = num_obs + 1
435 write(ounit,'(i8)')iv%info(profiler)%levels(n)
436 do k = 1, iv%info(profiler)%levels(n)
437 write(ounit,'(2i8,a5,2f9.2,f17.7,5(2f17.7,i8,2f17.7))')&
438 num_obs, k, iv%info(profiler)%id(n), & ! Station
439 iv%info(profiler)%lat(1,n), & ! Latitude
440 iv%info(profiler)%lon(1,n), & ! Longitude
441 iv % profiler(n) % p(k), & ! Obs Pressure
442 ob%profiler(n)%u(k), iv%profiler(n)%u(k), re%profiler(n)%u(k), &! O,O-B,O-A u
443 ob%profiler(n)%v(k), iv%profiler(n)%v(k), re%profiler(n)%v(k) ! O,O-B,O-A v
444 end do
445 end if
446 end do
447 end if
448
449 num_obs = 0
450 do n = 1, iv%info(buoy)%nlocal
451 if (iv%info(buoy)%proc_domain(1,n)) num_obs = num_obs + 1
452 end do
453 if (num_obs > 0) then
454 write(ounit,'(a20,i8)')'buoy', num_obs
455 num_obs = 0
456 do n = 1, iv%info(buoy)%nlocal
457 if (iv%info(buoy)%proc_domain(1,n)) then
458 num_obs = num_obs + 1
459 write(ounit,'(i8)') 1
460 write(ounit,'(2i8,a5,2f9.2,f17.7,5(2f17.7,i8,2f17.7))')&
461 num_obs,1, iv%info(buoy)%id(n), & ! Station
462 iv%info(buoy)%lat(1,n), & ! Latitude
463 iv%info(buoy)%lon(1,n), & ! Longitude
464 ob % buoy(n) % p, & ! Obs Pressure
465 ob%buoy(n)%u, iv%buoy(n)%u, re%buoy(n)%u, &! O, O-B, O-A u
466 ob%buoy(n)%v, iv%buoy(n)%v, re%buoy(n)%v, &! O, O-B, O-A v
467 ob%buoy(n)%t, iv%buoy(n)%t, re%buoy(n)%t, &! O, O-B, O-A t
468 ob%buoy(n)%p, iv%buoy(n)%p, re%buoy(n)%p, &! O, O-B, O-A p
469 ob%buoy(n)%q, iv%buoy(n)%q, re%buoy(n)%q ! O, O-B, O-A q
470 end if
471 end do
472 end if
473
474 num_obs = 0
475 do n = 1, iv%info(bogus)%nlocal
476 if (iv%info(bogus)%proc_domain(1,n)) num_obs = num_obs + 1
477 end do
478 if (num_obs > 0) then
479 write(ounit,'(a20,i8)')'bogus', num_obs
480 num_obs = 0
481 do n = 1, iv%info(bogus)%nlocal
482 if (iv%info(bogus)%proc_domain(1,n)) then
483 num_obs = num_obs + 1
484 write(ounit,'(i8)') 1
485 write(ounit,'(2i8,a5,2f9.2,f17.7,5(2f17.7,i8,2f17.7))')&
486 num_obs, 1, iv%info(bogus)%id(n), & ! Station
487 iv%info(bogus)%lat(1,n), & ! Latitude
488 iv%info(bogus)%lon(1,n), & ! Longitude
489 missing_r, &
490 ob%bogus(n)%slp, iv%bogus(n)%slp, re%bogus(n)%slp ! O, O-B, O-A p
491 write(ounit,'(i8)')iv%info(bogus)%levels(n)
492 do k = 1, iv%info(bogus)%levels(n)
493 write(ounit,'(2i8,a5,2f9.2,f17.7,5(2f17.7,i8,2f17.7))')&
494 num_obs , k, iv%info(bogus)%id(n), & ! Station
495 iv%info(bogus)%lat(1,n), & ! Latitude
496 iv%info(bogus)%lon(1,n), & ! Longitude
497 iv % bogus(n) % p(k), & ! Obs Pressure
498 ob%bogus(n)%u(k), iv%bogus(n)%u(k), re%bogus(n)%u(k), &! O,O-B,O-A u
499 ob%bogus(n)%v(k), iv%bogus(n)%v(k), re%bogus(n)%v(k), &! O,O-B,O-A v
500 ob%bogus(n)%t(k), iv%bogus(n)%t(k), re%bogus(n)%t(k), &! O,O-B,O-A t
501 ob%bogus(n)%q(k), iv%bogus(n)%q(k), re%bogus(n)%q(k) ! O,O-B,O-A q
502 end do
503 end if
504 end do
505 end if
506
507 num_obs = 0
508 do n = 1, iv%info(airsr)%nlocal
509 if (iv%info(airsr)%proc_domain(1,n)) num_obs = num_obs + 1
510 end do
511 if (num_obs > 0) then
512 write(ounit,'(a20,i8)')'airsr', num_obs
513 num_obs = 0
514 do n = 1, iv%info(airsr)%nlocal
515 if (iv%info(airsr)%proc_domain(1,n)) then
516 num_obs = num_obs + 1
517 write(ounit,'(i8)')iv%info(airsr)%levels(n)
518 do k = 1, iv%info(airsr)%levels(n)
519 write(ounit,'(2i8,a5,2f9.2,f17.7,5(2f17.7,i8,2f17.7))')&
520 num_obs,k, iv%info(airsr)%id(n), & ! Station
521 iv%info(airsr)%lat(1,n), & ! Latitude
522 iv%info(airsr)%lon(1,n), & ! Longitude
523 iv % airsr(n) % p(k), & ! Obs Pressure
524 ob%airsr(n)%t(k), iv%airsr(n)%t(k), re%airsr(n)%t(k), &! O,O-B,O-A t
525 ob%airsr(n)%q(k), iv%airsr(n)%q(k), re%airsr(n)%q(k) ! O,O-B,O-A q
526 end do
527 end if
528 end do
529 end if
530
531 num_obs = 0
532 do n = 1, iv%info(gpsref)%nlocal
533 if (iv%info(gpsref)%proc_domain(1,n)) num_obs = num_obs + 1
534 end do
535 if (num_obs > 0) then
536 write(ounit,'(a20,i8)')'gpsref', num_obs
537 num_obs = 0
538 do n = 1, iv%info(gpsref)%nlocal
539 if (iv%info(gpsref)%proc_domain(1,n)) then
540 num_obs = num_obs + 1
541 write(ounit,'(i8)')iv%info(gpsref)%levels(n)
542 do k = 1, iv%info(gpsref)%levels(n)
543 write(ounit,'(2i8,a5,2f9.2,f17.7,5(2f17.7,i8,2f17.7))')&
544 num_obs,k, iv%info(gpsref)%id(n), & ! Station
545 iv%info(gpsref)%lat(1,n), & ! Latitude
546 iv%info(gpsref)%lon(1,n), & ! Longitude
547 iv % gpsref(n) % h(k), & ! Obs Height
548 ob%gpsref(n)%ref(k), iv%gpsref(n)%ref(k), re%gpsref(n)%ref(k) ! O, O-B, O-A ref
549 end do
550 end if
551 end do
552 end if
553
554 close (ounit)
555 call da_free_unit(ounit)
556
557 if (trace_use) call da_trace_exit("da_write_obs")
558
559 end subroutine da_write_obs
560
561