2 vis.py - GPUE: Split Operator based GPU solver for Nonlinear 3 Schrodinger Equation, Copyright (C) 2011-2015, Lee J. O'Riordan 4 <loriordan@gmail.com>, Tadhg Morgan, Neil Crowley. All rights reserved. 6 Redistribution and use in source and binary forms, with or without 7 modification, are permitted provided that the following conditions are 10 1. Redistributions of source code must retain the above copyright 11 notice, this list of conditions and the following disclaimer. 13 2. Redistributions in binary form must reproduce the above copyright 14 notice, this list of conditions and the following disclaimer in the 15 documentation and/or other materials provided with the distribution. 17 3. Neither the name of the copyright holder nor the names of its 18 contributors may be used to endorse or promote products derived from 19 this software without specific prior written permission. 21 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 24 PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 25 HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 27 TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 28 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 29 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 30 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 31 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 34 CPUs = os.environ[
'SLURM_JOB_CPUS_PER_NODE']
35 print "Number of cores: " + str(CPUs)
36 from numpy
import genfromtxt
38 import matplotlib
as mpl
39 import matplotlib.tri
as tri
42 from scipy.spatial
import Voronoi, voronoi_plot_2d
45 import multiprocessing
as mp
46 from multiprocessing
import Pool
47 from multiprocessing
import Process
48 from matplotlib.ticker
import ScalarFormatter
49 import matplotlib.pyplot
as plt
57 c = ConfigParser.ConfigParser()
59 c = ConfigParser.ConfigParser()
60 c.readfp(open(
r'Params.dat'))
62 xDim = int(c.getfloat(
'Params',
'xDim'))
63 yDim = int(c.getfloat(
'Params',
'yDim'))
64 gndMaxVal = int(c.getfloat(
'Params',
'gsteps'))
65 evMaxVal = int(c.getfloat(
'Params',
'esteps'))
66 incr = int(c.getfloat(
'Params',
'print_out'))
67 sep = (c.getfloat(
'Params',
'dx'))
68 dx = (c.getfloat(
'Params',
'dx'))
69 dt = (c.getfloat(
'Params',
'dt'))
70 xMax = (c.getfloat(
'Params',
'xMax'))
71 yMax = (c.getfloat(
'Params',
'yMax'))
74 data = numpy.ndarray(shape=(xDim,yDim))
77 v_arr=genfromtxt(dataName + str(value) + dataType,delimiter=
',' )
78 data = np.array([[row[0],row[1]]
for row
in v_arr])
79 dln = sp.spatial.Delaunay(data)
80 plt.triplot(data[:,0],data[:,1],dln.simplices.copy(),linewidth=0.5,color=
'b',marker=
'.')
81 plt.xlim(300,700);plt.ylim(300,700);
82 plt.savefig(
'delaun_' + str(value) +
'.png',dpi=200)
83 print 'Saved Delaunay @ t=' + str(value)
86 v_arr=genfromtxt(dataName + str(value) + dataType,delimiter=
',' )
87 data = [[row[0],row[1]]
for row
in v_arr]
90 plt.xlim(300,700);plt.ylim(300,700);
91 plt.savefig(
'voronoi_' + str(value) +
'.png',dpi=200)
92 print 'Saved Voronoi @ t=' + str(value)
95 gx,gy = np.gradient(density)
96 g2x,gxgy = np.gradient(gx)
97 gygx,g2y = np.gradient(gy)
98 fig, ax = plt.subplots()
100 f = plt.imshow((g2x**2 + g2y**2),cmap=plt.get_cmap(
'spectral'))
101 cbar = fig.colorbar(f)
102 plt.savefig(name +
"_laplacian.png",dpi=imgdpi)
104 f = plt.imshow((gxgy - gygx),cmap=plt.get_cmap(
'spectral'))
105 cbar = fig.colorbar(f)
106 plt.savefig(name +
"_dxdy.png",dpi=imgdpi)
110 fig, ax = plt.subplots()
112 f = plt.imshow((np.abs(np.fft.fftshift(np.fft.fft2(density)))),cmap=plt.get_cmap(
'prism'))
113 cbar = fig.colorbar(f)
114 cbar.set_clim(1e6,1e11)
116 plt.savefig(name +
"_struct_log10.png",dpi=imgdpi)
120 data = open(dataName).read().splitlines()
121 a = numpy.asanyarray(data,dtype=
'f8')
122 b = np.reshape(a,(xDim,yDim))
123 fig, ax = plt.subplots()
125 plt.gca().invert_yaxis()
126 cbar = fig.colorbar(f)
128 plt.savefig(dataName +
".png",dpi=imgdpi)
132 v_arr=genfromtxt(
'vort_arr_' + str(value),delimiter=
',' )
136 for i1
in range(0,v_arr.size/2):
137 for i2
in range(i1,v_arr.size/2):
138 H.append(m.sqrt( abs(v_arr[i1][0]*sep - v_arr[i2][0]*sep)**2 + abs(v_arr[i1][1]*sep - v_arr[i2][1]*sep)**2 ))
140 plt.title(
'Vortex lattice @ t=' + str(value*dt))
141 plt.ticklabel_format(style=
'scientific')
142 plt.ticklabel_format(style=
'scientific',axis=
'x', scilimits=(0,0))
143 h = plt.hist(H, bins=num_bins)
144 plt.savefig(name +
"_" + str(value) +
".pdf")
147 def image_gen(dataName, initValue, finalValue, increment,imgdpi):
148 for i
in range(initValue,finalValue,increment):
149 if not os.path.exists(dataName+
"r_"+str(i)+
"_abspsi2.png"):
150 real=open(dataName +
'_' + str(i)).read().splitlines()
151 img=open(dataName +
'i_' + str(i)).read().splitlines()
152 a_r = numpy.asanyarray(real,dtype=
'f8')
153 a_i = numpy.asanyarray(img,dtype=
'f8')
154 a = a_r[:] + 1j*a_i[:]
155 b = np.reshape(a,(xDim,yDim))
156 f = plt.imshow(abs(b)**2)
158 plt.gca().invert_yaxis()
159 plt.savefig(dataName+
"r_"+str(i)+
"_abspsi2.png",dpi=imgdpi)
161 g = plt.imshow(np.angle(b))
162 plt.gca().invert_yaxis()
163 plt.savefig(dataName+
"r_"+str(i)+
"_phi.png",dpi=imgdpi)
165 f = plt.imshow(abs(np.fft.fftshift(np.fft.fft2(b)))**2)
166 plt.gca().invert_yaxis()
168 plt.savefig(dataName+
"p_"+str(i)+
"_abspsi2.png",dpi=imgdpi)
170 g = plt.imshow(np.angle(np.fft.fftshift(np.fft.fft2(b))))
171 plt.gca().invert_yaxis()
172 plt.savefig(dataName+
"p_"+str(i)+
"_phi.png",dpi=imgdpi)
174 print "Saved figure: " + str(i) +
".png" 177 print "File(s) " + str(i) +
".png already exist." 180 real=open(dataName +
'_' + str(0)).read().splitlines()
181 img=open(dataName +
'i_' + str(0)).read().splitlines()
182 a1_r = numpy.asanyarray(real,dtype=
'f8')
183 a1_i = numpy.asanyarray(img,dtype=
'f8')
184 a1 = a1_r[:] + 1j*a1_i[:]
185 b1 = np.reshape(a1,(xDim,yDim))
187 if not os.path.exists(dataName+
"r_"+str(value)+
"_abspsi2.png"):
188 real=open(dataName +
'_' + str(value)).read().splitlines()
189 img=open(dataName +
'i_' + str(value)).read().splitlines()
190 a_r = numpy.asanyarray(real,dtype=
'f8')
191 a_i = numpy.asanyarray(img,dtype=
'f8')
192 a = a_r[:] + 1j*a_i[:]
193 b = np.reshape(a,(xDim,yDim))
194 m_val=np.max(np.abs(b)**2)
196 if opmode & 0b100000 > 0:
211 fig, ax = plt.subplots()
212 f = plt.imshow((abs(b)**2),cmap=
'gnuplot2',vmin=0,vmax=1e7)
213 plt.title(
'rho(r) @ t=' + str(value*dt))
218 cbar = fig.colorbar(f)
219 plt.gca().set_xlabel(
'x '+ str((dx)))
220 plt.gca().set_ylabel(
'x '+ str(dx))
221 plt.gca().invert_yaxis()
222 plt.savefig(dataName+
"r_"+str(value)+
"_abspsi2.png",dpi=imgdpi)
224 plt.savefig(dataName+
"r_"+str(value)+
"_abspsi2_axis0.pdf",bbox_inches=
'tight',dpi=imgdpi)
227 if opmode & 0b010000 > 0:
228 fig, ax = plt.subplots()
229 g = plt.imshow(np.angle(b))
230 cbar = fig.colorbar(g)
231 plt.gca().invert_yaxis()
232 plt.title(
'theta(r) @ t=' + str(value*dt))
233 plt.savefig(dataName+
"r_"+str(value)+
"_phi.png",dpi=imgdpi)
236 if opmode & 0b001000 > 0:
237 fig, ax = plt.subplots()
238 f = plt.imshow(abs(np.fft.fftshift(np.fft.fft2(b)))**2)
239 cbar = fig.colorbar(f)
240 plt.gca().invert_yaxis()
242 plt.title(
'rho(p) @ t=' + str(value*dt))
243 plt.savefig(dataName+
"p_"+str(value)+
"_abspsi2.png",dpi=imgdpi)
246 if opmode & 0b000100 > 0:
247 fig, ax = plt.subplots()
248 g = plt.imshow(np.angle(np.fft.fftshift(np.fft.fft2(b))))
249 cbar = fig.colorbar(g)
250 plt.gca().invert_yaxis()
251 plt.title(
'theta(p) @ t=' + str(value*dt))
252 plt.savefig(dataName+
"p_"+str(value)+
"_phi.png",dpi=imgdpi)
255 if opmode & 0b000010 > 0:
256 struct_fact(abs(b)**2,dataName+
"_" + str(value),imgdpi)
258 if opmode & 0b000001 > 0:
259 laplacian(abs(b)**2,dataName+
"_" + str(value),imgdpi)
261 print "Saved figure: " + str(value) +
".png" 264 print "File(s) " + str(value) +
".png already exist." 267 evMaxVal_l = evMaxVal
268 H=genfromtxt(
'vort_arr_0',delimiter=
',' )
270 for i1
in range(incr,evMaxVal_l,incr):
272 v_arr=genfromtxt(
'vort_lsq_' + str(i1) +
'.csv',delimiter=
',' )
273 H=np.column_stack((H,v_arr))
277 X=np.zeros((evMaxVal_l/incr),dtype=np.float64)
278 Y=np.zeros((evMaxVal_l/incr),dtype=np.float64)
279 H=np.reshape(H,([num_vort,2,evMaxVal_l/incr]),order=
'F')
280 for i1
in range(0, num_vort):
281 for i2
in range(0,evMaxVal_l/incr):
282 X[i2]=(H[i1,0,i2]*dx) - xMax
283 Y[i2]=(H[i1,1,i2]*dx) - yMax
284 h = plt.plot(X,Y,color=(r.random(),r.random(),r.random(),0.85),linewidth=0.1)
286 plt.title(
'Vort(x,y) from t=0 to t='+str(evMaxVal_l*dt)+
" s")
288 plt.axis((-xMax/2.0, xMax/2.0, -yMax/2.0, yMax/2.0))
289 plt.ticklabel_format(style=
'scientific')
290 plt.ticklabel_format(style=
'scientific',axis=
'x', scilimits=(0,0))
291 plt.ticklabel_format(style=
'scientific',axis=
'y', scilimits=(0,0))
292 plt.savefig(name +
".pdf")
294 print "Trajectories plotted." 297 fig, ax = plt.subplots()
298 ax.xaxis.set_major_locator(ScaledLocator(dx=dx))
299 ax.xaxis.set_major_formatter(ScaledLocator(dx=dx))
300 f = plt.imshow(abs(data)**2)
301 cbar = fig.colorbar(f)
302 plt.gca().invert_yaxis()
304 plt.savefig(dataName+
"r_"+str(value)+
"_"+label +
".png",dpi=imgdpi)
307 def overlap(dataName, initValue, finalValue, increment):
308 real=open(dataName +
'_' + str(0)).read().splitlines()
309 img=open(dataName +
'i_' + str(0)).read().splitlines()
310 a_r = numpy.asanyarray(real,dtype=
'f8')
311 a_i = numpy.asanyarray(img,dtype=
'f8')
312 wfc0 = a_r[:] + 1j*a_i[:]
313 for i
in range(initValue,finalValue,increment):
314 real=open(dataName +
'_' + str(value)).read().splitlines()
315 img=open(dataName +
'i_' + str(value)).read().splitlines()
316 a_r = numpy.asanyarray(real,dtype=
'f8')
317 a_i = numpy.asanyarray(img,dtype=
'f8')
318 a = a_r[:] + 1j*a_i[:]
322 if __name__ ==
'__main__':
328 for i
in range(0,gndMaxVal,incr):
330 for i
in range(0,evMaxVal,incr):
336 gnd_proc.append(Process(target=image_gen_single,args=(
"wfc_0_ramp",i,200,0b110000)))
337 gnd_proc.append(Process(target=image_gen_single,args=(
"wfc_0_const",i,200,0b110000)))
340 ev_proc.append(Process(target=image_gen_single,args=(
"wfc_ev",i,200,0b101000)))
341 proc = gnd_proc + ev_proc
344 if int(CPUs) > len(mp.active_children()):
345 print len(mp.active_children())
350 print "Failed to execute ", p
def overlap(dataName, initValue, finalValue, increment)
def vort_traj(name, imgdpi)
def image_gen_single(dataName, value, imgdpi, opmode)
def delaunay(dataName, dataType, value)
def scaleAxis(data, dataName, label, value, imgdpi)
def voronoi(dataName, dataType, value)
def hist_gen(name, value, num_bins)
def opPot(dataName, imgdpi)
def struct_fact(density, name, imgdpi)
def laplacian(density, name, imgdpi)
def image_gen(dataName, initValue, finalValue, increment, imgdpi)