da_zero_y.inc

References to this file elsewhere.
1 subroutine da_zero_y( iv, y )
2 
3    !---------------------------------------------------------------------------
4    ! Purpose: Initialises the Y-array
5    !---------------------------------------------------------------------------
6 
7    implicit none
8    
9    type (ob_type), intent(in)            :: iv      ! Ob type input.
10    type (y_type), intent(inout)          :: y       ! Residual type structure.
11 
12    integer                               :: n       ! Loop counter.
13    integer                               :: nlevels ! Number of levels.
14 
15    if (trace_use) call da_trace_entry("da_zero_y")
16 
17    !---------------------------------------------------------------------------
18    ! [1.0] Copy number of observations:
19    !---------------------------------------------------------------------------
20 
21    y % total_obs = iv % total_obs
22    y % num_synop = iv % num_synop
23    y % num_ships = iv % num_ships
24    y % num_metar = iv % num_metar
25    y % num_sound = iv % num_sound
26    y % num_pilot = iv % num_pilot
27    y % num_airep = iv % num_airep
28    y % num_satem = iv % num_satem
29    y % num_geoamv = iv % num_geoamv
30    y % num_polaramv = iv % num_polaramv
31    y % num_gpspw  = iv % num_gpspw
32    y % num_gpsref = iv % num_gpsref
33    y % num_ssmi_tb = iv % num_ssmi_tb
34    y % num_ssmi_retrieval = iv % num_ssmi_retrieval
35    y % num_ssmt1 = iv % num_ssmt1
36    y % num_ssmt2 = iv % num_ssmt2
37    y % num_pseudo = num_pseudo
38    y % num_qscat = iv % num_qscat
39    y % num_profiler = iv % num_profiler
40    y % num_buoy     = iv % num_buoy    
41    y % num_radar    = iv % num_radar   
42    y % num_bogus    = iv % num_bogus   
43    y % num_airsr    = iv % num_airsr   
44 
45    !---------------------------------------------------------------------------
46    ! [2.0] Allocate:
47    !---------------------------------------------------------------------------
48 
49    ! Initialize synops:
50 
51    if ( y % num_synop > 0 ) then
52       y % synop(1:y % num_synop) % u = 0.0
53       y % synop(1:y % num_synop) % v = 0.0
54       y % synop(1:y % num_synop) % t = 0.0
55       y % synop(1:y % num_synop) % p = 0.0
56       y % synop(1:y % num_synop) % q = 0.0
57    end if
58 
59    ! Initialize ships:
60 
61    if ( y % num_ships > 0 ) then
62       y % ships(1:y % num_ships) % u = 0.0
63       y % ships(1:y % num_ships) % v = 0.0
64       y % ships(1:y % num_ships) % t = 0.0
65       y % ships(1:y % num_ships) % p = 0.0
66       y % ships(1:y % num_ships) % q = 0.0
67    end if
68 
69    ! Initialize metars:
70 
71    if ( y % num_metar > 0 ) then
72       y % metar(1:y % num_metar) % u = 0.0
73       y % metar(1:y % num_metar) % v = 0.0
74       y % metar(1:y % num_metar) % t = 0.0
75       y % metar(1:y % num_metar) % p = 0.0
76       y % metar(1:y % num_metar) % q = 0.0
77    end if
78 
79    ! Initialize Geo. AMV's:
80 
81    if ( y % num_geoamv > 0 ) then
82       do n = 1, y % num_geoamv
83        nlevels = iv % geoamv(n) % info % levels
84        y % geoamv(n) % u(1:nlevels) = 0.0
85        y % geoamv(n) % v(1:nlevels) = 0.0
86       end do
87    end if
88 
89    ! Initialize Polat AMVs:
90 
91    if ( y % num_polaramv > 0 ) then
92       do n = 1, y % num_polaramv
93        nlevels = iv % polaramv(n) % info % levels
94        y % polaramv(n) % u(1:nlevels) = 0.0
95        y % polaramv(n) % v(1:nlevels) = 0.0
96       end do
97    end if
98 
99    ! Initialize GPS TPW:
100 
101    if ( y % num_gpspw > 0 ) then
102       y % gpspw(1:y % num_gpspw) % tpw = 0.0
103    end if
104 
105    ! Initialize GPS REFRACTIVITY:
106 
107    if ( y % num_gpsref > 0 ) then
108       do n = 1, y % num_gpsref
109          nlevels = iv % gpsref(n) % info % levels
110          y % gpsref(n) % ref(1:nlevels) = 0.0
111          y % gpsref(n) %   p(1:nlevels) = 0.0
112          y % gpsref(n) %   t(1:nlevels) = 0.0
113          y % gpsref(n) %   q(1:nlevels) = 0.0
114       end do
115    end if
116 
117    ! Initialize sondes:
118 
119    if ( y % num_sound > 0 ) then
120       do n = 1, y % num_sound
121          nlevels = iv % sound(n) % info % levels
122 
123          y % sound(n) % u(1:nlevels) = 0.0
124          y % sound(n) % v(1:nlevels) = 0.0
125          y % sound(n) % t(1:nlevels) = 0.0
126          y % sound(n) % q(1:nlevels) = 0.0
127 
128          ! Initialize sonde_sfc
129 
130          y % sonde_sfc(n) % u = 0.0
131          y % sonde_sfc(n) % v = 0.0
132          y % sonde_sfc(n) % t = 0.0
133          y % sonde_sfc(n) % p = 0.0
134          y % sonde_sfc(n) % q = 0.0
135       end do
136    end if
137 
138    if ( y % num_bogus > 0 ) then
139       do n = 1, y % num_bogus
140          nlevels = iv % bogus(n) % info % levels
141 
142          y % bogus(n) % u(1:nlevels) = 0.0
143          y % bogus(n) % v(1:nlevels) = 0.0
144          y % bogus(n) % t(1:nlevels) = 0.0
145          y % bogus(n) % q(1:nlevels) = 0.0
146          y % bogus(n) % slp          = 0.0
147       end do
148    end if
149 
150    ! Initialize pilots:
151 
152    if ( y % num_pilot > 0 ) then
153       do n = 1, y % num_pilot
154          nlevels = iv % pilot(n) % info % levels
155 
156          y % pilot(n) % u(1:nlevels) = 0.0
157          y % pilot(n) % v(1:nlevels) = 0.0
158       end do
159    end if
160 
161    ! Initialize AIREPs:
162 
163    if ( y % num_airep > 0 ) then
164       do n = 1, y % num_airep
165          nlevels = iv % airep(n) % info % levels
166 
167          y % airep(n) % u(1:nlevels) = 0.0
168          y % airep(n) % v(1:nlevels) = 0.0
169          y % airep(n) % t(1:nlevels) = 0.0
170       end do
171    end if
172 
173    ! Initialize satem:
174 
175    if ( y % num_satem > 0 ) then
176       do n = 1, y % num_satem
177          nlevels = iv % satem(n) % info % levels
178 
179          y % satem(n) % thickness(1:nlevels) = 0.0
180       end do
181    end if
182 
183    if ( y % num_ssmi_tb > 0 ) then
184       y % ssmi_tb(1:y % num_ssmi_tb) % tb19v = 0.0
185       y % ssmi_tb(1:y % num_ssmi_tb) % tb19h = 0.0
186       y % ssmi_tb(1:y % num_ssmi_tb) % tb22v = 0.0
187       y % ssmi_tb(1:y % num_ssmi_tb) % tb37v = 0.0
188       y % ssmi_tb(1:y % num_ssmi_tb) % tb37h = 0.0
189       y % ssmi_tb(1:y % num_ssmi_tb) % tb85v = 0.0
190       y % ssmi_tb(1:y % num_ssmi_tb) % tb85h = 0.0
191    end if
192 
193    if ( y % num_ssmi_retrieval > 0 ) then
194         y % ssmi_retrieval(1:y % num_ssmi_retrieval) % tpw = 0.0
195         y % ssmi_retrieval(1:y % num_ssmi_retrieval) % Speed = 0.0
196    end if
197    
198    if ( y % num_ssmt1 > 0 ) then
199       do n = 1, y % num_ssmt1
200          nlevels = iv % ssmt1(n) % info % levels
201          y % ssmt1(n) % t(1:nlevels) = 0.0
202       end do
203    end if
204    
205    if ( y % num_ssmt2 > 0 ) then
206       do n = 1, y % num_ssmt2
207          nlevels = iv % ssmt2(n) % info % levels
208          y % ssmt2(n) % rh(1:nlevels) = 0.0
209       end do
210    end if
211    
212    if ( y % num_pseudo > 0 ) then
213         y % pseudo(1:y % num_pseudo) % u = 0.0
214         y % pseudo(1:y % num_pseudo) % v = 0.0
215         y % pseudo(1:y % num_pseudo) % t = 0.0
216         y % pseudo(1:y % num_pseudo) % p = 0.0
217         y % pseudo(1:y % num_pseudo) % q = 0.0
218    end if
219 
220    !  Initialize Quikscat:
221 
222    if ( y % num_qscat > 0 ) then
223       y % qscat(1:y % num_qscat) % u = 0.0
224       y % qscat(1:y % num_qscat) % v = 0.0
225    end if
226       
227    ! Initialize profilers:
228 
229    if ( y % num_profiler > 0 ) then
230       do n = 1, y % num_profiler
231          nlevels = iv % profiler(n) % info % levels
232 
233          y % profiler(n) % u(1:nlevels) = 0.0
234          y % profiler(n) % v(1:nlevels) = 0.0
235       end do
236    end if
237 
238    ! Initialize buoy:
239 
240    if ( y % num_buoy > 0 ) then
241       y % buoy(1:y % num_buoy) % u = 0.0
242       y % buoy(1:y % num_buoy) % v = 0.0
243       y % buoy(1:y % num_buoy) % t = 0.0
244       y % buoy(1:y % num_buoy) % p = 0.0
245       y % buoy(1:y % num_buoy) % q = 0.0
246    end if
247 
248    ! Initialize buoy:
249    if ( y % num_radar > 0 ) then
250       do n = 1, y % num_radar
251          nlevels = iv % radar(n) % info % levels
252 
253          y % radar(n) % rv(1:nlevels) = 0.0
254          y % radar(n) % rf(1:nlevels) = 0.0
255       end do
256    end if
257    ! Initialize AIRS retrievals:
258 
259    if ( y % num_airsr > 0 ) then
260       do n = 1, y % num_airsr
261          nlevels = iv % airsr(n) % info % levels
262 
263          y % airsr(n) % t(1:nlevels) = 0.0
264          y % airsr(n) % q(1:nlevels) = 0.0
265       end do
266    end if
267 
268 
269    if (trace_use) call da_trace_exit("da_zero_y")
270 
271 end subroutine da_zero_y        
272 
273