1 | pro getturb, saveps=saveps |
---|
2 | |
---|
3 | |
---|
4 | |
---|
5 | ;---------------------------------- |
---|
6 | ; USE: getturb |
---|
7 | ; getturb, saveps='false' |
---|
8 | ;---------------------------------- |
---|
9 | |
---|
10 | |
---|
11 | history_interval_s = 100. |
---|
12 | smoothampl=3700/history_interval_s |
---|
13 | smoothampl=0. |
---|
14 | |
---|
15 | ; |
---|
16 | ; constantes |
---|
17 | ; |
---|
18 | p0=610. & t0=220. & r_cp=1/4.4 & grav=3.72 & R=192. |
---|
19 | |
---|
20 | ; |
---|
21 | ; graphics definition |
---|
22 | ; |
---|
23 | if (n_elements(saveps) eq 0) then saveps='true' |
---|
24 | if (saveps eq 'false') then begin |
---|
25 | ;!p.multi=[0,3,2] |
---|
26 | !P.CHARSIZE=2. |
---|
27 | WINDOW, /PIXMAP & WDELETE & DEVICE,BYPASS_TRANSLATION=0,DECOMPOSED=0,RETAIN=2 |
---|
28 | endif else begin |
---|
29 | PREF_SET, 'IDL_PATH', '/home/spiga/Save/SOURCES/IDL/fsc_psconfig:<IDL_DEFAULT>', /COMMIT |
---|
30 | endelse |
---|
31 | |
---|
32 | ; |
---|
33 | ; retrieve fields |
---|
34 | ; |
---|
35 | openr,unit,'getturb.dat',/get_lun,error=err |
---|
36 | IF (err ne 0) THEN BEGIN |
---|
37 | |
---|
38 | ; |
---|
39 | ; input files |
---|
40 | ; |
---|
41 | OPENR, 22, 'input_coord' & READF, 22, lonu & READF, 22, latu & READF, 22, lsu & READF, 22, lctu & CLOSE, 22 |
---|
42 | OPENR, 23, 'input_more' & READF, 23, hgtu, tsurfu & CLOSE, 23 |
---|
43 | |
---|
44 | ; |
---|
45 | ; get fields |
---|
46 | ; |
---|
47 | domain='d01' & filesWRF = FindFile('wrfout_'+domain+'_????-??-??_??:??:??') & nf=n_elements(filesWRF) |
---|
48 | |
---|
49 | ; |
---|
50 | ; get dimensions |
---|
51 | ; |
---|
52 | id=ncdf_open(filesWRF(0)) |
---|
53 | NCDF_DIMINQ, id, NCDF_DIMID(id, 'west_east' ), toto, nx & NCDF_DIMINQ, id, NCDF_DIMID(id, 'south_north' ), toto, ny |
---|
54 | NCDF_DIMINQ, id, NCDF_DIMID(id, 'bottom_top' ), toto, nz & NCDF_DIMINQ, id, NCDF_DIMID(id, 'Time' ), toto, nt |
---|
55 | NCDF_CLOSE, id |
---|
56 | |
---|
57 | ; |
---|
58 | ; prepare loop |
---|
59 | ; |
---|
60 | nloop1 = nf-1 & nloop2 = nt & yeye = 0 |
---|
61 | localtime = lctu + history_interval_s*findgen(nloop1*nloop2)/3700. |
---|
62 | wt = fltarr(nz,nloop1*nloop2) & tke = fltarr(nz,nloop1*nloop2) & ztke = fltarr(nz,nloop1*nloop2) & t = fltarr(nz,nloop1*nloop2) |
---|
63 | p = fltarr(nz) & ph = fltarr(nz) & pht = fltarr(nz,nloop1*nloop2) & pt = fltarr(nz,nloop1*nloop2) & stst = fltarr(nz,nloop1*nloop2) |
---|
64 | |
---|
65 | ; |
---|
66 | ; loop loop |
---|
67 | ; |
---|
68 | for loop = 0, nloop1-1 do begin |
---|
69 | timetime = SYSTIME(1) |
---|
70 | for loop2 = 0, nloop2-1 do begin |
---|
71 | |
---|
72 | ; t' = t - <t> |
---|
73 | ; ------------ |
---|
74 | yeyeye = 1. |
---|
75 | tprime = getget(filesWRF(loop), 'T', anomaly=yeyeye, count=[0,0,0,1], offset=[0,0,0,loop2]) ;; t' = t - <t> |
---|
76 | t(*,yeye) = t0 + TEMPORARY(yeyeye) |
---|
77 | ; w' = w |
---|
78 | ; ------ |
---|
79 | wprime = getget(filesWRF(loop), 'W', count=[0,0,0,1], offset=[0,0,0,loop2]) |
---|
80 | ; tke = 0.5 ( <u'^2> + <v'^2> + <w'^2> ) ; u' = u ; v' = v |
---|
81 | ; -------------------------------------------------------- |
---|
82 | ztke(*,yeye) = 0.5 * TOTAL(TOTAL(wprime^2,1),1) / float(nx) / float(ny) |
---|
83 | tke(*,yeye) = ztke(*,yeye) + $ |
---|
84 | 0.5 * ( $ |
---|
85 | TOTAL(TOTAL(getget(filesWRF(loop), 'U', count=[0,0,0,1], offset=[0,0,0,loop2])^2,1),1) + $ |
---|
86 | TOTAL(TOTAL(getget(filesWRF(loop), 'V', count=[0,0,0,1], offset=[0,0,0,loop2])^2,1),1) $ |
---|
87 | ) / float(nx) / float(ny) |
---|
88 | ; <w't'> |
---|
89 | ; ------ |
---|
90 | wt(*,yeye) = TOTAL(TOTAL(TEMPORARY(tprime) * TEMPORARY(wprime),1),1) / float(nx) / float(ny) |
---|
91 | ; p & ph |
---|
92 | ; ------ |
---|
93 | if (loop + loop2 eq 0) then nloopbeware = nloop2-1 else nloopbeware = nloop2 ; 1ere valeur vaut 0 |
---|
94 | pht(*,yeye) = TOTAL(TOTAL(getget(filesWRF(loop), 'PHTOT', count=[0,0,0,1], offset=[0,0,0,loop2]),1),1) / float(nx) / float(ny) / 1000. / 3.72 |
---|
95 | pt(*,yeye) = TOTAL(TOTAL(getget(filesWRF(loop), 'PTOT' , count=[0,0,0,1], offset=[0,0,0,loop2]),1),1) / float(nx) / float(ny) |
---|
96 | ph = TEMPORARY(ph) + pht(*,yeye) / nloopbeware / nloop1 |
---|
97 | p = TEMPORARY(p ) + pt(*,yeye) / nloop2 / nloop1 |
---|
98 | ; static stability |
---|
99 | ; ---------------- |
---|
100 | stst(*,yeye) = DERIV( reform(pht(*,yeye)) - hgtu/1000. , reform(t(*,yeye)) * ( reform(pt(*,yeye)) /p0 )^r_cp ) + 1000.*grav / (R / r_cp) ;; 4.9 dans Hinson |
---|
101 | ; loop count |
---|
102 | ; --------- |
---|
103 | yeye = TEMPORARY(yeye) + 1 |
---|
104 | |
---|
105 | endfor |
---|
106 | print, 'file '+string(loop+1,'(I0)'), SYSTIME(1) - timetime, ' s' |
---|
107 | endfor |
---|
108 | h = TEMPORARY(ph) - hgtu/1000. ;; altitude above ground |
---|
109 | ht = TEMPORARY(pht) - hgtu/1000. |
---|
110 | ; |
---|
111 | ; save |
---|
112 | ; |
---|
113 | save, wt, tke, ztke, h, ht, t, p, pt, stst, localtime, filename='getturb.dat' |
---|
114 | |
---|
115 | ENDIF ELSE BEGIN |
---|
116 | |
---|
117 | print, 'OK, file is here' |
---|
118 | restore, filename='getturb.dat' |
---|
119 | |
---|
120 | ENDELSE |
---|
121 | |
---|
122 | ; |
---|
123 | ; smooth smooth |
---|
124 | ; |
---|
125 | wt = SMOOTH(TEMPORARY(wt), [0,smoothampl], /EDGE_TRUNCATE) |
---|
126 | tke = SMOOTH(TEMPORARY(tke), [0,smoothampl], /EDGE_TRUNCATE) |
---|
127 | ztke = SMOOTH(TEMPORARY(ztke), [0,smoothampl], /EDGE_TRUNCATE) |
---|
128 | |
---|
129 | |
---|
130 | ;*******************; |
---|
131 | ;*******************; |
---|
132 | ; PLOTS PLOTS PLOTS ; |
---|
133 | ;*******************; |
---|
134 | ;*******************; |
---|
135 | |
---|
136 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
---|
137 | zefield = transpose(tke) |
---|
138 | zex = localtime |
---|
139 | zey = h |
---|
140 | set_name = 'TKE.ps' |
---|
141 | set_title = "Turbulent Kinetic Energy 0.5[<u'!U2!N>+<v'!U2!N>+<w'!U2!N>] (m!U2!N.s!U-2!N)" |
---|
142 | set_titlex = 'Local Time (h)' |
---|
143 | set_titley = 'Altitude above surface (km)' |
---|
144 | set_subtitle = 'Mean over the simulation domain' |
---|
145 | set_xrange = [8.,18.] |
---|
146 | set_yrange = [0.,10.] |
---|
147 | set_tickx = 1. |
---|
148 | set_ticky = 1. |
---|
149 | minval = 0. |
---|
150 | maxval = 20. ;15. |
---|
151 | nlev = maxval-minval |
---|
152 | pal = 22 |
---|
153 | rrr = 'no' |
---|
154 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
---|
155 | if (saveps eq 'true') then PS_Start, FILENAME=set_name |
---|
156 | !P.Charsize = 1.2 |
---|
157 | ;; 0. levels |
---|
158 | lev = minval + (maxval-minval)*findgen(nlev+1)/float(nlev) & if (minval ne 0.) then lev = lev[where(lev ne 0.)] |
---|
159 | ;;; 1. background |
---|
160 | loadct, 0 & contour, /NODATA, zefield, zex, zey, xtitle=set_titlex, xrange=set_xrange, xtickinterval=set_tickx, ytitle=set_titley, yrange=set_yrange, ytickinterval=set_ticky, title=set_title, subtitle=set_subtitle, color=0 |
---|
161 | ;; 2. color field |
---|
162 | loadct, pal & if (rrr eq 'yes') then TVLCT, r, g, b, /Get & if (rrr eq 'yes') then TVLCT, Reverse(r), Reverse(g), Reverse(b) |
---|
163 | contour, zefield, zex, zey, levels=lev, c_labels=findgen(n_elements(lev))*0.+1., /overplot, /cell_fill |
---|
164 | ;; 3. contour field |
---|
165 | loadct, 0 & contour, zefield, zex, zey, levels=lev, c_labels=findgen(n_elements(lev))*0.+1., /noerase, xtitle=set_titlex, xrange=set_xrange, xtickinterval=set_tickx, ytitle=set_titley, yrange=set_yrange, ytickinterval=set_ticky, title=set_title, subtitle=set_subtitle, color=0, C_LINESTYLE = (lev LT 0.0) |
---|
166 | ;; 4. choose output |
---|
167 | if (saveps eq 'true') then PS_End, /PNG |
---|
168 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
---|
169 | |
---|
170 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
---|
171 | zefield = transpose(ztke) |
---|
172 | ;zefield = 100.*transpose(ztke)/transpose(tke) & zefield[where(transpose(tke) lt 1.)]=0. |
---|
173 | zex = localtime |
---|
174 | zey = h |
---|
175 | set_name = 'zTKE.ps' |
---|
176 | set_title = "Vertical Turbulent Kinetic Energy 0.5[<w'!U2!N>] (m!U2!N.s!U-2!N)" |
---|
177 | set_titlex = 'Local Time (h)' |
---|
178 | set_titley = 'Altitude above surface (km)' |
---|
179 | set_subtitle = 'Mean over the simulation domain' |
---|
180 | set_xrange = [8.,18.] |
---|
181 | set_yrange = [0.,10.] |
---|
182 | set_tickx = 1. |
---|
183 | set_ticky = 1. |
---|
184 | minval = 0. |
---|
185 | maxval = 14. ;10. |
---|
186 | nlev = maxval-minval |
---|
187 | pal = 22 |
---|
188 | rrr = 'no' |
---|
189 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
---|
190 | if (saveps eq 'true') then PS_Start, FILENAME=set_name |
---|
191 | !P.Charsize = 1.2 |
---|
192 | ;; 0. levels |
---|
193 | lev = minval + (maxval-minval)*findgen(nlev+1)/float(nlev) & if (minval ne 0.) then lev = lev[where(lev ne 0.)] |
---|
194 | ;;; 1. background |
---|
195 | loadct, 0 & contour, /NODATA, zefield, zex, zey, xtitle=set_titlex, xrange=set_xrange, xtickinterval=set_tickx, ytitle=set_titley, yrange=set_yrange, ytickinterval=set_ticky, title=set_title, subtitle=set_subtitle, color=0 |
---|
196 | ;; 2. color field |
---|
197 | loadct, pal & if (rrr eq 'yes') then TVLCT, r, g, b, /Get & if (rrr eq 'yes') then TVLCT, Reverse(r), Reverse(g), Reverse(b) |
---|
198 | contour, zefield, zex, zey, levels=lev, c_labels=findgen(n_elements(lev))*0.+1., /overplot, /cell_fill |
---|
199 | ;; 3. contour field |
---|
200 | loadct, 0 & contour, zefield, zex, zey, levels=lev, c_labels=findgen(n_elements(lev))*0.+1., /noerase, xtitle=set_titlex, xrange=set_xrange, xtickinterval=set_tickx, ytitle=set_titley, yrange=set_yrange, ytickinterval=set_ticky, title=set_title, subtitle=set_subtitle, color=0, C_LINESTYLE = (lev LT 0.0) |
---|
201 | ;; 4. choose output |
---|
202 | if (saveps eq 'true') then PS_End, /PNG |
---|
203 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
---|
204 | |
---|
205 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
---|
206 | zefield = transpose(wt) |
---|
207 | zex = localtime |
---|
208 | zey = h |
---|
209 | set_name = 'HF.ps' |
---|
210 | set_title = "Vertical Eddy Heat Flux <w'!7h!3'> (K.m.s!U-1!N)" |
---|
211 | set_titlex = 'Local Time (h)' |
---|
212 | set_titley = 'Altitude above surface (km)' |
---|
213 | set_subtitle = 'Mean over the simulation domain' |
---|
214 | set_xrange = [8.,18.] |
---|
215 | set_yrange = [0.,10.] |
---|
216 | set_tickx = 1. |
---|
217 | set_ticky = 1. |
---|
218 | minval = -2. |
---|
219 | maxval = 2. |
---|
220 | nlev = floor(maxval-minval)*10 |
---|
221 | pal = 33 ;4 |
---|
222 | rrr = 'no' |
---|
223 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
---|
224 | if (saveps eq 'true') then PS_Start, FILENAME=set_name |
---|
225 | !P.Charsize = 1.2 |
---|
226 | ;; 0. levels |
---|
227 | lev = minval + (maxval-minval)*findgen(nlev+1)/float(nlev) & if (minval ne 0.) then lev = lev[where(lev ne 0.)] |
---|
228 | ;;; 1. background |
---|
229 | loadct, 0 & contour, /NODATA, zefield, zex, zey, xtitle=set_titlex, xrange=set_xrange, xtickinterval=set_tickx, ytitle=set_titley, yrange=set_yrange, ytickinterval=set_ticky, title=set_title, subtitle=set_subtitle, color=0 |
---|
230 | ;; 2. color field |
---|
231 | loadct, pal & if (rrr eq 'yes') then TVLCT, r, g, b, /Get & if (rrr eq 'yes') then TVLCT, Reverse(r), Reverse(g), Reverse(b) |
---|
232 | ;;;-------------------------------------------------------------------------------------------------------------------------------- |
---|
233 | ;;; WHITE ZONE - 1. get location of interval in the CT - 2. change the CT to have a white zone |
---|
234 | ulim=0.09 & dlim=-0.09 & w=where(lev le dlim) & n1=w[n_elements(w)-1] & w=where(lev ge ulim) & n2=w[0] & yy=BYTSCL(lev) & nd=yy[n1] & nu=yy[n2]-5 |
---|
235 | nu = nd + (nu-nd)/2 ;; otherwise the interval is too large (because we removed 0) |
---|
236 | TVLCT, r, g, b, /Get & r[nd:nu]=255 & g[nd:nu]=255 & b[nd:nu]=255 & TVLCT, r, g, b |
---|
237 | ;;;-------------------------------------------------------------------------------------------------------------------------------- |
---|
238 | contour, zefield, zex, zey, levels=lev, c_labels=findgen(n_elements(lev))*0.+1., /overplot, /cell_fill |
---|
239 | ;; 3. contour field |
---|
240 | loadct, 0 & contour, zefield, zex, zey, levels=lev, c_labels=findgen(n_elements(lev))*0.+1., /noerase, xtitle=set_titlex, xrange=set_xrange, xtickinterval=set_tickx, ytitle=set_titley, yrange=set_yrange, ytickinterval=set_ticky, title=set_title, subtitle=set_subtitle, color=0, C_LINESTYLE = (lev LT 0.0) |
---|
241 | ;; 4. choose output |
---|
242 | if (saveps eq 'true') then PS_End, /PNG |
---|
243 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
---|
244 | |
---|
245 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
---|
246 | zefield = t |
---|
247 | zey = ht |
---|
248 | set_name = 'T.ps' |
---|
249 | set_title = "Potential Temperature (K)" |
---|
250 | set_titlex = 'Potential Temperature (K)' |
---|
251 | set_titley = 'Altitude above surface (km)' |
---|
252 | set_subtitle = 'Mean over the simulation domain' |
---|
253 | set_xrange = [min(t),max(t)] |
---|
254 | set_yrange = [0.,10.] |
---|
255 | set_tickx = 5. |
---|
256 | set_ticky = 1. |
---|
257 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
---|
258 | localtimes = [9,10,11,12,13,14,15,16,17,18] |
---|
259 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
---|
260 | if (saveps eq 'true') then PS_Start, FILENAME=set_name |
---|
261 | !P.Charsize = 1.2 |
---|
262 | altlin=0 & loadct, 0 |
---|
263 | user_lt=localtimes[0] & yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt)))) & nntt = yeah(0) |
---|
264 | plot, zefield(*,nntt), zey(*,nntt), xtitle=set_titlex, xrange=set_xrange, xtickinterval=set_tickx, ytitle=set_titley, yrange=set_yrange, ytickinterval=set_ticky, title=set_title, subtitle=set_subtitle, color=0, linestyle=altlin |
---|
265 | for ll = 1, n_elements(localtimes)-1 do begin |
---|
266 | CASE altlin OF |
---|
267 | 0: altlin=1 |
---|
268 | 1: altlin=0 |
---|
269 | ENDCASE |
---|
270 | user_lt=localtimes[ll] & yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt)))) & nntt = yeah(0) |
---|
271 | if (nntt ne -1) then oplot, zefield(*,nntt), zey(*,nntt), linestyle=altlin |
---|
272 | endfor |
---|
273 | if (saveps eq 'true') then PS_End, /PNG |
---|
274 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
---|
275 | |
---|
276 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
---|
277 | zefield = stst |
---|
278 | zey = ht |
---|
279 | set_name = 'STST.ps' |
---|
280 | set_title = 'Static stability (K.m!U-1!N)' |
---|
281 | set_titlex = 'Static stability (K.m!U-1!N)' |
---|
282 | set_titley = 'Altitude above surface (km)' |
---|
283 | set_subtitle = 'Mean over the simulation domain' |
---|
284 | set_xrange = [-1.,5.] |
---|
285 | set_yrange = [0.,10.] |
---|
286 | set_tickx = 1. |
---|
287 | set_ticky = 1. |
---|
288 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
---|
289 | localtimes = [9,11,13,15,17] |
---|
290 | localtimes = [17] |
---|
291 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
---|
292 | if (saveps eq 'true') then PS_Start, FILENAME=set_name |
---|
293 | !P.Charsize = 1.2 |
---|
294 | altlin=0 & loadct, 0 |
---|
295 | user_lt=localtimes[0] & yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt)))) & nntt = yeah(0) |
---|
296 | plot, zefield(*,nntt), zey(*,nntt), xtitle=set_titlex, xrange=set_xrange, xtickinterval=set_tickx, ytitle=set_titley, yrange=set_yrange, ytickinterval=set_ticky, title=set_title, subtitle=set_subtitle, color=0, linestyle=altlin |
---|
297 | oplot, zefield(*,nntt), zey(*,nntt), psym=5 |
---|
298 | for ll = 1, n_elements(localtimes)-1 do begin |
---|
299 | CASE altlin OF |
---|
300 | 0: altlin=1 |
---|
301 | 1: altlin=0 |
---|
302 | ENDCASE |
---|
303 | user_lt=localtimes[ll] & yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt)))) & nntt = yeah(0) |
---|
304 | if (nntt ne -1) then oplot, zefield(*,nntt), zey(*,nntt), linestyle=altlin |
---|
305 | ;if (nntt ne -1) then oplot, zefield(*,nntt), zey(*,nntt), psym=5 |
---|
306 | endfor |
---|
307 | oplot, 0.*zefield(*,nntt) + 1.5, zey(*,nntt), linestyle=2 |
---|
308 | if (saveps eq 'true') then PS_End, /PNG |
---|
309 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
---|
310 | |
---|
311 | |
---|
312 | |
---|
313 | stop |
---|
314 | |
---|
315 | |
---|
316 | |
---|
317 | |
---|
318 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
---|
319 | goto, no_staticstab |
---|
320 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
---|
321 | if (saveps eq 'true') then begin |
---|
322 | device, /close |
---|
323 | set_plot, 'ps' & device, filename='plot/staticstab.ps' |
---|
324 | endif |
---|
325 | |
---|
326 | user_lt=17. & yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt)))) |
---|
327 | |
---|
328 | ;;; recompute height @ given local time |
---|
329 | caca=heightp+hgtu/1000. |
---|
330 | height=reform(ph(*,0,*,*)) |
---|
331 | height=total(height,1)/n_elements(height(*,0,0)) |
---|
332 | height=reform(height) |
---|
333 | height=reform(height(*,yeah(0))) |
---|
334 | height=height/1000./3.72 |
---|
335 | heightp=height(0:n_elements(height(*))-2) |
---|
336 | print, 'new minus old', heightp - caca |
---|
337 | ;;; recompute height @ given local time |
---|
338 | |
---|
339 | press=reform(p(*,0,*,*)) |
---|
340 | press=total(press,1)/n_elements(press(*,0,0)) |
---|
341 | press=reform(press) |
---|
342 | press=reform(press(*,yeah(0))) |
---|
343 | press=press(0:n_elements(press(*))-2) |
---|
344 | |
---|
345 | staticstab = DERIV( heightp , reform(what_I_plot5(*,yeah(0))) ) + 1000.*3.72/844.6 ;; 4.9 dans Hinson |
---|
346 | staticstab = staticstab(0:n_elements(staticstab)-5) |
---|
347 | heightp = heightp(0:n_elements(heightp)-5) |
---|
348 | |
---|
349 | plot, $ |
---|
350 | staticstab, $ |
---|
351 | heightp,$ |
---|
352 | xtitle='Static stability (K/km)',$ |
---|
353 | xrange=[-1.,5.], $ |
---|
354 | xtickinterval=0.5, $ |
---|
355 | ytitle='Altitude above surface (km)', $ |
---|
356 | yrange=[min(heightp),max(heightp)], $ |
---|
357 | ytickinterval=1., $ |
---|
358 | title="LMD LES Static stability @ LT 17h (K/km)", $ |
---|
359 | subtitle='zonal average at lat. '+latwrite |
---|
360 | oplot, $ |
---|
361 | staticstab, $ |
---|
362 | heightp,$ |
---|
363 | psym=5 |
---|
364 | oplot, $ |
---|
365 | findgen(n_elements(heightp))*0. + 1.,$ |
---|
366 | heightp,$ |
---|
367 | linestyle=2 |
---|
368 | oplot, $ |
---|
369 | findgen(n_elements(heightp))*0. + 2.,$ |
---|
370 | heightp,$ |
---|
371 | linestyle=2 |
---|
372 | |
---|
373 | ;;;;;;;;;; |
---|
374 | w = where((staticstab gt 1.5) and ((heightp- hgtu/1000.) gt 1.)) |
---|
375 | t_top_plus = what_I_plot5(w(0),yeah(0)) |
---|
376 | z_top_plus = heightp(w(0)) |
---|
377 | p_top_plus = press(w(0)) |
---|
378 | t_top_moins = what_I_plot5(w(0)-1,yeah(0)) |
---|
379 | z_top_moins = heightp(w(0)-1) |
---|
380 | p_top_moins = press(w(0)-1) |
---|
381 | pbl_depth = (z_top_plus*alog(p_top_plus) + z_top_moins*alog(p_top_moins))/(alog(p_top_plus) + alog(p_top_moins)) - hgtu/1000. |
---|
382 | xyouts, 3., 1.5 + (max(heightp) + min(heightp)) / 3., 'Ls = '+string(lsu,'(F5.1)')+'!Uo!N', CHARSIZE=1 |
---|
383 | xyouts, 3., 1. + (max(heightp) + min(heightp)) / 3., 'Lat = '+string(latu,'(F5.1)')+'!Uo!N', CHARSIZE=1 |
---|
384 | xyouts, 3., 0.5 + (max(heightp) + min(heightp)) / 3., 'LonE = '+string(lonu,'(F6.1)')+'!Uo!N', CHARSIZE=1 |
---|
385 | xyouts, 3., (max(heightp) + min(heightp)) / 3., 'T!Dt!N = '+string(t_top_plus,'(I0)')+'/'+string(t_top_moins,'(I0)')+' K ', CHARSIZE=1 |
---|
386 | xyouts, 3., -0.5 + (max(heightp) + min(heightp)) / 3., 'p!Dt!N = '+string(p_top_plus,'(I0)')+'/'+string(p_top_moins,'(I0)')+' Pa', CHARSIZE=1 |
---|
387 | xyouts, 3., -1. + (max(heightp) + min(heightp)) / 3., 'z!Dt!N = '+string(z_top_plus,'(F4.1)')+'/'+string(z_top_moins,'(F4.1)')+' km', CHARSIZE=1 |
---|
388 | xyouts, 3., -1.5 + (max(heightp) + min(heightp)) / 3., 'z!Ds!N = '+string(hgtu/1000.,'(F4.1)')+' km', CHARSIZE=1 |
---|
389 | xyouts, 3., -2. + (max(heightp) + min(heightp)) / 3., 'D = '+string(pbl_depth,'(F4.1)')+' km', CHARSIZE=1 |
---|
390 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
---|
391 | no_staticstab: |
---|
392 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
---|
393 | |
---|
394 | |
---|
395 | |
---|
396 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
---|
397 | if (saveps eq 'true') then begin |
---|
398 | device, /close |
---|
399 | endif |
---|
400 | stop |
---|
401 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
---|
402 | |
---|
403 | |
---|
404 | user_lt=13. |
---|
405 | yeah=where(abs(localtime-user_lt) eq (min(abs(localtime-user_lt)))) |
---|
406 | |
---|
407 | user_h=0.1 |
---|
408 | walt=where(abs(heightp-user_h) eq (min(abs(heightp-user_h)))) |
---|
409 | |
---|
410 | ;mapfield=reform(t[*,*,walt(0),w(0)]) |
---|
411 | ;help, mapfield |
---|
412 | ;contour, mapfield |
---|
413 | |
---|
414 | section=reform(w[*,0,*,yeah(0)]) |
---|
415 | |
---|
416 | section=reform(w[*,0,*,160]) |
---|
417 | |
---|
418 | lev=[-12.,-8.,-4.,4.,8.,12.] |
---|
419 | lev=[-5.,-4.,-3.,-2.,-1.,1.,2.,3.,4.,5.] |
---|
420 | contour, $ |
---|
421 | section, $ |
---|
422 | (lon(*,0)-lon(0,0))*59., $ |
---|
423 | heightp, $ |
---|
424 | levels=lev , $ |
---|
425 | C_LINESTYLE = (lev LT 0.0) |
---|
426 | |
---|
427 | device, /close |
---|
428 | |
---|
429 | end |
---|
430 | |
---|