Merge remote-tracking branch 'origin/release-v4.6.1'
[WRF.git] / var / da / da_define_structures / da_deallocate_y.inc
blob25fc969836c8bd630789fa6901276f21958ff32e
1 subroutine da_deallocate_y(y)
3    !---------------------------------------------------------------------------
4    ! Purpose: Deallocate arrays used in y and residual obs structures.
5    !
6    ! Method:  Deallocate component in turn.
7    !---------------------------------------------------------------------------
9    implicit none
10    
11    type (y_type), intent(inout)          :: y      ! residual type structure.
12    integer                               :: n,i  ! Loop counter.
15    if (trace_use) call da_trace_entry("da_deallocate_y")
17    !---------------------------------------------------------------------------
18    ! [1.0] Deallocate:
19    !---------------------------------------------------------------------------
21    if (y % nlocal(synop) > 0) deallocate (y % synop)
23    if (y % nlocal(ships) > 0) deallocate (y % ships)
25    if (y % nlocal(metar) > 0) deallocate (y % metar)
27    if (y % nlocal(rain) > 0)  deallocate (y % rain)
29    if (y % nlocal(sound) > 0) then
30       do n = 1, y % nlocal(sound)
31          deallocate (y % sound(n)%u)
32          deallocate (y % sound(n)%v)
33          deallocate (y % sound(n)%t)
34          deallocate (y % sound(n)%q)
35       end do
36       deallocate (y % sound)
37    end if
39    if (y % nlocal(sonde_sfc) > 0) deallocate (y % sonde_sfc)
40       
41    if (y % nlocal(mtgirs) > 0) then
42       do n = 1, y % nlocal(mtgirs)
43          deallocate (y % mtgirs(n)%u)
44          deallocate (y % mtgirs(n)%v)
45          deallocate (y % mtgirs(n)%t)
46          deallocate (y % mtgirs(n)%q)
47       end do
49       deallocate (y % mtgirs)
51    end if
53    if (y % nlocal(tamdar) > 0) then
54       do n = 1, y % nlocal(tamdar)
55          deallocate (y % tamdar(n)%u)
56          deallocate (y % tamdar(n)%v)
57          deallocate (y % tamdar(n)%t)
58          deallocate (y % tamdar(n)%q)
59       end do
61       deallocate (y % tamdar)
62    end if
64    if (y % nlocal(tamdar_sfc) > 0) deallocate (y % tamdar_sfc)
66    if (y % nlocal(pilot) > 0) then
67       do n = 1, y % nlocal(pilot)
68          deallocate (y % pilot(n)%u)
69          deallocate (y % pilot(n)%v)
70       end do
71       deallocate (y % pilot)
72    end if
74    if (y % nlocal(bogus) > 0) then
75       do n = 1, y % nlocal(bogus)
76          deallocate (y % bogus(n)%u)
77          deallocate (y % bogus(n)%v)
78          deallocate (y % bogus(n)%t)
79          deallocate (y % bogus(n)%q)
80       end do
81       deallocate (y % bogus)
82    end if
84    if (y % nlocal(radar) > 0) then
85       do n = 1, y % nlocal(radar)
86          deallocate (y % radar(n)%rv)
87          deallocate (y % radar(n)%rf)
88          if (associated(y%radar(n)%rqv)) deallocate(y%radar(n)%rqv)
89          if (associated(y%radar(n)%rgr)) deallocate(y%radar(n)%rgr)
90          if (associated(y%radar(n)%rsn)) deallocate(y%radar(n)%rsn)
91          if (associated(y%radar(n)%rrn)) deallocate(y%radar(n)%rrn)
92       end do
93       deallocate (y % radar)
94    end if
96    if (y % nlocal(lightning) > 0) then
97       do n = 1, y % nlocal(lightning)
98          deallocate (y % lightning(n)%w)
99          deallocate (y % lightning(n)%div)
100          deallocate (y % lightning(n)%qv)
101       end do
102       deallocate (y % lightning)
103    end if
105    if (y % nlocal(airep) > 0) then
106       do n = 1, y % nlocal(airep)
107          deallocate (y % airep(n)%u)
108          deallocate (y % airep(n)%v)
109          deallocate (y % airep(n)%t)
110          deallocate (y % airep(n)%q)
111       end do
112       deallocate (y % airep)
113    end if
115    if (y % nlocal(geoamv) > 0) then
116       do n=1, y % nlocal(geoamv)
117          deallocate (y % geoamv(n) % u)
118          deallocate (y % geoamv(n) % v)
119       end do
120       deallocate (y % geoamv)
121    end if
123    if (y % nlocal(polaramv) > 0) then
124       do n=1, y % nlocal(polaramv)
125          deallocate (y % polaramv(n) % u)
126          deallocate (y % polaramv(n) % v)
127       end do
128       deallocate (y % polaramv)
129    end if
131    if (y % nlocal(gpspw) > 0) deallocate (y % gpspw)
133    if (y % nlocal(gpsref) > 0) then
134       do n = 1, y % nlocal(gpsref)
135          deallocate (y % gpsref(n)%ref)
136          deallocate (y % gpsref(n)%  p)
137          deallocate (y % gpsref(n)%  t)
138          deallocate (y % gpsref(n)%  q)
139       end do
140       deallocate (y % gpsref)
141    end if
143    if (y % nlocal(gpseph) > 0) then
144       do n = 1, y % nlocal(gpseph)
145          deallocate (y % gpseph(n)%eph)
146       end do
147       deallocate (y % gpseph)
148    end if
150    if (y % nlocal(satem) > 0) then
151       do n = 1, y % nlocal(satem)
152          deallocate (y % satem(n) % thickness)
153       end do
154       deallocate (y % satem)
155    end if
157    if (y % nlocal(ssmi_tb) > 0) deallocate (y % ssmi_tb)
158    if (y % nlocal(ssmi_rv) > 0) deallocate (y % ssmi_rv)
159    if (y % nlocal(pseudo)  > 0) deallocate (y % pseudo)
161    if (y % nlocal(ssmt1) > 0) then
162       do n = 1, y % nlocal(ssmt1)
163          deallocate (y % ssmt1(n) % t)
164       end do
165       deallocate (y % ssmt1)
166    end if
168    if (y % nlocal(ssmt2) > 0) then
169       do n = 1, y % nlocal(ssmt2)
170          deallocate (y % ssmt2(n) % rh)
171       end do
172       deallocate (y % ssmt2)
173    end if
175    if (y % nlocal(qscat) > 0) deallocate (y % qscat)
177    if (y % nlocal(profiler) > 0) then
178       do n = 1, y % nlocal(profiler)
179          deallocate (y % profiler(n)%u)
180          deallocate (y % profiler(n)%v)
181       end do
182       deallocate (y % profiler)
183    end if
185    if (y % nlocal(buoy)  > 0) deallocate (y % buoy)
187    !  radiance:
189    if (y % num_inst > 0) then
190       do i = 1,  y % num_inst
191         if (y % instid(i) % num_rad < 1) cycle
192         ! deallocate (y % instid(i) % ichan)
193         deallocate ( y % instid(i) % tb )
194       end do
195       deallocate (y % instid)
196    end if
197    if (y % nlocal(airsr) > 0) then
198       do n = 1, y % nlocal(airsr)
199          deallocate (y % airsr(n)%t)
200          deallocate (y % airsr(n)%q)
201       end do
202       deallocate (y % airsr)
203    end if
205    if (trace_use) call da_trace_exit("da_deallocate_y")
207 end subroutine da_deallocate_y