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