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