twriteVTK implemented and verified - sphere - GPU-based 3D discrete element met… | |
git clone git://src.adamsgaard.dk/sphere | |
Log | |
Files | |
Refs | |
LICENSE | |
--- | |
commit c0703b287049da09df768c76779598a6b1840da8 | |
parent 8e970aa86be88c5c45b37b1bcb6e2b2a2edfde02 | |
Author: Anders Damsgaard <[email protected]> | |
Date: Fri, 18 Oct 2013 14:46:44 +0200 | |
writeVTK implemented and verified | |
Diffstat: | |
M python/sphere.py | 264 +++++++++++++++++++++++++++++… | |
1 file changed, 257 insertions(+), 7 deletions(-) | |
--- | |
diff --git a/python/sphere.py b/python/sphere.py | |
t@@ -513,6 +513,168 @@ class Spherebin: | |
if fh is not None: | |
fh.close() | |
+ def writeVTK(self, folder = '../output/', verbose = True): | |
+ 'Writes to a target VTK file' | |
+ | |
+ fh = None | |
+ try : | |
+ targetbin = folder + '/' + self.sid + '.vtu' # unstructured grid | |
+ if (verbose == True): | |
+ print('Output file: {0}'.format(targetbin)) | |
+ | |
+ fh = open(targetbin, 'w') | |
+ | |
+ # the VTK data file format is documented in | |
+ # http://www.vtk.org/VTK/img/file-formats.pdf | |
+ | |
+ fh.write('<?xml version="1.0"?>\n') # XML header | |
+ fh.write('<VTKFile type="UnstructuredGrid" version="0.1" byte_orde… | |
+ fh.write(' <UnstructuredGrid>\n') | |
+ fh.write(' <Piece NumberOfPoints="{}" NumberOfCells="0">\n'.for… | |
+ | |
+ # Coordinates for each point (positions) | |
+ fh.write(' <Points>\n') | |
+ fh.write(' <DataArray name="Position" type="Float32" Number… | |
+ fh.write(' ') | |
+ for i in range(self.np): | |
+ fh.write('{} {} {} '.format(self.x[i,0], self.x[i,1], self.x[i… | |
+ fh.write('\n') | |
+ fh.write(' </DataArray>\n') | |
+ fh.write(' </Points>\n') | |
+ | |
+ ### Data attributes | |
+ fh.write(' <PointData Scalars="Radius" Vectors="vector">\n') | |
+ | |
+ # Radii | |
+ fh.write(' <DataArray type="Float32" Name="Radius" format="… | |
+ fh.write(' ') | |
+ for i in range(self.np): | |
+ fh.write('{} '.format(self.radius[i])) | |
+ fh.write('\n') | |
+ fh.write(' </DataArray>\n') | |
+ | |
+ # xysum.x | |
+ fh.write(' <DataArray type="Float32" Name="Xdisplacement" f… | |
+ fh.write(' ') | |
+ for i in range(self.np): | |
+ fh.write('{} '.format(self.xysum[i,0])) | |
+ fh.write('\n') | |
+ fh.write(' </DataArray>\n') | |
+ | |
+ # xysum.y | |
+ fh.write(' <DataArray type="Float32" Name="Ydisplacement" f… | |
+ fh.write(' ') | |
+ for i in range(self.np): | |
+ fh.write('{} '.format(self.xysum[i,1])) | |
+ fh.write('\n') | |
+ fh.write(' </DataArray>\n') | |
+ | |
+ # Velocity | |
+ fh.write(' <DataArray type="Float32" Name="Velocity" Number… | |
+ fh.write(' ') | |
+ for i in range(self.np): | |
+ fh.write('{} {} {} '.format(self.vel[i,0], self.vel[i,1], self… | |
+ fh.write('\n') | |
+ fh.write(' </DataArray>\n') | |
+ | |
+ # fixvel | |
+ fh.write(' <DataArray type="Float32" Name="FixedVel" format… | |
+ fh.write(' ') | |
+ for i in range(self.np): | |
+ fh.write('{} '.format(self.fixvel[i])) | |
+ fh.write('\n') | |
+ fh.write(' </DataArray>\n') | |
+ | |
+ # Force | |
+ fh.write(' <DataArray type="Float32" Name="Force" NumberOfC… | |
+ fh.write(' ') | |
+ for i in range(self.np): | |
+ fh.write('{} {} {} '.format(self.force[i,0], self.force[i,1], … | |
+ fh.write('\n') | |
+ fh.write(' </DataArray>\n') | |
+ | |
+ # Angular Position | |
+ fh.write(' <DataArray type="Float32" Name="AngularPosition"… | |
+ fh.write(' ') | |
+ for i in range(self.np): | |
+ fh.write('{} {} {} '.format(self.angpos[i,0], self.angpos[i,1]… | |
+ fh.write('\n') | |
+ fh.write(' </DataArray>\n') | |
+ | |
+ # Angular Velocity | |
+ fh.write(' <DataArray type="Float32" Name="AngularVelocity"… | |
+ fh.write(' ') | |
+ for i in range(self.np): | |
+ fh.write('{} {} {} '.format(self.angvel[i,0], self.angvel[i,1]… | |
+ fh.write('\n') | |
+ fh.write(' </DataArray>\n') | |
+ | |
+ # Torque | |
+ fh.write(' <DataArray type="Float32" Name="Torque" NumberOf… | |
+ fh.write(' ') | |
+ for i in range(self.np): | |
+ fh.write('{} {} {} '.format(self.torque[i,0], self.torque[i,1]… | |
+ fh.write('\n') | |
+ fh.write(' </DataArray>\n') | |
+ | |
+ # Shear energy rate | |
+ fh.write(' <DataArray type="Float32" Name="ShearEnergyRate"… | |
+ fh.write(' ') | |
+ for i in range(self.np): | |
+ fh.write('{} '.format(self.es_dot[i])) | |
+ fh.write('\n') | |
+ fh.write(' </DataArray>\n') | |
+ | |
+ # Shear energy | |
+ fh.write(' <DataArray type="Float32" Name="ShearEnergy" for… | |
+ fh.write(' ') | |
+ for i in range(self.np): | |
+ fh.write('{} '.format(self.es[i])) | |
+ fh.write('\n') | |
+ fh.write(' </DataArray>\n') | |
+ | |
+ # Viscous energy rate | |
+ fh.write(' <DataArray type="Float32" Name="ViscousEnergyRat… | |
+ fh.write(' ') | |
+ for i in range(self.np): | |
+ fh.write('{} '.format(self.ev_dot[i])) | |
+ fh.write('\n') | |
+ fh.write(' </DataArray>\n') | |
+ | |
+ # Shear energy | |
+ fh.write(' <DataArray type="Float32" Name="ViscousEnergy" f… | |
+ fh.write(' ') | |
+ for i in range(self.np): | |
+ fh.write('{} '.format(self.ev[i])) | |
+ fh.write('\n') | |
+ fh.write(' </DataArray>\n') | |
+ | |
+ # Pressure | |
+ fh.write(' <DataArray type="Float32" Name="Pressure" format… | |
+ fh.write(' ') | |
+ for i in range(self.np): | |
+ fh.write('{} '.format(self.p[i])) | |
+ fh.write('\n') | |
+ fh.write(' </DataArray>\n') | |
+ | |
+ | |
+ fh.write(' </PointData>\n') | |
+ fh.write(' <Cells>\n') | |
+ fh.write(' <DataArray type="Int32" Name="connectivity" form… | |
+ fh.write(' </DataArray>\n') | |
+ fh.write(' <DataArray type="Int32" Name="offsets" format="a… | |
+ fh.write(' </DataArray>\n') | |
+ fh.write(' <DataArray type="UInt8" Name="types" format="asc… | |
+ fh.write(' </DataArray>\n') | |
+ fh.write(' </Cells>\n') | |
+ fh.write(' </Piece>\n') | |
+ fh.write(' </UnstructuredGrid>\n') | |
+ fh.write('</VTKFile>') | |
+ | |
+ finally: | |
+ if fh is not None: | |
+ fh.close() | |
+ | |
def readfirst(self, verbose=True): | |
''' Read first output file of self.sid ''' | |
fn = "../output/{0}.output00000.bin".format(self.sid) | |
t@@ -1113,6 +1275,14 @@ class Spherebin: | |
self.time_file_dt[0] = file_dt | |
self.time_step_count[0] = 0 | |
+ def initFluid(self, nu = 8.9e-4): | |
+ """ Initialize the fluid arrays and the fluid viscosity """ | |
+ self.f_rho = numpy.ones((self.num[0], self.num[1], self.num[2]), | |
+ dtype=numpy.float64) | |
+ self.f_v = numpy.zeros((self.num[0], self.num[1], self.num[2], self.nd… | |
+ dtype=numpy.float64) | |
+ | |
+ | |
def defaultParams(self, | |
mu_s = 0.4, | |
mu_d = 0.4, | |
t@@ -1934,7 +2104,7 @@ class Spherebin: | |
fig.savefig('../img_out/' + self.sid + '-ts-x1x3-slipangles.png') | |
fig.clf() | |
- def plotFluidDensities(self, y = -1, imgformat = 'png'): | |
+ def plotFluidDensitiesY(self, y = -1, imgformat = 'png'): | |
if (y == -1): | |
y = self.num[1]/2 | |
t@@ -1951,7 +2121,24 @@ class Spherebin: | |
plt.savefig('f_rho-' + self.sid + \ | |
'-y' + str(y) + '.' + imgformat, transparent=False) | |
- def plotFluidVelocities(self, y = -1, imgformat = 'png'): | |
+ def plotFluidDensitiesZ(self, z = -1, imgformat = 'png'): | |
+ | |
+ if (z == -1): | |
+ z = self.num[2]/2 | |
+ | |
+ plt.figure(figsize=[8,8]) | |
+ plt.title("Fluid densities") | |
+ imgplt = plt.imshow(self.f_rho[:,:,z].T, origin='lower') | |
+ imgplt.set_interpolation('nearest') | |
+ #imgplt.set_interpolation('bicubic') | |
+ #imgplt.set_cmap('hot') | |
+ plt.xlabel('$x_1$') | |
+ plt.ylabel('$x_2$') | |
+ plt.colorbar() | |
+ plt.savefig('f_rho-' + self.sid + \ | |
+ '-z' + str(z) + '.' + imgformat, transparent=False) | |
+ | |
+ def plotFluidVelocitiesY(self, y = -1, imgformat = 'png'): | |
if (y == -1): | |
y = self.num[1]/2 | |
t@@ -1967,7 +2154,7 @@ class Spherebin: | |
plt.title("$v_1$") | |
plt.xlabel('$x_1$') | |
plt.ylabel('$x_3$') | |
- plt.colorbar() | |
+ plt.colorbar(orientation = 'horizontal') | |
plt.subplot(132) | |
imgplt = plt.imshow(self.f_v[:,y,:,1].T, origin='lower') | |
t@@ -1977,7 +2164,7 @@ class Spherebin: | |
plt.title("$v_2$") | |
plt.xlabel('$x_1$') | |
plt.ylabel('$x_3$') | |
- plt.colorbar() | |
+ plt.colorbar(orientation = 'horizontal') | |
plt.subplot(133) | |
imgplt = plt.imshow(self.f_v[:,y,:,2].T, origin='lower') | |
t@@ -1987,11 +2174,74 @@ class Spherebin: | |
plt.title("$v_3$") | |
plt.xlabel('$x_1$') | |
plt.ylabel('$x_3$') | |
- plt.colorbar() | |
+ plt.colorbar(orientation = 'horizontal') | |
plt.savefig('f_v-' + self.sid + \ | |
'-y' + str(y) + '.' + imgformat, transparent=False) | |
+ def plotFluidVelocitiesZ(self, z = -1, imgformat = 'png'): | |
+ | |
+ if (z == -1): | |
+ z = self.num[2]/2 | |
+ | |
+ plt.title("Fluid velocities") | |
+ plt.figure(figsize=[8,8]) | |
+ | |
+ plt.subplot(131) | |
+ imgplt = plt.imshow(self.f_v[:,:,z,0].T, origin='lower') | |
+ imgplt.set_interpolation('nearest') | |
+ #imgplt.set_interpolation('bicubic') | |
+ #imgplt.set_cmap('hot') | |
+ plt.title("$v_1$") | |
+ plt.xlabel('$x_1$') | |
+ plt.ylabel('$x_2$') | |
+ plt.colorbar(orientation = 'horizontal') | |
+ | |
+ plt.subplot(132) | |
+ imgplt = plt.imshow(self.f_v[:,:,z,1].T, origin='lower') | |
+ imgplt.set_interpolation('nearest') | |
+ #imgplt.set_interpolation('bicubic') | |
+ #imgplt.set_cmap('hot') | |
+ plt.title("$v_2$") | |
+ plt.xlabel('$x_1$') | |
+ plt.ylabel('$x_2$') | |
+ plt.colorbar(orientation = 'horizontal') | |
+ | |
+ plt.subplot(133) | |
+ imgplt = plt.imshow(self.f_v[:,:,z,2].T, origin='lower') | |
+ imgplt.set_interpolation('nearest') | |
+ #imgplt.set_interpolation('bicubic') | |
+ #imgplt.set_cmap('hot') | |
+ plt.title("$v_3$") | |
+ plt.xlabel('$x_1$') | |
+ plt.ylabel('$x_2$') | |
+ plt.colorbar(orientation = 'horizontal') | |
+ | |
+ plt.savefig('f_v-' + self.sid + \ | |
+ '-z' + str(z) + '.' + imgformat, transparent=False) | |
+ | |
+ def plotFluidPorositiesY(self, iteration = -1, y = -1, outformat='png'): | |
+ ''' Plot the porosity values from the simulation. If iteration is -1 | |
+ (default value), the last output file will be shown. If the y value is | |
+ -1, the center x,z plane will be rendered ''' | |
+ | |
+ phi = numpy.loadtxt('../output/{}.d_phi.output{:0=5}.bin'.format(self.… | |
+ | |
+ if (y == -1): | |
+ y = self.num[2]/2 | |
+ | |
+ plt.figure(figsize=[8,8]) | |
+ imgplt = plt.imshow(phi[:,y,:].T, origin='lower') | |
+ imgplt.set_interpolation('nearest') | |
+ #imgplt.set_interpolation('bicubic') | |
+ #imgplt.set_cmap('hot') | |
+ plt.xlabel('$i_x$') | |
+ plt.ylabel('$i_z$') | |
+ plt.colorbar() | |
+ plt.savefig(self.sid + '-porosities.output{1:0=5}'.format(iteration)\ | |
+ + '-y' + str(y) + '.' + imgformat, transparent=False) | |
+ | |
+ | |
def convert(graphicsformat = "png", | |
folder = "../img_out"): | |
t@@ -2101,8 +2351,8 @@ def visualize(project, method = 'energy', savefig = True… | |
### Plotting | |
if (outformat != 'txt'): | |
fig = plt.figure(figsize=(15,10),dpi=300) | |
- figtitle = "{0}, simulation {1}".format(method, project) | |
- fig.text(0.5,0.95,figtitle,horizontalalignment='center',fontproperties… | |
+ #figtitle = "{0}, simulation {1}".format(method, project) | |
+ #fig.text(0.5,0.95,figtitle,horizontalalignment='center',fontpropertie… | |
if method == 'energy': |