Tips and tricks

From Gerris

Revision as of 17:34, 29 January 2008; view current revision
←Older revision | Newer revision→
Jump to: navigation, search


Emacs mode for Gerris files

Well, not really but something approaching. Add the following to your .emacs

(setq auto-mode-alist (cons '("\\.gfs\\'" . shell-script-mode) auto-mode-alist))

Generating several movies on-the-fly

While it is fairly simple to use the scripting mode of gfsview and unix pipes to generate a movie on the fly from a running simulation, how does one generate several movies simultaneously?

Using named unix fifos and the tee utility it is fairly easy too. For example if one has three gfsview files called wide.gfv, closeup.gfv and overview.gfv and want to generate the three corresponding movies wide.mpg, closeup.mpg and overview.mpg in one go, one could use the following script:


movies="wide closeup overview"
rm -f $movies
mkfifo $movies

gerris3D mysimulation.gfs | tee $movies > /dev/null &
for movie in $movies; do
    gfsview-batch3D $movie.gfv < $movie | ppm2mpeg > $movie.mpg &
sleep 10
rm -f $movies

of course the simulation file mysimulation.gfs should contain lines looking like:

OutputSimulation { istep = 10 } stdout
EventScript { istep = 10 } { echo "Save stdout { width = 1024 height = 768 }" }

Compressing simulation files

When it is useful to save simulation results at regular intervals, the size of the files can be reduced by using on-the-fly compression. This can be done like this:

OutputSimulation { istep = 100 } sim-%ld.gfs
EventScript { istep = 100 } { gzip -f -q sim-*.gfs }

GfsView can read compressed GFS files directly.

Writing generic or customized gerris output

Since most of visualization package on the market (or as open-source) do not support quadtree/octree data format, to use benefits of third party visualization packages rather than GFSView we should convert Gerris results to a general unstructured data.

VTK format could be visualized by powerful free package: Paraview.

The function "gfs_write_generic_output" is written for this purpose.

This function could write output data in Tecplot or VTK format. I mean generic output because Tecplot format is almost a general unstructured data type and you could easily modify its (code or resulted file) for your own need. Alternatively you could contact me and I could do its for you (just describe your format). All data are written in ASCII format.

Tecplot format is briefly as follows:

1) Header (include list of field variables, number of vertexes, number of elements and elements type)

2) Spatial coordinates plus filed variables related to listed variables in header

3) Element connectivity

For more details regarding to VTK format refer to VTK file format: PDF or HTML

Brief algorithm

1) Construct mesh connectivity 4/8 vertex per cell.

2) Optimize connectivity by removing repeated vertexes, this considerably reduce data size and improve considerably speed of rendering (very important for 3d or large scale simulation).

3) Interpolation of cell-wise data to vertexes.

4) Writing results on a text file.

How to use

Prototype of this function is as follows (6 input arguments):

void gfs_write_generic_output ( gchar *type, 
gint n_filed,
gchar **filed_name,
gint plot_depth,
GtsBBox * box,
GfsDomain * domain
1. type: type of desired output, "VTK" or "TECPLOT" at the moment   are supported.
2. n_filed: number of filed data to be visualized, 0 mean just visualization of mesh.
3. filed_name: string array, each item is correspond to each filed, you should include your desired field name, i.e., "U", "V", "W", "P" and desired tracer, e.g., "T", ..., also you could include "Vorticity" to compute and write vorticity field. If for any field, function can not find data pointer from name of variable (except for vorticity), this field is skiped.
4. plot_depth: depth of cell which are desired to visualize, -1 mean visiting all levels.
5. box: if box=NULL, all domain are considered for visualization, but user could define a box to visualize only portion of domain located in the box, to define box you should specify its two corner (by six coordinate, for 2d simulation define two z-value arbitrary).
6. domain: simulation domain.
Personal tools