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