GfsEventScript
From Gerris
GfsEventScript can be used to execute a shell-script at given intervals.
The syntax in parameter files is as follows:
[ GfsEvent ] { COMMANDS }
where COMMANDS is the script to be executed with /bin/sh.
Several shell variables are set:
- GfsTime
- the physical time
- GfsIter
- the iteration number
- GfsPid
- the processor number
- GFS_STOP
- if the exit status of the shell script is
GFS_STOPthe simulation is terminated (the return status indicates a failure)
Examples
- Rayleigh-Taylor instability
- Boussinesq flow generated by a heated cylinder
- Turbulent air flow around RV Tangaroa
- Coalescence of a pair of Gaussian vortices (Gerris logo)
- Lunar tides in Cook Strait, New Zealand
- Air-water flow around a Series 60 cargo ship
- "Garden sprinkler effect" in wave model
- Time-reversed advection with curvature-based refinement
- Convergence for the three-way vortex merging problem
- Mass conservation
- Lid-driven cavity at Re=1000
- Lid-driven cavity at Re=1000 (explicit scheme)
- Momentum conservation for large density ratios
- Hydrostatic balance with solid boundaries and viscosity
- Hydrostatic balance with quadratic pressure profile
- Shape oscillation of an inviscid droplet
- Geostrophic adjustment
- Coastally-trapped waves
- Coastally-trapped waves with adaptive refinement
EventScript { start = 0 } { echo "Save t-0.eps { format = EPS }" }
EventScript { start = 0.7 step = 0.1 } { echo "Save t-$GfsTime.eps { format = EPS }" }
EventScript { istep = 4 } { echo "Save stdout { width = 256 height = 512 }" }
EventScript { start = 19 } { echo "Save t.ppm { width = 256 height = 512 }" }
EventScript { start = end } { convert -colors 256 t.ppm t.eps ; rm -f t.ppm }
EventScript { istep = 4 } { echo "Save stdout { width = 1024 height = 768 }" }
EventScript { start = 1.5 } { echo "Save sections.ppm { width = 1024 height = 768 }" }
EventScript { start = end } {
convert -colors 256 sections.ppm sections.eps ; rm -f sections.ppm
}
EventScript { start = end } {
echo "Save logo.ppm { width = 1024 height = 1024 }"
sleep 5 # to wait for GfsView to finish writing the image
convert -transparent "#0000FF" logo.ppm -geometry 156x156 logo.png
montage -background white -geometry +0+0 logo.png logo.eps
rm -f logo.ppm
}
EventScript { start = end } {
cat <<EOF | gnuplot
set term postscript eps lw 3 solid 20 colour
set output 'pv.eps'
set xlabel 'Time (days)'
set ylabel 'Elevation (metres) or Velocity (metres/s)'
plot 'p' u (\$3/86400.):(\$9/9.81) w l t "Elevation", \
'u' u (\$3/86400.):9 w l t "Velocity"
set output 'a0.eps'
set ylabel 'Maximum harmonic elevation (metres)'
plot [1:]'a0' u (\$3/86400.):(\$9/9.81) w l t ""
EOF
}
EventScript { istep = 5 end = 4 } { echo "Save stdout { width = 1600 height = 1200 }" }
EventScript { start = 1 step = 1 } { gzip -f -q sim-*.gfs }
EventScript { start = 10 } {
echo "Save stdout { width = 1600 height = 1200 }" | \
gfsview-batch3D sim-10.gfs.gz closeup.gfv | \
convert -colors 256 ppm:- closeup.eps
echo "Save stdout { width = 1600 height = 1200 }" | \
gfsview-batch3D sim-10.gfs.gz front.gfv | \
convert -colors 256 ppm:- front.eps
echo "Save stdout { width = 800 height = 600 }" | \
gfsview-batch3D sim-10.gfs.gz comparison.gfv | \
convert -trim ppm:- comparison.ppm
# echo "Save stdout { width = 800 height = 600 }" | \
# gfsview-batch3D sim-10.gfs.gz tank-data.gfv | \
# convert -trim -flip ppm:- tank-data.png
convert tank-data.png tank-data.ppm
montage -geometry +0+0 -tile 1x2 tank-data.ppm comparison.ppm png:- | \
convert -colors 256 png:- comparison.eps
cat <<EOF | gnuplot
set term postscript eps lw 3 solid 20 colour
set output 'f.eps'
set xlabel 'Time'
set ylabel 'Force'
plot 'f' u 1:(\$2*2.) every 10 w l t 'Drag', 'f' every 10 u 1:(\$4*2.) w l t 'Lift'
EOF
}
EventScript { step = 12 } { gzip -f sim-*-*-*.gfs }
EventScript { start = end } { gzip -f end-*-*.gfs }
EventScript { start = 2.5 } { echo "Save t-2.5.eps { format = EPS line_width = 0.5 }" }
EventScript { start = 0.05 } {
echo Clear
cat levels.gfv
echo Save tm_0_05.eps { format = EPS line_width = 0.1 }
echo Clear
cat vorticity.gfv
echo Save tv_0_05.eps { format = EPS line_width = 0.1 }
}
EventScript { start = 0.15 } {
echo Clear
cat levels.gfv
echo Save tm_0_15.eps { format = EPS line_width = 0.1 }
echo Clear
cat vorticity.gfv
echo Save tv_0_15.eps { format = EPS line_width = 0.1 }
}
EventScript { start = 0.25 } {
echo Clear
cat levels.gfv
echo Save tm_0_25.eps { format = EPS line_width = 0.1 }
echo Clear
cat vorticity.gfv
echo Save tv_0_25.eps { format = EPS line_width = 0.1 }
}
EventScript { step = 0.2 } {
echo "Save stdout { format = Gnuplot }"
}
EventScript { start = 1.2 } {
echo "Clear"
cat vectors.gfv
echo "Save vectors.gnu { format = Gnuplot }"
}
EventScript { start = end } {
cat <<EOF | gnuplot
set term postscript eps lw 3 solid 20
set output 'xprof.eps'
set xlabel 'Y'
set ylabel 'U'
plot [-0.5:0.5]'xprof.ghia' u 1:2 title "Ghia et al." w p ps 2 pt 9, 'xprof' u 3:7 w l title "Gerris"
set output 'yprof.eps'
set xlabel 'X'
set ylabel 'V'
plot [-0.5:0.5]'yprof.ghia' u 1:2 title "Ghia et al." w p ps 2 pt 9, 'yprof' u 2:8 w l title "Gerris"
EOF
}
EventScript { start = end } {
cat <<EOF | gnuplot
set term postscript eps lw 3 solid 20
set output 'xprof.eps'
set xlabel 'Y'
set ylabel 'U'
plot [-0.5:0.5]'../xprof.ghia' u 1:2 title "Ghia et al." w p ps 2 pt 9, 'xprof' u 3:7 w l title "Gerris"
set output 'yprof.eps'
set xlabel 'X'
set ylabel 'V'
plot [-0.5:0.5]'../yprof.ghia' u 1:2 title "Ghia et al." w p ps 2 pt 9, 'yprof' u 2:8 w l title "Gerris"
EOF
}
EventScript { start = end } {
gnuplot <<EOF
set term postscript eps color lw 3 solid 20
set output 'k.eps'
set xlabel 'Time'
set ylabel 'Kinetic energy'
set grid
plot 'k' u 3:5 w l t ''
EOF
if awk '{if ($5 > 7.2e-3) exit (1);}' < k ; then
return 0;
else
return $GFS_STOP;
fi
}
EventScript { start = end } {
if awk '{if ($9 > 1e-12) exit (1);}' < v ; then
exit 0;
else
exit $GFS_STOP;
fi
}
EventScript { start = end } {
if awk '{if ($9 > 1e-12) exit (1);}' < v ; then :
else
exit $GFS_STOP;
fi
if awk '{if ($9 > 1e-12) exit (1);}' < p ; then :
else
exit $GFS_STOP;
fi
}
EventScript { start = end } {
cat <<EOF | gnuplot 2>&1 | awk '{if ($1 == "result:") print LEVEL,$2,$3,$4;}'
k(t)=a*exp(-b*t)*(cos(c*t+3.14159265359)+1.)
a = 3e-4
b = 1.5
c = 153
fit k(x) 'k-LEVEL' u 3:5 via a,b,c
print "result: ", a, b, c
EOF
rm -f fit.log
}
EventScript { istart = 100 iend = 500 istep = 100 } { echo "Save error-$GfsIter.eps { format = EPS }"}
OutputSimulation { istart = 1500 } stdout
EventScript { istart = 1500 } { echo "Save error-$GfsIter.eps { format = EPS }"}
EventScript { start = end } {
cat <<EOF | gnuplot
set term postscript eps lw 3 color solid 20
set output 'geo_error.eps'
set xlabel 'Time (days)'
set ylabel 'Maximum error on surface height (cm)'
plot 'e.ref' u 1:(\$2*100.) t '' w l, 'e' u 1:(\$2*100.) t 'ref' w l
EOF
}
EventScript { start = end } { echo -n "-30 " }
EventScript { start = end } { echo -n "-29 " }
EventScript { start = end } { echo -n "-20 " }
EventScript { start = end } { echo -n "25 " }
EventScript { start = end } { echo -n "26 " }
EventScript { start = end } { echo -n "27 " }
EventScript { start = end } { echo -n "28 " }
EventScript { start = end } { echo -n "29 " }
EventScript { start = end } { echo -n "30 " }
EventScript { start = end } { echo -n "-19 " }
EventScript { start = end } { echo -n "-18 " }
EventScript { start = end } { echo -n "-17 " }
EventScript { start = end } { echo -n "-16 " }
EventScript { start = end } { echo -n "-15 " }
EventScript { start = end } { echo -n "-14 " }
EventScript { start = end } { echo -n "-13 " }
EventScript { start = end } { echo -n "-12 " }
EventScript { start = end } { echo -n "-11 " }
EventScript { start = end } { echo -n "-28 " }
EventScript { start = end } { echo -n "-10 " }
EventScript { start = end } { echo -n "-9 " }
EventScript { start = end } { echo -n "-8 " }
EventScript { start = end } { echo -n "-7 " }
EventScript { start = end } { echo -n "-6 " }
EventScript { start = end } { echo -n "-5 " }
EventScript { start = end } { echo -n "-4 " }
EventScript { start = end } { echo -n "-3 " }
EventScript { start = end } { echo -n "-2 " }
EventScript { start = end } { echo -n "-1 " }
EventScript { start = end } { echo -n "-27 " }
EventScript { start = end } { echo -n "0 " }
EventScript { start = end } { echo -n "0.1 " }
EventScript { start = end } { echo -n "0.2 " }
EventScript { start = end } { echo -n "0.3 " }
EventScript { start = end } { echo -n "0.4 " }
EventScript { start = end } { echo -n "0.5 " }
EventScript { start = end } { echo -n "0.6 " }
EventScript { start = end } { echo -n "0.7 " }
EventScript { start = end } { echo -n "0.8 " }
EventScript { start = end } { echo -n "0.9 " }
EventScript { start = end } { echo -n "-26 " }
EventScript { start = end } { echo -n "1 " }
EventScript { start = end } { echo -n "1.1 " }
EventScript { start = end } { echo -n "1.2 " }
EventScript { start = end } { echo -n "1.3 " }
EventScript { start = end } { echo -n "1.4 " }
EventScript { start = end } { echo -n "1.5 " }
EventScript { start = end } { echo -n "1.6 " }
EventScript { start = end } { echo -n "1.7 " }
EventScript { start = end } { echo -n "1.8 " }
EventScript { start = end } { echo -n "1.9 " }
EventScript { start = end } { echo -n "-25 " }
EventScript { start = end } { echo -n "2 " }
EventScript { start = end } { echo -n "2.1 " }
EventScript { start = end } { echo -n "2.2 " }
EventScript { start = end } { echo -n "2.3 " }
EventScript { start = end } { echo -n "2.4 " }
EventScript { start = end } { echo -n "2.5 " }
EventScript { start = end } { echo -n "2.6 " }
EventScript { start = end } { echo -n "2.7 " }
EventScript { start = end } { echo -n "2.8 " }
EventScript { start = end } { echo -n "2.9 " }
EventScript { start = end } { echo -n "-24 " }
EventScript { start = end } { echo -n "3 " }
EventScript { start = end } { echo -n "3.1 " }
EventScript { start = end } { echo -n "3.2 " }
EventScript { start = end } { echo -n "3.3 " }
EventScript { start = end } { echo -n "3.4 " }
EventScript { start = end } { echo -n "3.5 " }
EventScript { start = end } { echo -n "3.6 " }
EventScript { start = end } { echo -n "3.7 " }
EventScript { start = end } { echo -n "3.8 " }
EventScript { start = end } { echo -n "3.9 " }
EventScript { start = end } { echo -n "-23 " }
EventScript { start = end } { echo -n "4 " }
EventScript { start = end } { echo -n "4.1 " }
EventScript { start = end } { echo -n "4.2 " }
EventScript { start = end } { echo -n "4.3 " }
EventScript { start = end } { echo -n "4.4 " }
EventScript { start = end } { echo -n "4.5 " }
EventScript { start = end } { echo -n "4.6 " }
EventScript { start = end } { echo -n "4.7 " }
EventScript { start = end } { echo -n "4.8 " }
EventScript { start = end } { echo -n "4.9 " }
EventScript { start = end } { echo -n "-22 " }
EventScript { start = end } { echo -n "5 " }
EventScript { start = end } { echo -n "6 " }
EventScript { start = end } { echo -n "7 " }
EventScript { start = end } { echo -n "8 " }
EventScript { start = end } { echo -n "9 " }
EventScript { start = end } { echo -n "10 " }
EventScript { start = end } { echo -n "11 " }
EventScript { start = end } { echo -n "12 " }
EventScript { start = end } { echo -n "13 " }
EventScript { start = end } { echo -n "14 " }
EventScript { start = end } { echo -n "-21 " }
EventScript { start = end } { echo -n "15 " }
EventScript { start = end } { echo -n "16 " }
EventScript { start = end } { echo -n "17 " }
EventScript { start = end } { echo -n "18 " }
EventScript { start = end } { echo -n "19 " }
EventScript { start = end } { echo -n "20 " }
EventScript { start = end } { echo -n "21 " }
EventScript { start = end } { echo -n "22 " }
EventScript { start = end } { echo -n "23 " }
EventScript { start = end } { echo -n "24 " }
EventScript { start = end } { echo -n "-30 " }
EventScript { start = end } { echo -n "-29 " }
EventScript { start = end } { echo -n "-20 " }
EventScript { start = end }<