tadded writeVTKall function - sphere - GPU-based 3D discrete element method alg… | |
git clone git://src.adamsgaard.dk/sphere | |
Log | |
Files | |
Refs | |
LICENSE | |
--- | |
commit 92486a3dafd6d17fa87078ae20a80b59d1a9a75a | |
parent c0703b287049da09df768c76779598a6b1840da8 | |
Author: Anders Damsgaard <[email protected]> | |
Date: Mon, 21 Oct 2013 11:23:37 +0200 | |
added writeVTKall function | |
Diffstat: | |
M python/sphere.py | 79 +++++++++++++++++++++++++++++… | |
1 file changed, 79 insertions(+), 0 deletions(-) | |
--- | |
diff --git a/python/sphere.py b/python/sphere.py | |
t@@ -513,6 +513,18 @@ class Spherebin: | |
if fh is not None: | |
fh.close() | |
+ def writeVTKall(self): | |
+ 'Writes all output binaries from the simulation to VTK files' | |
+ | |
+ lastfile = status(self.sid) | |
+ sb = Spherebin() | |
+ for i in range(lastfile+1): | |
+ fn = "../output/{0}.output{1:0=5}.bin".format(self.sid, i) | |
+ sb.sid = self.sid + ".{:0=5}".format(i) | |
+ sb.readbin(fn, verbose = False) | |
+ sb.writeVTK() | |
+ | |
+ | |
def writeVTK(self, folder = '../output/', verbose = True): | |
'Writes to a target VTK file' | |
t@@ -675,6 +687,73 @@ class Spherebin: | |
if fh is not None: | |
fh.close() | |
+ def writeFluidVTK(self, folder = '../output/', verbose = True): | |
+ 'Writes fluid data to a target VTK file' | |
+ | |
+ fh = None | |
+ try : | |
+ targetbin = folder + '/' + self.sid + '-fluid.vti' # vtkImageData | |
+ 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="ImageData" version="0.1" byte_order="Litt… | |
+ fh.write(' <ImageData WholeExtent="{} {} {} {} {} {}" Origin="{} … | |
+ 0, self.num[0], | |
+ 0, self.num[1], | |
+ 0, self.num[2], | |
+ self.origo[0], self.origo[1], self.origo[2], | |
+ (self.L[0]-self.origo[0])/self.num[0], | |
+ (self.L[1]-self.origo[1])/self.num[1], | |
+ (self.L[2]-self.origo[2])/self.num[2])) | |
+ fh.write(' <Piece Extent="{} {} {} {} {} {}">\n'.format( | |
+ 0, self.num[0], | |
+ 0, self.num[1], | |
+ 0, self.num[2])) | |
+ | |
+ ### Data attributes | |
+ fh.write(' <PointData>\n') | |
+ | |
+ # Pressure | |
+ # I HAVE TO FIGURE OUT HOW TO PARSE THE PRESSURES CORRECTLY | |
+ fh.write(' <DataArray type="Float32" Name="Pressure" format… | |
+ fh.write(' ') | |
+ for z in range(self.num[2]): | |
+ for y in range(self.num[1]): | |
+ for x in range(self.num[0]): | |
+ fh.write('{} '.format(self.f_rho[x,y,z])) | |
+ 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.f_vel[i,0], self.f_vel[i,1], … | |
+ fh.write('\n') | |
+ fh.write(' </DataArray>\n') | |
+ ''' | |
+ | |
+ fh.write(' </PointData>\n') | |
+ | |
+ fh.write(' <CellData>\n'); | |
+ fh.write(' </CellData>\n'); | |
+ | |
+ fh.write(' </Piece>\n') | |
+ fh.write(' </ImageData>\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) |