水位 プロット †空間分布の出力 †SDxx.tttttttt.grd というファイルに吐き出されるので,とりあえず一通り GMT で描けるようにやってみた. 計算をした直下のディレクトリで下のスクリプトを実行すればOK. #!/bin/bash ## check arg if [ -z "$1" ]; then echo "ERROR: empty arg" echo "usage: $0 [number XX for (SDXX)]" exit 0 else NN=`seq -f %02g $1 $1` fi ## directory figdir="_surf$NN" if [ ! -e $figdir ]; then mkdir $figdir fi ## makecpt cpt="tmpsurf$NN.cpt" gmt makecpt -Cpolar -T-1/1 -D > $cpt ## time interval dt=`cat tsun.par | grep dt | sed -e 's/dt=//'` ## plot for each for f in SD$NN.[0-9]*[0-9].grd do ## filename outps=${f//\.grd/\.ps} itstep=${f//\.grd/} itstep=${itstep//SD$NN./} time_min=`echo "$itstep $dt" | awk '{printf "%d min", $1*$2/60}'` ## plot proj="X"$(gmt grdinfo $f -Cn -o0,1,2,3 | awk '{print 10"/"10*($4-$3)/($2-$1)}') # echo $proj # check gmt grdimage $f -J$proj -Baf -BneSW+t"$time_min" -R$f -C$cpt -K > $outps gmt psscale -C$cpt -Bxa0.5f0.1 -By+lm -DJMR+w5.0/0.3+o1.0/0.0+e -J$proj -R$f -O >> $outps ## convert gmt psconvert -A -Tf $outps # PS -> PDF gmt psconvert -A -TG $outps # PS -> PNG ## move \mv ${outps//.ps/.pdf} ${outps//.ps/.png} $figdir/ done rm $cpt 水位をコンター+流速を矢印 †流速は "-vy" のついたファイルの y 軸方向の出力を逆向きする. #!/bin/bash ## check arg if [ -z "$1" ]; then echo "ERROR: empty arg" echo "usage: $0 [number XX for (SDXX)]" 1>&2 exit 1 else NN=`seq -f %02g $1 $1` fi ## directory figdir="_vel$NN" if [ ! -e $figdir ]; then mkdir $figdir fi ## makecpt cpt="tmpvel$NN.cpt" gmt makecpt -Cpolar -T-1/1 -D -M --COLOR_NAN=gray90 > $cpt ## time interval dt=`cat tsun.par | grep dt | sed -e 's/dt=//'` ## plot for each for f in SD$NN.[0-9]*[0-9].grd do ## filename outps=${f//\.grd/\-vxy.ps} itstep=${f//\.grd/} itstep=${itstep//SD$NN./} time_min=`echo "$itstep $dt" | awk '{printf "%d min", $1*$2/60}'` gu=${f//\.grd/-vx\.grd} gv=${f//\.grd/-vy\.grd} gvtmp=${gv//.grd/-neg.grd} gmt grdmath $gv NEG = $gvtmp=cf ## params proj="X10/`gmt grdinfo $f -Cn -o0,1,2,3 | awk '{print 10*($4-$3)/($2-$1)}'`" int=`gmt grdinfo $f -Cn -o6 | awk '{print 40*$1}'` XS=`gmt grdinfo $f -Cn -o0,1 | awk '{print $1+0.20*($2-$1)}'` YS=`gmt grdinfo $f -Cn -o2,3 | awk '{print $1+0.95*($2-$1)}'` vecscale=0.5 vecatt="+a25+e+p1+h1+gblack+n1" fonts=12 lw=1 echo "# lon lat u1 u2 sig1 sig2 cor (option) name" > scale$NN.dat echo " $XS $YS 2.00 0.00 0.00 0.00 0.0 2.0 m/s" >> scale$NN.dat ## plot gmt grdimage $f -J$proj -Baf -BneSW+t"$time_min" -R$f -C$cpt -K > $outps gmt psscale -C$cpt -Bxa0.5f0.1 -By+lm -DJMR+w5.0/0.3+o1.0/0.0+e -J$proj -R$f -K -O >> $outps gmt grdvector $gu $gvtmp -W$lw -I$int -Si$vecscale -Q$vecatt -T -J$proj -R$f -K -O >> $outps gmt psvelo -A$vecatt -Gblack -Se$vecscale/0/$fonts -W$lw -J$proj -R$f -O scale$NN.dat >> $outps && rm -f scale$NN.dat # これで正しいスケールになっているかわからん rm $gvtmp ## convert gmt psconvert -A -Tf $outps # PS -> PDF gmt psconvert -A -TG $outps # PS -> PNG ## move mv ${outps//.ps/.pdf} ${outps//.ps/.png} $figdir/ done rm -f $cpt アニメーションにまとめる †上のアニメーションのように,生成した画像から gif を作成するスクリプトを書いてみた. #!/bin/bash usage_exit() { echo "Usage: $0 [-r fps] [num_start] [num_end]" 1>&2 exit 1 } ## optional arg while getopts r:h OPT do case $OPT in r) fps=$OPTARG ;; h) usage_exit ;; \?) usage_exit ;; esac done if [ -z "$fps" ]; then fps=10 fi shift $((OPTIND - 1)) if [ $# = 0 ]; then SDSTART=1 if [ -e 'gridfile.dat' ]; then SDEND=`cat gridfile.dat | wc -l` else SDEND=1 fi fi if [ $# = 1 ]; then SDSTART=$1 SDEND=$1 fi if [ $# = 2 ]; then SDSTART=$1 SDEND=$2 fi gifdir="_gif" if [ ! -e $gifdir ]; then mkdir $gifdir fi #skiprate=`cat tsun.par | grep itmap | sed -e 's/itmap=//'` ## animation for N in `seq -f %02g $SDSTART $SDEND` do ## directory figdir="_surf$N" ffmpeg -i $figdir/SD$N.%*.png -filter_complex "fps=$fps,scale=720:-1:flags=lanczos,split[a],palettegen,[a]paletteuse" -an $gifdir/SD$N.gif -y done |