da_write_iv_rad_ascii.inc
References to this file elsewhere.
1 subroutine da_write_iv_rad_ascii (ob, iv )
2
3 !---------------------------------------------------------------------------
4 ! Purpose: write out innovation vector structure for radiance data.
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
12 #ifdef RTTOV
13
14 integer :: n ! Loop counter.
15 integer :: i, k ! Index dimension.
16 integer :: nlevelss ! Number of obs levels.
17
18 integer :: ios, innov_rad_unit
19 character(len=30) :: filename
20 integer :: ndomain
21 logical :: ssmis
22
23 if (trace_use) call da_trace_entry("da_write_iv_rad_ascii")
24
25 do i = 1, iv%num_inst
26 if (iv%instid(i)%num_rad < 1) cycle
27
28 ! count number of obs within the loc%proc_domain
29 ! ---------------------------------------------
30 ndomain = 0
31 do n =1,iv%instid(i)%num_rad
32 if (iv%instid(i)%info%proc_domain(1,n)) then
33 ndomain = ndomain + 1
34 end if
35 end do
36
37 #ifdef DM_PARALLEL
38 write(unit=filename, fmt='(a,i2.2)') 'inv_'//trim(iv%instid(i)%rttovid_string)//'.', myproc
39 #else
40 write(unit=filename, fmt='(a)') 'inv_'//trim(iv%instid(i)%rttovid_string)
41 #endif
42
43 call da_get_unit(innov_rad_unit)
44 open(unit=innov_rad_unit,file=trim(filename),form='formatted',iostat=ios)
45 if (ios /= 0 ) then
46 call da_error(__FILE__,__LINE__, &
47 (/"Cannot open innovation radiance file"//filename/))
48 Endif
49 write(unit=innov_rad_unit,fmt='(a,a,i7,a,i5,a)') trim(iv%instid(i)%rttovid_string), &
50 ' number-of-pixels : ', ndomain, &
51 ' channel-number-of-each-pixel : ', iv%instid(i)%nchan, &
52 ' index-of-channels : '
53 write(unit=innov_rad_unit,fmt='(10i5)') iv%instid(i)%ichan
54
55 ssmis= index(iv%instid(i)%rttovid_string,'ssmis') > 0
56 if ( ssmis ) then
57 write(unit=innov_rad_unit,fmt=*) ' pixel-info : i date scanpos landsea_mask elv lat lon satzen satazi ssmis_subinst'
58 else
59 write(unit=innov_rad_unit,fmt=*) ' pixel-info : i date scanpos landsea_mask elv lat lon satzen satazi '
60 end if
61 write(unit=innov_rad_unit,fmt=*) ' grid%xb-surf-info : i t2m mr2m(ppmv) u10 v10 ps ts smois tslb snowh isflg &
62 & soiltyp vegtyp vegfra elev clwp'
63 ndomain = 0
64 do n =1,iv%instid(i)%num_rad
65 if (iv%instid(i)%info%proc_domain(1,n)) then
66 ndomain=ndomain+1
67 if ( ssmis ) then
68 write(unit=innov_rad_unit,fmt='(a,i7,2x,a,i6,i3,f6.0,4f8.2,i3)') 'INFO : ', ndomain, &
69 iv%instid(i)%info%date_char(n), &
70 iv%instid(i)%scanpos(n), &
71 iv%instid(i)%landsea_mask(n), &
72 iv%instid(i)%info%elv(n), &
73 iv%instid(i)%info%lat(1,n), &
74 iv%instid(i)%info%lon(1,n), &
75 iv%instid(i)%satzen(n), &
76 iv%instid(i)%satazi(n), &
77 iv%instid(i)%ssmis_subinst(n)
78 else
79 write(unit=innov_rad_unit,fmt='(a,i7,2x,a,i6,i3,f6.0,4f8.2)') 'INFO : ', ndomain, &
80 iv%instid(i)%info%date_char(n), &
81 iv%instid(i)%scanpos(n), &
82 iv%instid(i)%landsea_mask(n), &
83 iv%instid(i)%info%elv(n), &
84 iv%instid(i)%info%lat(1,n), &
85 iv%instid(i)%info%lon(1,n), &
86 iv%instid(i)%satzen(n), &
87 iv%instid(i)%satazi(n)
88 end if
89 select case (iv%instid(i)%isflg(n))
90 case (0) ;
91 write(unit=innov_rad_unit,fmt='(a,i7,9f10.2,3i3,f8.3,f10.2,f8.3)') ' SEA : ', n, &
92 iv%instid(i)%t2m(n), &
93 iv%instid(i)%mr2m(n), &
94 iv%instid(i)%u10(n), &
95 iv%instid(i)%v10(n), &
96 iv%instid(i)%ps(n), &
97 iv%instid(i)%ts(n), &
98 iv%instid(i)%smois(n), &
99 iv%instid(i)%tslb(n), &
100 iv%instid(i)%snowh(n), &
101 iv%instid(i)%isflg(n), &
102 nint(iv%instid(i)%soiltyp(n)), &
103 nint(iv%instid(i)%vegtyp(n)), &
104 iv%instid(i)%vegfra(n), &
105 iv%instid(i)%elevation(n), &
106 iv%instid(i)%clwp(n)
107 case (1) ;
108 write(unit=innov_rad_unit,fmt='(a,i7,9f10.2,3i3,f8.3,f10.2,f8.3)') ' ICE : ', n, &
109 iv%instid(i)%t2m(n), &
110 iv%instid(i)%mr2m(n), &
111 iv%instid(i)%u10(n), &
112 iv%instid(i)%v10(n), &
113 iv%instid(i)%ps(n), &
114 iv%instid(i)%ts(n), &
115 iv%instid(i)%smois(n), &
116 iv%instid(i)%tslb(n), &
117 iv%instid(i)%snowh(n), &
118 iv%instid(i)%isflg(n), &
119 nint(iv%instid(i)%soiltyp(n)), &
120 nint(iv%instid(i)%vegtyp(n)), &
121 iv%instid(i)%vegfra(n), &
122 iv%instid(i)%elevation(n), &
123 iv%instid(i)%clwp(n)
124 case (2) ;
125 write(unit=innov_rad_unit,fmt='(a,i7,9f10.2,3i3,f8.3,f10.2,f8.3)') 'LAND : ', n, &
126 iv%instid(i)%t2m(n), &
127 iv%instid(i)%mr2m(n), &
128 iv%instid(i)%u10(n), &
129 iv%instid(i)%v10(n), &
130 iv%instid(i)%ps(n), &
131 iv%instid(i)%ts(n), &
132 iv%instid(i)%smois(n), &
133 iv%instid(i)%tslb(n), &
134 iv%instid(i)%snowh(n), &
135 iv%instid(i)%isflg(n), &
136 nint(iv%instid(i)%soiltyp(n)), &
137 nint(iv%instid(i)%vegtyp(n)), &
138 iv%instid(i)%vegfra(n), &
139 iv%instid(i)%elevation(n), &
140 iv%instid(i)%clwp(n)
141 case (3) ;
142 write(unit=innov_rad_unit,fmt='(a,i7,9f10.2,3i3,f8.3,f10.2,f8.3)') 'SNOW : ', n, &
143 iv%instid(i)%t2m(n), &
144 iv%instid(i)%mr2m(n), &
145 iv%instid(i)%u10(n), &
146 iv%instid(i)%v10(n), &
147 iv%instid(i)%ps(n), &
148 iv%instid(i)%ts(n), &
149 iv%instid(i)%smois(n), &
150 iv%instid(i)%tslb(n), &
151 iv%instid(i)%snowh(n), &
152 iv%instid(i)%isflg(n), &
153 nint(iv%instid(i)%soiltyp(n)), &
154 nint(iv%instid(i)%vegtyp(n)), &
155 iv%instid(i)%vegfra(n), &
156 iv%instid(i)%elevation(n), &
157 iv%instid(i)%clwp(n)
158 case (4) ;
159 write(unit=innov_rad_unit,fmt='(a,i7,9f10.2,3i3,f8.3,f10.2,f8.3)') 'MSEA : ', n, &
160 iv%instid(i)%t2m(n), &
161 iv%instid(i)%mr2m(n), &
162 iv%instid(i)%u10(n), &
163 iv%instid(i)%v10(n), &
164 iv%instid(i)%ps(n), &
165 iv%instid(i)%ts(n), &
166 iv%instid(i)%smois(n), &
167 iv%instid(i)%tslb(n), &
168 iv%instid(i)%snowh(n), &
169 iv%instid(i)%isflg(n), &
170 nint(iv%instid(i)%soiltyp(n)), &
171 nint(iv%instid(i)%vegtyp(n)), &
172 iv%instid(i)%vegfra(n), &
173 iv%instid(i)%elevation(n), &
174 iv%instid(i)%clwp(n)
175 case (5) ;
176 write(unit=innov_rad_unit,fmt='(a,i7,9f10.2,3i3,f8.3,f10.2,f8.3)') 'MICE : ', n, &
177 iv%instid(i)%t2m(n), &
178 iv%instid(i)%mr2m(n), &
179 iv%instid(i)%u10(n), &
180 iv%instid(i)%v10(n), &
181 iv%instid(i)%ps(n), &
182 iv%instid(i)%ts(n), &
183 iv%instid(i)%smois(n), &
184 iv%instid(i)%tslb(n), &
185 iv%instid(i)%snowh(n), &
186 iv%instid(i)%isflg(n), &
187 nint(iv%instid(i)%soiltyp(n)), &
188 nint(iv%instid(i)%vegtyp(n)), &
189 iv%instid(i)%vegfra(n), &
190 iv%instid(i)%elevation(n), &
191 iv%instid(i)%clwp(n)
192 case (6) ;
193 write(unit=innov_rad_unit,fmt='(a,i7,9f10.2,3i3,f8.3,f10.2,f8.3)') 'MLND : ', n, &
194 iv%instid(i)%t2m(n), &
195 iv%instid(i)%mr2m(n), &
196 iv%instid(i)%u10(n), &
197 iv%instid(i)%v10(n), &
198 iv%instid(i)%ps(n), &
199 iv%instid(i)%ts(n), &
200 iv%instid(i)%smois(n), &
201 iv%instid(i)%tslb(n), &
202 iv%instid(i)%snowh(n), &
203 iv%instid(i)%isflg(n), &
204 nint(iv%instid(i)%soiltyp(n)), &
205 nint(iv%instid(i)%vegtyp(n)), &
206 iv%instid(i)%vegfra(n), &
207 iv%instid(i)%elevation(n), &
208 iv%instid(i)%clwp(n)
209 case (7) ;
210 write(unit=innov_rad_unit,fmt='(a,i7,9f10.2,3i3,f8.3,f10.2,f8.3)') 'MSNO : ', n, &
211 iv%instid(i)%t2m(n), &
212 iv%instid(i)%mr2m(n), &
213 iv%instid(i)%u10(n), &
214 iv%instid(i)%v10(n), &
215 iv%instid(i)%ps(n), &
216 iv%instid(i)%ts(n), &
217 iv%instid(i)%smois(n), &
218 iv%instid(i)%tslb(n), &
219 iv%instid(i)%snowh(n), &
220 iv%instid(i)%isflg(n), &
221 nint(iv%instid(i)%soiltyp(n)), &
222 nint(iv%instid(i)%vegtyp(n)), &
223 iv%instid(i)%vegfra(n), &
224 iv%instid(i)%elevation(n), &
225 iv%instid(i)%clwp(n)
226 end select
227
228 write(unit=innov_rad_unit,fmt='(a)') 'OBS : '
229 write(unit=innov_rad_unit,fmt='(10f11.2)') ob%instid(i)%tb(:,n)
230 write(unit=innov_rad_unit,fmt='(a)') 'BAK : '
231 write(unit=innov_rad_unit,fmt='(10f11.2)') iv%instid(i)%tb_xb(:,n)
232 write(unit=innov_rad_unit,fmt='(a)') 'IVBC : '
233 write(unit=innov_rad_unit,fmt='(10f11.2)') iv%instid(i)%tb_inv(:,n)
234 write(unit=innov_rad_unit,fmt='(a)') 'EMS : '
235 write(unit=innov_rad_unit,fmt='(10f11.2)') iv%instid(i)%emiss(1:iv%instid(i)%nchan,n)
236 write(unit=innov_rad_unit,fmt='(a)') 'ERR : '
237 write(unit=innov_rad_unit,fmt='(10f11.2)') iv%instid(i)%tb_error(:,n)
238 write(unit=innov_rad_unit,fmt='(a)') 'QC : '
239 write(unit=innov_rad_unit,fmt='(10i11)') iv%instid(i)%tb_qc(:,n)
240
241 if (write_profile) then
242 nlevelss = iv%instid(i)%nlevels
243 write(unit=innov_rad_unit,fmt=*) &
244 'RTM_level pres(mb) T(k) Q(ppmv) WRF_level pres(mb) T(k) q(g/kg) clw(g/kg) rain(g/kg)'
245 do k=kts,kte
246 if (k <= nlevelss) then
247 write(unit=innov_rad_unit,fmt='(i3,f10.2,f8.2,e11.4,i3,f10.2,f8.2,3e11.4)') &
248 k, & ! RTTOV levels
249 coefs(i) % ref_prfl_p(k) , &
250 iv%instid(i)%t(k,n) , &
251 iv%instid(i)%mr(k,n), &
252 k, & ! WRF model levels
253 iv%instid(i)%pm(k,n) , &
254 iv%instid(i)%tm(k,n) , &
255 iv%instid(i)%qm(k,n)*1000 , &
256 iv%instid(i)%qcw(k,n)*1000.0, &
257 iv%instid(i)%qrn(k,n)*1000.0
258 else
259 write(unit=innov_rad_unit,fmt='(32x,i3,f10.2,f8.2,3e11.4)') k, &
260 iv%instid(i)%pm(k,n) , &
261 iv%instid(i)%tm(k,n) , &
262 iv%instid(i)%qm(k,n)*1000 , &
263 iv%instid(i)%qcw(k,n)*1000.0, &
264 iv%instid(i)%qrn(k,n)*1000.0
265 ! iv%instid(i)%qci(k,n)*1000.0, &
266 ! iv%instid(i)%qsn(k,n)*1000.0, &
267 ! iv%instid(i)%qgr(k,n)*1000.0
268 end if
269 end do ! end loop profile
270 end if ! end if write_profile
271 end if ! end if proc_domain
272 end do ! end do pixels
273 close(unit=innov_rad_unit)
274 call da_free_unit(innov_rad_unit)
275 end do ! end do instruments
276
277 if (trace_use) call da_trace_exit("da_write_iv_rad_ascii")
278
279 #endif
280
281 end subroutine da_write_iv_rad_ascii
282