====== dataファイルによる動画の作成 ====== dataファイルをguplotで可視化し,gif形式で保存して,最後にそれらを連結させて動画をつくる. 必ずdataファイルは連番(output01.dat,output02.dat,....)とすること。([[http://basewall.kuciv.kyoto-u.ac.jp/dokuwiki/doku.php?id=fortran#%E9%80%A3%E7%95%AA%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%E3%82%92%E3%81%A4%E3%81%91%E3%82%8B|連番のファイル名をつける。]]) ===== シェル ===== シェルスクリプトを適当なファイル"hoge.sh"に保存し,dataファイルと同じディレクトリに置く. あとは、ターミナルでシェルを実行する。 $ sh hoge.sh ==== シェルスクリプト ==== #!/bin/bash minx=0 maxx=10 miny=0 maxy=10 ## mkdir gif ## for filename in output*.dat do ## output11.dat -> 11 ##### newname=${filename#output} newname=${newname%.dat} ## make gif file '0011.gif' #### gnuplot < 変数の定義 変数=値or文字列 以後変数を参照する時は,変数の頭に $ をつけるか, ${ }で囲む. echo ${変数} 与えられた引数の数だけ処理の繰り返しを行いたい場合はfor文を使用する。for文はinの後に続く引数を変数に代入しながら doとdoneの間に記述されたコマンドを繰り返し実行する。そしてinの後の引数がなくなり次第ループから抜ける。  for filename in output*.dat do  ... done 変数の一部を削りたい場合,以下のパターンマッチを用いる. ${hoge#pattern} #hoge前方から最短マッチ部分を除く ${hoge##pattern} #hoge前方から最長マッチ部分を除く ${hoge%pattern} #hoge後方から最短マッチ部分を除く ${hoge%%pattern} #hoge後方から最長マッチ部分を除く 一番上の例では変数"filename"から"output"と".dat"を削っている. ## output11.dat -> 11 ##### newname=${filename#output} newname=${newname%.dat} 以下のように囲むことによって,シェルの中でgnuplotを動かせる.末尾のGNUは必ず行頭に置かなければならない. gnuplot < また,動画をつくる際,グラフの範囲を指定して置く. ===== fortranでスクリプト作成 ===== シェルの文法を覚えるのが面倒なときはfortranでスクリプトを作成してもよい. 以下,サンプル. implicit none integer i,n character(len=20) giffile,datafile n=100 do i=1,n write(giffile,"(a,i4.4,a)") "wave",i,".gif" write(datafile,"(a,i4.4,a)") "wave",i,".dat" write(*,'(a)') "gnuplot << EOF" write(*,'(a)') "set terminal gif" write(*,'(a)') "set yrange [-1:1]" write(*,'(a,a,a)') "set output '",trim(giffile),"'" write(*,'(a,a,a)') "plot '",trim(datafile),"'" write(*,'(a)') "EOF" end do write(*,'(a)',advance="no") "gifsicle --delay=10" do i=1,n write(giffile,"(a,i4.4,a)") "wave",i,".gif" write(*,'(a,a)',advance="no") " ",trim(giffile) end do write(*,'(a)') " > anime.gif" end program 使い方はコンパイルして,スクリプト作成,実行の順.上のファイルがanime.f90として gfortran anime.f90 ./a.out > anime.sh sh anime.sh ===== convertコマンドのオプション ===== "-delay"オプションは次の絵を表示するための待ち時間で、単位は1/100秒。アニメーションをループさせたい場合は "-loop 回数" をconvertの引数に指定する。繰り返しの場合は回数を0とする. # make movefile #### convert -delay 10 -loop 0 gif/*.gif movie.gif ===== gifsicle ===== gifファイルからgifアニメを作成 使い方はこんな感じ.convertと似てる. gifsicle --delay 50 --loopcount 100 hoge*gif > anime.gif ===== gifview ===== gifアニメを見るにはgifview.gifsicleをインストールする必要あり. gifview -a anim.gif