From 03b6f9e379136a8a3f9c26219bd317a00d74cc0f Mon Sep 17 00:00:00 2001 From: Chris Greenshields Date: Fri, 15 May 2015 11:22:12 +0100 Subject: [PATCH] Script to help load VTK images into ParaView as a sequence for animation Creates symbolic links to all VTK files in a post-processing directory Links form a sequence like name.0000.vtk, name.0001.vtk, etc. Paraview recognises link names as a sequence which can be animated. The sequence of links can be used to create a video from the images. --- bin/foamSequenceVTKFiles | 126 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100755 bin/foamSequenceVTKFiles diff --git a/bin/foamSequenceVTKFiles b/bin/foamSequenceVTKFiles new file mode 100755 index 0000000000..fbbfc6014e --- /dev/null +++ b/bin/foamSequenceVTKFiles @@ -0,0 +1,126 @@ +#!/bin/sh +#------------------------------------------------------------------------------ +# ========= | +# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox +# \\ / O peration | +# \\ / A nd | Copyright (C) 2015 OpenFOAM Foundation +# \\/ M anipulation | +#------------------------------------------------------------------------------- +# License +# This file is part of OpenFOAM. +# +# OpenFOAM is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# OpenFOAM is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with OpenFOAM. If not, see . +# +# Script +# foamSequenceVTKFiles +# +# Description +# Creates symbolic links to all VTK files in a post-processing directory +# Links form a sequence like name.0000.vtk, name.0001.vtk, etc. +# Paraview recognises link names as a sequence which can be animated. +# The sequence of links can be used to create a video from the images. +# - Default directory name for VTK files is postProcessing +# +#------------------------------------------------------------------------------ +usage () { + exec 1>&2 + while [ "$#" -ge 1 ]; do echo "$1"; shift; done + cat < specify case directory (default = local dir) + -d | -dir post-processing directory (default = postProcessing) + -h | -help help + -o | -out output links directory (default = sequencedVTK) + +Creates symbolic links to all VTK files in a post-processing directory +Links form a sequence like name.0000.vtk, name.0001.vtk, etc. +Paraview recognises the link names as a sequence which can be opened and played. +The sequence of links to images can be used to create a video from the images. +- Default directory name for VTK files is postProcessing + +USAGE + exit 1 +} + +DIR=postProcessing +OUT=sequencedVTK + +while [ "$#" -gt 0 ] +do + case "$1" in + -c | -case) + [ "$#" -ge 2 ] || usage "'$1' option requires an argument" + cd "$2" 2>/dev/null || usage "directory does not exist: '$2'" + shift 2 + ;; + -d | -dir) + [ "$#" -ge 2 ] || usage "'$1' option requires an argument" + DIR=$2 + shift 2 + ;; + -h | -help) + printUsage + ;; + -o | -out) + [ "$#" -ge 2 ] || usage "'$1' option requires an argument" + OUT=$2 + shift 2 + ;; + -*) + usage "invalid option '$1'" + ;; + *) + break + ;; + esac +done + +if [ ! -d $DIR ]; then + echo "Cannot find postProcessing directory, exiting." + exit 0 +fi + +FILES=$(find $DIR -type f -name *vtk) +NAMES=$(basename -s .vtk -a $FILES | sort -u) + +if [ -d $OUT ]; then + echo "$OUT directory already exists. Deleting links within it..." + rm -rf $OUT/* +else + echo "Creating $OUT directory..." + mkdir $OUT +fi + +for N in $NAMES +do + echo "Sequencing all VTK files named $N.vtk" + + # Create list of VTK files, ordered by time step + FILE_LIST=$(echo $FILES | \ + tr " " "\n" | \ + grep $N.vtk | \ + awk -F'/' '{print($(NF-1)" "$0)}' | \ + sort -k 1 -g | \ + cut -d' ' -f2) + + i=0 + for F in $FILE_LIST + do + i=$(expr $i + 1) # Relies on ordered list of $sourceFiles + LINK=$(printf "${N}.%04d.vtk" $i) + ln -s ../$F $OUT/$LINK + done +done