2 from __future__
import print_function
4 if sys.version_info[0]!=2:
5 from importlib
import reload
8 import matplotlib.pyplot
as pl
9 import matplotlib.animation
as an
10 import dispatch_utils
as du
15 Methods: image(), yz_plane() 17 See http://matplotlib.org/users/colormaps.html for color maps 20 def simple_slice(iout=0,run='',data='../data',x=None,y=None,z=None,iv=0,verbose=0,pp=None):
22 pp=du.patches(iout=iout,run=run,data=data,x=x,y=y,z=z)
24 print(
'no patches found')
28 print(
'id={:04d} pos={}'.format(p.id,p.pos))
29 ix=
None; iy=
None; iz=
None 32 ix=np.int((x-p.x[0])/p.ds[0]+0.5)
33 print(
'ix =',ix,
' xr=',p.active_corners[0:2,0])
36 iy=np.int((y-p.y[0])/p.ds[1]+0.5)
37 print(
'iy =',iy,
' yr=',p.active_corners[0:2,1])
40 iz=np.int((z-p.z[0])/p.ds[2]+0.5)
41 print(
'iz =',iz,
' zr=',p.active_corners[0:2,2])
42 ll=du.limits(pp,ix=ix,iy=iy,iz=iz,iv=iv,verbose=verbose)
50 pl.title(
'iout={} iv={} time={} x={}'.format(iout,iv,p.time,x))
52 image(p.data[ix,l[1]:u[1],l[2]:u[2],iv],vmin=ll.vlim[0],vmax=ll.vlim[1],extent=p.extent[0])
56 pl.title(
'iout={} iv={} time={} y={}'.format(iout,iv,p.time,y))
58 image(p.data[l[0]:u[0],iy,l[2]:u[2],iv],vmin=ll.vlim[0],vmax=ll.vlim[1],extent=p.extent[1])
62 pl.title(
'iout={} iv={} time={} z={}'.format(iout,iv,p.time,z))
64 image(p.data[l[0]:u[0],l[1]:u[1],iz,iv],vmin=ll.vlim[0],vmax=ll.vlim[1],extent=p.extent[2])
67 def image(f,verbose=0,vlim=None,keep=False,**kwargs):
69 Turn images the Fortran way; 1st index increases to the right, 75 im=pl.imshow(f.squeeze().transpose(),origin=
'lower',interpolation=
'nearest',\
76 vmin=vlim[0],vmax=vlim[0],**kwargs)
78 im=pl.imshow(f.squeeze().transpose(),origin=
'lower',interpolation=
'nearest',**kwargs)
85 if p[0]<e[0]
or p[0]>e[1]: ok=
False 86 if p[1]<e[2]
or p[1]>e[3]: ok=
False 89 def yx_plane(iout=-1,run='',data='../data',z=0.0,var='logd',cmap='coolwarm',\
90 keep=0, extent=None,vlim=None,fraction=0.1,labels=None,verbose=0,\
93 Display xy-image for given z 96 if type(pp)==type(
None):
97 pp=du.patches(run=run,data=data,iout=iout)
99 print(
"no files found")
102 return z<=p.active_corners[1][2]
and z>=p.active_corners[0][2]
103 select=[p
for p
in pp
if inside(p,z)]
104 if verbose: print(np.size(pp),
'patches in plane' )
108 l=np.zeros(3,dtype=np.int32)
110 def interpolate(p,x,x0,dx,n,f):
112 i=max(0,min(n-2,int(s)))
115 fmt=
'id:{:6d} lev:{:2d} i:{:3d} p:{:6.2f}' 116 print (fmt.format(p.id,p.level,i,s))
117 return (1.0-s)*f[l[0]:u[0],l[1]:u[1],i]+s*f[l[0]:u[0],l[1]:u[1],i+1]
124 if var==
'u3' or var==
'p3': pz=p.zs
125 p.f=interpolate(p,z,pz[0],p.ds[2],p.n[2],p.f)
126 p.f,e=du.rotate(p.f,p.extent[2])
128 xlim=[min(xlim[0],e[0]),max(xlim[1],e[1])]
129 ylim=[min(ylim[0],e[2]),max(ylim[1],e[3])]
131 if np.size(extent)==1:
137 does = ((p.extent[0][0] > xlim[0]
and p.extent[0][0] < xlim[1]) \
138 or (p.extent[0][1] > xlim[0]
and p.extent[0][1] < xlim[1])) \
139 and ((p.extent[0][2] > ylim[0]
and p.extent[0][2] < ylim[1]) \
140 or (p.extent[0][3] > ylim[0]
and p.extent[0][3] < ylim[1]))
142 select=[p
for p
in select
if overlaps(p)]
143 if verbose: print(np.size(select),
'patches remain')
145 extent=[xlim[0],xlim[1],ylim[0],ylim[1]]
151 vmin=min(vmin,p.f.min())
152 vmax=max(vmax,p.f.max())
154 print(p.id,p.f.min(),p.f.max(),vmin,vmax)
158 image(p.f,extent=p.extent[2],vmin=vmin,vmax=vmax,cmap=cmap,keep=1)
159 yx=[p.active_corners[0][1],p.active_corners[0][0]]
160 if labels
and in_extent(extent,yx):
161 pl.text(yx[0],yx[1],p.id)
162 pl.title(
'var='+var+
' t={:3.2f} z={:2.1f}'.format(p.time,z))
164 pl.colorbar(shrink=0.8,aspect=15,fraction=fraction,pad=0.02)
165 pl.xlim(xlim); pl.ylim(ylim); pl.xlabel(
'y'); pl.ylabel(
'x')
169 def yz_plane(iout=-1,run='',data='../data',var='logd',x=0.0,cmap='coolwarm',\
170 keep=0, extent=None,vlim=None,fraction=0.1,labels=None,verbose=0,overlap=0.01,**kwargs):
172 Display yz-image for given x 175 pp=du.patches(run=run,data=data,iout=iout,overlap=overlap)
177 print(
"no files found")
180 return x<=p.active_corners[1][0]
and x>=p.active_corners[0][0]
181 pp=[p
for p
in pp
if inside(p,x)]
182 if verbose: print(np.size(pp),
'patches in plane')
186 l=np.zeros(3,dtype=np.int32)
188 def interpolate(p,x,x0,dx,n,f):
190 i=max(0,min(n-2,int(s)))
193 fmt=
'id:{:6d} lev:{:2d} i:{:3d} p:{:6.2f}' 194 print (fmt.format(p.id,p.level,i,s))
195 return (1.0-s)*f[i,l[1]:u[1],l[2]:u[2]]+s*f[i+1,l[1]:u[1],l[2]:u[2]]
202 if var==
'u1' or var==
'p1': px=p.xs
203 p.f=interpolate(p,x,px[0],p.dx[0],p.n[0],p.f)
205 ylim=[min(ylim[0],e[0]),max(ylim[1],e[1])]
206 zlim=[min(zlim[0],e[2]),max(zlim[1],e[3])]
208 if np.size(extent)==1:
214 does = ((p.extent[0][0] > ylim[0]
and p.extent[0][0] < ylim[1]) \
215 or (p.extent[0][1] > ylim[0]
and p.extent[0][1] < ylim[1])) \
216 and ((p.extent[0][2] > zlim[0]
and p.extent[0][2] < zlim[1]) \
217 or (p.extent[0][3] > zlim[0]
and p.extent[0][3] < zlim[1]))
219 pp=[p
for p
in pp
if overlaps(p)]
220 if verbose: print(np.size(pp),
'patches remain')
222 extent=[ylim[0],ylim[1],zlim[0],zlim[1]]
228 vmin=min(vmin,p.f.min())
229 vmax=max(vmax,p.f.max())
233 image(p.f,extent=p.extent[0],vmin=vmin,vmax=vmax,cmap=cmap,keep=1)
234 yz=[p.active_corners[0][1],p.active_corners[0][2]]
235 if labels
and in_extent(extent,yz):
236 pl.text(yz[0],yz[1],p.id)
237 pl.title(
'var='+var+
' t={:3.2f} x={:2.1f}'.format(p.time,x))
239 pl.colorbar(shrink=0.8,aspect=15,fraction=fraction,pad=0.02)
240 pl.xlim(ylim); pl.ylim(zlim); pl.xlabel(
'y'); pl.ylabel(
'z')
244 def xz_plane(iout=-1,run='',data='../data',var='logd',y=0.0,cmap='coolwarm',\
245 keep=0, extent=None,vlim=None,fraction=0.1,labels=None,verbose=0,**kwargs):
247 Display xz-image for given y 251 pp=du.patches(run=run,data=data,iout=iout)
253 print(
"no files found")
256 return y<=p.active_corners[1][1]
and y>=p.active_corners[0][1]
257 pp=[p
for p
in pp
if inside(p,y)]
258 if verbose: print(np.size(pp),
'patches in plane')
262 l=np.zeros(3,dtype=np.int32)
264 def interpolate(p,y,y0,dy,n,f):
266 i=max(0,min(n-2,int(s)))
269 fmt=
'id:{:6d} lev:{:2d} i:{:3d} p:{:6.2f}' 270 print (fmt.format(p.id,p.level,i,s))
271 return (1.0-s)*f[l[0]:u[0],i,l[2]:u[2]]+s*f[l[0]:u[0],i+1,l[2]:u[2]]
278 if var==
'u2' or var==
'p2': py=p.ys
279 p.f=interpolate(p,y,py[0],p.dx[0],p.n[0],p.f)
281 xlim=[min(xlim[0],e[0]),max(xlim[1],e[1])]
282 zlim=[min(zlim[0],e[2]),max(zlim[1],e[3])]
284 if np.size(extent)==1:
290 does = ((p.extent[1][0] > xlim[0]
and p.extent[1][0] < xlim[1]) \
291 or (p.extent[1][1] > xlim[0]
and p.extent[1][1] < xlim[1])) \
292 and ((p.extent[1][2] > zlim[0]
and p.extent[1][2] < zlim[1]) \
293 or (p.extent[1][3] > zlim[0]
and p.extent[1][3] < zlim[1]))
296 if verbose:(print(np.size(pp),
'patches remain'))
298 extent=[xlim[0],xlim[1],zlim[0],zlim[1]]
304 vmin=min(vmin,p.f.min())
305 vmax=max(vmax,p.f.max())
310 image(p.f,extent=p.extent[1],vmin=vmin,vmax=vmax,cmap=cmap,keep=1)
311 xz=[p.active_corners[0][0],p.active_corners[0][2]]
312 if labels
and in_extent(extent,xz):
313 pl.text(xz[0],xz[1],p.id)
314 pl.title(
'var='+var+
' t={:3.2f} y={:2.1f}'.format(p.time,y))
316 pl.colorbar(shrink=0.8,aspect=15,fraction=fraction,pad=0.02)
317 pl.xlim(xlim); pl.ylim(zlim); pl.xlabel(
'x'); pl.ylabel(
'z')
321 def yx_scan(fig,run='',data='../data',iout=0,dz=50,var='logd',cmap='coolwarm',\
322 verbose=0,fraction=0.1,extent=None,repeat=0,vlim=None,interval=200,\
323 labels=None,**kwargs):
325 Display yx-image in steps of dz in z 328 pp=du.patches(run=run,data=data,iout=iout)
332 zmin=(np.floor(zmin/dz+0.5)+0.5)*dz
333 zmax=(np.floor(zmax/dz+0.5)-0.5)*dz
335 if np.size(extent)==6:
344 ok = z<=ac[1][2]
and z>=ac[0][2]
346 ok = ok
and ac[1][0]>extent[0]
and ac[0][0]<extent[1]
347 ok = ok
and ac[1][1]>extent[2]
and ac[0][1]<extent[3]
349 select=[p
for p
in pp
if inside(p,z)]
351 title=
'var='+var+
' t={:d} (:,:,{:d})'.format(np.int(p.time),np.int(z))
356 l=np.zeros(3,dtype=np.int32)
358 def interpolate(p,x,x0,dx,n,f):
360 i=max(0,min(n-2,int(s)))
362 return (1.0-s)*f[l[0]:u[0],l[1]:u[1],i]+s*f[l[0]:u[0],l[1]:u[1],i+1]
369 z0=p.active_corners[0][2]+0.5*p.dx[2]
371 z0=p.active_corners[0][2]
372 if var==
'u3' or var==
'p3': z0=z0-0.5*p.dx[2]
373 p.f=interpolate(p,z,z0,p.dx[2],p.n[2],p.f)
375 p.f,e=du.rotate(p.f,e)
377 vmin=min(vmin,p.f.min())
378 vmax=max(vmax,p.f.max())
379 xlim=[min(xlim[0],e[0]),max(xlim[1],e[1])]
380 ylim=[min(ylim[0],e[2]),max(ylim[1],e[3])]
396 im=
image(p.f,extent=p.ext,vmin=vmin,vmax=vmax,cmap=cmap,keep=1,**kwargs)
398 pl.text(p.active_corners[0][1],p.active_corners[0][0],p.id)
399 pl.colorbar(shrink=0.9,aspect=15,fraction=fraction,pad=0.02)
403 a=an.FuncAnimation(fig,anim,np.arange(zmin,zmax+dz,dz),\
404 repeat=repeat,interval=interval,**kwargs)
407 def yz_scan(fig,run='',data='../data',iout=0,dx=50,var='logd',cmap='coolwarm',\
408 verbose=0,fraction=0.1,extent=None,repeat=0,vlim=None,interval=200,\
409 labels=None,**kwargs):
411 Display yz-image in steps of dx in x 414 pp=du.patches(run=run,data=data,iout=iout)
418 xmin=(np.floor(xmin/dx+0.5)+0.5)*dx
419 xmax=(np.floor(xmax/dx+0.5)-0.5)*dx
421 if np.size(extent)==6:
424 xmin=np.floor(xmin/dx+0.5)*dx
425 xmax=np.floor(xmax/dx+0.5)*dx
429 ok = x<=ac[1][0]
and x>=ac[0][0]
431 ok = ok
and ac[1][1]>extent[2]
and ac[0][1]<extent[3]
432 ok = ok
and ac[1][2]>extent[4]
and ac[0][2]<extent[5]
434 select=[p
for p
in pp
if inside(p,x)]
436 title=
'var='+var+
' t={:d} ({:d},:,:)'.format(np.int(p.time),np.int(x))
441 l=np.zeros(3,dtype=np.int32)
443 def interpolate(p,x,x0,dx,n,f):
445 i=max(0,min(n-2,int(s)))
447 return (1.0-s)*f[i,l[1]:u[1],l[2]:u[2]]+s*f[i+1,l[1]:u[1],l[2]:u[2]]
453 p.f=interpolate(p,x,p.active_corners[0][0]+0.5*p.dx[0],p.dx[0],p.n[0],f)
454 fmin=np.float(p.f.min()); fmax=np.float(p.f.max())
458 zlim=[min(zlim[0],e[0]),max(zlim[1],e[1])]
459 ylim=[min(ylim[0],e[2]),max(ylim[1],e[3])]
475 im=
image(p.f,extent=p.extent[0],vmin=vmin,vmax=vmax,cmap=cmap,keep=1,**kwargs)
477 pl.text(p.active_corners[0][1],p.active_corners[0][2],p.id)
478 pl.colorbar(shrink=0.75,aspect=15,fraction=fraction,pad=0.02)
482 a=an.FuncAnimation(fig,anim,np.arange(xmin,xmax+dx,dx),repeat=repeat,**kwargs)