-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathfoamSequenceVTKFilesForFFarm
executable file
·200 lines (178 loc) · 5.88 KB
/
foamSequenceVTKFilesForFFarm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
#!/bin/sh
#---------------------------------------------------------------------------- #
# foamSequenceVTKFilesForFFarm
#
# This script is based on OpenFOAM's original foamSequenceVTKFiles
# If not additional paramters are passed, this function acts exactly
# like the original from OpenFOAM 6.
#
# Function modified by Regis Thedin on Aug 2022 to handle FAST.Farm
# ambient wind files. The modifications include the option to copy,
# rather than link, the output files; as well as the renaming structure.
# Note that the renaming can still be changed through some input variables
# Creates symbolic links to all VTK files in a post-processing directory
#
# Original description:
# 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 <<USAGE
Usage: ${0##*/} [OPTIONS] ...
options:
-case | -c <dir> specify case directory (default = local dir)
-dir | -d <dir> post-processing directory <dir> (default = postProcessing)
-help | -h print the usage
-out | -o <dir> output links directory <dir> (default = sequencedVTK)
-format | -f <str> format option of output files
-mode | -m <str> mode of operation, ln or cp (default=ln)
-lzero | -lz <bool> numbered output files contain leading zeros (default=true)
-zeroind | -zind <bool> start numbering at zero (default=false)
-apath | -ap <bool> if `-mode ln`, use absolute path or not (default=false)
-fsuffix | -fs <str> suffix of the vtk files if there are multiple (default=vtk)
Creates symbolic links to selected VTK files in a post-processing directory
Links form a sequence like name.0000.vtk, name.0001.vtk, etc.
The format can be changed to Amb.t0000.vtk, for example, by using the -f flag.
Selected VTK output with certain preffix can be changed using the -fsuffix
flag, e.g., if you have Low_U.vtk, Low_U_adj.vtk, and Low_U_adj_coords.vtk in
all time directories, you can call this function giving -fs _adj.vtk
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
- Example call for processing of FAST.Farm results
foamSequenceVTKFilesForFFarm -dir postProcessing/Low -out Low -format Amb.t
-mode cp -lzero false
foamSequenceVTKFilesForFFarm -dir postProcessing/Low -out Low -format Amb.t
-mode ln -lzero false -apath true -fs _adj.vtk
USAGE
}
dir=postProcessing
out=sequencedVTK
format=none
mode=ln
lzero=true
zeroind=false
apath=false
fsuffix=vtk
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
;;
-f | -format)
[ "$#" -ge 2 ] || error "'$1' option requires an argument"
format=$2
shift 2
;;
-m | -mode)
[ "$#" -ge 2 ] || error "'$1' option requires an argument"
mode=$2
shift 2
;;
-lz| -lzero)
[ "$#" -ge 2 ] || error "'$1' option requires an argument"
lzero=$2
shift 2
;;
-zind| -zeroind)
[ "$#" -ge 2 ] || error "'$1' option requires an argument"
zeroind=$2
shift 2
;;
-ap| -apath)
[ "$#" -ge 2 ] || error "'$1' option requires an argument"
apath=$2
shift 2
;;
-fs| -fsuffix)
[ "$#" -ge 2 ] || error "'$1' option requires an argument"
fsuffix=$2
shift 2
;;
-*)
error "invalid option '$1'"
;;
*)
break
;;
esac
done
[ ! -d "$dir" ] && error "Cannot find postProcessing directory, exiting."
files=$(find "$dir" -type f -name "*$fsuffix")
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)
if $zeroind; then
# Starting at -1 since the first thing in the loop is to add 1
# so it brings to zero.
i=-1
else
i=0
fi
for f in $file_list
do
i=$(( i + 1 )) # Relies on ordered list of files
if $lzero; then
if [[ $format == "none" ]]; then
link=$(printf "${n}.%04d.vtk" $i)
else
link=$(printf "${format}%04d.vtk" $i)
fi
else
if [[ $format == "none" ]]; then
link=$(printf "${n}.%d.vtk" $i)
else
link=$(printf "${format}%d.vtk" $i)
fi
fi
if [[ $mode == "cp" ]]; then
cp "$f" "$out/$link"
else
if $apath; then
ln -s "$(pwd -P)/$f" "$out/$link"
else
ln -s "../$f" "$out/$link"
fi
fi
done
done