#!/bin/sh #------------------------------------------------------------------------------ # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | # \\ / A nd | Copyright (C) 2015-2018 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 # #------------------------------------------------------------------------------ error() { exec 1>&2 while [ "$#" -ge 1 ]; do echo "$1"; shift; done usage exit 1 } usage() { cat < specify case directory (default = local dir) -dir | -d post-processing directory (default = postProcessing) -help | -h print the usage -out | -o 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 } dir=postProcessing out=sequencedVTK while [ "$#" -gt 0 ] do case "$1" in -c | -case) [ "$#" -ge 2 ] || error "'$1' option requires an argument" cd "$2" 2>/dev/null || error "directory does not exist: '$2'" shift 2 ;; -d | -dir) [ "$#" -ge 2 ] || error "'$1' option requires an argument" dir=$2 shift 2 ;; -h | -help) usage && exit 0 ;; -o | -out) [ "$#" -ge 2 ] || error "'$1' option requires an argument" out=$2 shift 2 ;; -*) error "invalid option '$1'" ;; *) break ;; esac done [ ! -d "$dir" ] && error "Cannot find postProcessing directory, exiting." files=$(find "$dir" -type f -name "*vtk") names=$(for f in $files; do basename "$f" .vtk; done | sort -u) if [ -d "$out" ]; then echo "$out directory already exists. Deleting links within it..." rm "${out:?}"/* 2>/dev/null 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 -w "$n\.vtk" | \ awk -F'/' '{print($(NF-1)" "$0)}' | \ LC_ALL=C sort -k 1 -g | \ cut -d' ' -f2) i=0 for f in $file_list do i=$(( i + 1 )) # Relies on ordered list of files link=$(printf "${n}.%04d.vtk" $i) ln -s "../$f" "$out/$link" done done