| tAdded VTK output function - ns2dfd - 2D finite difference Navier Stokes solver… | |
| git clone git://src.adamsgaard.dk/ns2dfd | |
| Log | |
| Files | |
| Refs | |
| LICENSE | |
| --- | |
| commit a9c5e210c85110662bd2c31c3fd5d3c3c8c12291 | |
| parent 502702ca8b1d45e5023f4e1f5fa5b5408a614ed4 | |
| Author: Anders Damsgaard <[email protected]> | |
| Date: Tue, 4 Mar 2014 13:38:07 +0100 | |
| Added VTK output function | |
| Diffstat: | |
| M ns2dfd.py | 77 +++++++++++++++++++++++++++++… | |
| M pressure_anomaly.py | 1 + | |
| 2 files changed, 78 insertions(+), 0 deletions(-) | |
| --- | |
| diff --git a/ns2dfd.py b/ns2dfd.py | |
| t@@ -2,6 +2,7 @@ | |
| import numpy | |
| import subprocess | |
| +import vtk | |
| class fluid: | |
| t@@ -264,3 +265,79 @@ class fluid: | |
| ''' | |
| self.write() | |
| subprocess.call('./ns2dfd ' + self.sim_id + '.dat', shell=True) | |
| + | |
| + def writeVTK(self, folder = './', verbose = True): | |
| + ''' | |
| + Writes a VTK file for the fluid grid to the current folder by default. | |
| + The file name will be in the format ``<self.sid>.vti``. The vti files | |
| + can be used for visualizing the fluid in ParaView. | |
| + | |
| + The fluid grid is visualized by opening the vti files, and pressing | |
| + "Apply" to import all fluid field properties. To visualize the scalar | |
| + fields, such as the pressure, the porosity, the porosity change or the | |
| + velocity magnitude, choose "Surface" or "Surface With Edges" as the | |
| + "Representation". Choose the desired property as the "Coloring" field. | |
| + It may be desirable to show the color bar by pressing the "Show" butto… | |
| + and "Rescale" to fit the color range limits to the current file. The | |
| + coordinate system can be displayed by checking the "Show Axis" field. | |
| + All adjustments by default require the "Apply" button to be pressed | |
| + before regenerating the view. | |
| + | |
| + The fluid vector fields (e.g. the fluid velocity) can be visualizing by | |
| + e.g. arrows. To do this, select the fluid data in the "Pipeline | |
| + Browser". Press "Glyph" from the "Common" toolbar, or go to the | |
| + "Filters" mennu, and press "Glyph" from the "Common" list. Make sure | |
| + that "Arrow" is selected as the "Glyph type", and "Velocity" as the | |
| + "Vectors" value. Adjust the "Maximum Number of Points" to be at least … | |
| + big as the number of fluid cells in the grid. Press "Apply" to visuali… | |
| + the arrows. | |
| + | |
| + If several data files are generated for the same simulation (e.g. using | |
| + the :func:`writeVTKall()` function), it is able to step the | |
| + visualization through time by using the ParaView controls. | |
| + | |
| + :param folder: The folder where to place the output binary file (defau… | |
| + (default = './') | |
| + :type folder: str | |
| + :param verbose: Show diagnostic information (default = True) | |
| + :type verbose: bool | |
| + ''' | |
| + filename = folder + '/' + self.sim_id + '.vti' # image grid | |
| + | |
| + # initalize VTK data structure | |
| + grid = vtk.vtkImageData() | |
| + grid.SetOrigin([0.0, 0.0, 0.0]) | |
| + grid.SetSpacing([self.dx, self.dy, 1]) | |
| + grid.SetDimensions([self.nx+2, self.ny+2, 1]) | |
| + | |
| + # array of scalars: hydraulic pressures | |
| + pres = vtk.vtkDoubleArray() | |
| + pres.SetName("Pressure") | |
| + pres.SetNumberOfComponents(1) | |
| + pres.SetNumberOfTuples(grid.GetNumberOfPoints()) | |
| + | |
| + # array of vectors: hydraulic velocities | |
| + vel = vtk.vtkDoubleArray() | |
| + vel.SetName("Velocity") | |
| + vel.SetNumberOfComponents(2) | |
| + vel.SetNumberOfTuples(grid.GetNumberOfPoints()) | |
| + | |
| + # insert values | |
| + for y in range(self.ny+2): | |
| + for x in range(self.nx+2): | |
| + idx = x + (self.nx+2)*y | |
| + pres.SetValue(idx, self.P[x,y]) | |
| + vel.SetTuple(idx, [self.U[x,y], self.V[x,y]]) | |
| + | |
| + # add pres array to grid | |
| + grid.GetPointData().AddArray(pres) | |
| + grid.GetPointData().AddArray(vel) | |
| + | |
| + # write VTK XML image data file | |
| + writer = vtk.vtkXMLImageDataWriter() | |
| + writer.SetFileName(filename) | |
| + writer.SetInput(grid) | |
| + writer.Update() | |
| + if (verbose == True): | |
| + print('Output file: {0}'.format(filename)) | |
| + | |
| diff --git a/pressure_anomaly.py b/pressure_anomaly.py | |
| t@@ -6,3 +6,4 @@ sim.P[5,3] = 1.0 | |
| sim.run() | |
| sim.read(sim.sim_id + '00004.dat') | |
| print(sim.P) | |
| +sim.writeVTK() |