らくらく DCL 辻野 智紀 神戸大学 理学部 地球惑星科学科 B4
目次 DCL とは? インストール 基本的な描画の手順 カンタン折れ線ルーチン 少し凝りたい方へ さらに凝りたい方へ カンタン等高線・ベクトルルーチン こんなことも
DCL とは?
DCL とは? 地球流体電脳倶楽部 (http://www.gfd-dennou.org/) で開発された Fortran ライブラリ(Fortran 77). Fortran ソースファイルをコンパイル・実行する だけで, 計算結果をグラフに出力可能. 結果をデータファイルに出力せず, すぐにグラフ として表示させることが可能. DCL は Fortran 以外に, C, Ruby などで利用可能.
DCL とは? Fortran のソースファイルに DCL 専用のサブル ーチンを呼び出す記述をする. 専用サブルーチン群の構成 サブルーチン群はそれぞれの特徴から, 以下のよ うなパッケージに分けられている. GRPH1, 2 おもに, グラフの出力に関するサブルーチン MATH1, 2 おもに, 数値処理を行う上で有用なサブルーチン MISC1 その他の文字処理などを行うサブルーチン
インストール ソースからコンパイル: を手元にダウンロード・展開後, INSTALL ファイ ルを参考にインストール. http://www.gfd-dennou.org/arch/dcl/dcl-5.3.3.tar.gz を手元にダウンロード・展開後, INSTALL ファイ ルを参考にインストール. Debian パッケージからインストール: # apt-get install dcl-f77 パッケージからインストールの場合, dennou の ftp サーバを apt のソースリストに加える.
事前準備 今回は, こちらで用意した Fortran ソースファイ ルをコンパイルして実行していただき, どのよう な図が描けるのかを実際に体験していただきます. 以下の URL からファイルをダウンロードして下 さい. http://epa.scitec.kobe-u.ac.jp/~satoki/ tmp/exercise.tar.gz
事前準備 ダウンロードしたファイルを以下のコマンドで 展開. $ tar zxvf exercise.tar.gz 展開したディレクトリの中で, 以下のコマンドを 実行. $ make 以上で, 今回用意したソースファイルの実行ファ イルを作成.
基本的な描画の手順
作成したソースファイルをコンパイル・実行 基本的な描画の手順 Fortran ソースファイルの作成 CALL GROPN ( 出力装置番号 ) 図を描画するための出力装置を起動する宣言. ”出力装置番号” = 1〜4 の数字で指定. 1 = X Window, 2 = PostScript, 3 = Tek 端末, 4 = GTK CALL GRCLS 出力装置を終了させるための宣言. 作成したソースファイルをコンパイル・実行 コンパイル:$ dclfrt <ソースファイル名> 実行 :$ ./<実行ファイル名>
先ほど展開したディレクトリ内の ”open” という実行ファイルを以下のコマンドで実行. 基本的な描画の手順 先ほど展開したディレクトリ内の ”open” という実行ファイルを以下のコマンドで実行. $ ./open 真っ白な Window が表示されましたか? X Window で描画装置を開く 描画装置を閉じる
DCL によるグラフの描画は, ”GROPN” と ”GRCLS” の間で様々な サブルーチンを呼び出すことのみ. 基本的な描画の手順 DCL によるグラフの描画は, ”GROPN” と ”GRCLS” の間で様々な サブルーチンを呼び出すことのみ.
カンタン折れ線ルーチン
exercise の中の ”cos” というファイルを実行. カンタン折れ線ルーチン exercise の中の ”cos” というファイルを実行.
サブルーチン解説 CALL GROPN( 1 ) X による出力 CALL GRFRM グラフの初期化 変数の型宣言 CALL GROPN( 1 ) X による出力 CALL GRFRM グラフの初期化 CALL USGRPH(配列個数, 横軸要素, 縦軸要素) 配列の最大・最小値から描画領域を設定. 描画するグラフの目盛と実際の配列の値を一致. 座標軸を設定し描画. CALL GRCLS 出力を終了. 描画領域, 空間刻み幅の設定 X 座標の値とそれに対応する Y 座標の値(cos(X))を代入. グラフ関連
もう少し凝りたい方へ 先ほどのグラフはたった 4 行の サブルーチンの記述だけで描くことが できました. しかし, もう少し手を加えたいなとは 思いませんでしたか? たとえば...
もう少し凝りたい方へ グラフの軸のタイトル 各軸の単位 線種の変更 描画領域の設定...etc. 展開したディレクトリの中の ”Foucault” というファイルを実行してみて下さい.
もう少し凝りたい方へ 描画してみると・・・ フーコー振り子の水平面の軌跡
サブルーチン解説 出力番号の入力 カンタン折れ線ルーチン USGRPH 線種の設定 UUSLNI = 線の太さ UUSLNT = 線の種類 描画領域の設定 GRSWND = 座標軸の両端 GRSVPT = Window への描 画位置 座標のタイトル・単位 折れ線を描画
もう少し凝りたい方へ 図と照らし合わせると... UUSLNI UUSLNT USSPNT UULIN GRSWND GRSVPT USDAXS USSTTL
さらに凝りたい方へ 折れ線を複数出力させる 複数の折れ線それぞれにラベルをつける どの折れ線が何を表すかを区別させる...etc 展開したディレクトリの中の ”besj” というファイルを実行してみて下さい.
さらに凝りたい方へ N=0, 1, 2, 3, 4 次のベッセル関数
いかがでしょうか? カンタンに折れ線を描くには たった 4 行のサブルーチン宣言. そこから凝り出すと, いくらでもカスタマイズが可能.
カンタン等高線ルーチン
いままでは, 単なる折れ線のグラフを 描いてきました. ここからは, 2 次元場の等高線とベクトルの グラフを作成してみましょう.
カンタン等高線ルーチン 実行ファイル ”contour” は, 2 次元非圧縮・渦なしで, 角度π/3 の 角を回る流れを表す流線関数のグラフです. 実行してみましょう.
実行ファイル ”contour” を実行すると... カンタン等高線ルーチン 実行ファイル ”contour” を実行すると... 2 次元非圧縮・渦なしの定常運動では, 流体は を満たすような流れを形成. グラフは, この方程式を満たす解 を等高線で描画したもの. 流線関数
サブルーチン解説 UDCNTR(2次元配列,X軸配列個数,X軸配列個数,Y軸配列個数)
カンタンベクトルルーチン
実行ファイル ”vector” は, 2 次元非圧縮・渦なしで, 角度π/3 の 角を回る流速ベクトルのグラフです. 実行してみましょう. カンタンベクトルルーチン 実行ファイル ”vector” は, 2 次元非圧縮・渦なしで, 角度π/3 の 角を回る流速ベクトルのグラフです. 実行してみましょう.
実行ファイル ”vector” を実行すると... カンタンベクトルルーチン 実行ファイル ”vector” を実行すると... 先の流線関数から求まるX, Y方向の流速 u, vを描画したもの.
サブルーチン解説 UGVECT(2次元配列(X方向ベクトル成分),X軸配列個数, 2次元配列(Y方向ベクトル成分), X軸配列個数, X軸配列個 数, Y軸配列個数)
等高線&ベクトル 重ね描き
等高線&ベクトル 流体力学でよく見られるグラフに, 2 次元等高線と 2 次元ベクトルの 重ね合わせたグラフがあります. このような重ね描きのグラフも簡単に 表示させることができます.
実行ファイル ”cntr_vctr” を実行すると...
サブルーチン解説 等高線とベクトルの重ね描きは, 等高線を描く ”UDCNTR” と ベクトルを描く ”UGVECT” を並べて宣言すれば簡単に描ける.
重ね描きのポイント 等高線データの格子点とベクトルデータの格子点 の数は違っていてもよい. これは, 等高線データ用配列とベクトルデータ用 配列の要素数を異なるものにすることで可能.
等高線の格子点とベクトルの格子点が同じだと...
格子点の数が多いと... これはこれで綺麗ですが...
格子点の数が少ないと... これはみすぼらしいですね...
ですので, 等高線とベクトル場を 重ねて表示させるなら, それぞれの格子点の数は変えておいた方が 見栄えがいいと思います.
その他テクニック
その他テクニック 描画領域の分割 1 つの出力で複数のグラフ アニメーション 画像の保存
以降は, 時間の都合上, 結果のみ示します. こんなこともできますよ. ぐらいの感じでご覧下さい. その他テクニック 以降は, 時間の都合上, 結果のみ示します. こんなこともできますよ. ぐらいの感じでご覧下さい.
”Lorentz” という実行ファイルを実行すると... 描画領域の分割 ”Lorentz” という実行ファイルを実行すると... ローレンツ方程式の有名な軌跡が描けます.
つまり, X-Y, Y-Z, Z-X の 3 枚のグラフが描ける. ローレンツ方程式は, という 3 変数の時間発展問題. つまり, X-Y, Y-Z, Z-X の 3 枚のグラフが描ける.
そこで, これらの 3 枚のグラフを1枚の グラフにしてみましょう. ”3_Lorentz” を実行してみて下さい.
描画領域の分割 このように, X-Y, X-Z, Y-Z 断面のグラフが同じページに描けます.
アニメーションの作成
先ほどのグラフを複数表示させる という技術を応用すると, カンタンにアニメーションが作れます. アニメーションの作成 先ほどのグラフを複数表示させる という技術を応用すると, カンタンにアニメーションが作れます.
諸般の事情で, ソースファイルを同梱 できませんでした. アニメーションの作成 諸般の事情で, ソースファイルを同梱 できませんでした.
以下の1次元線形波動方程式をスペクトル法で計算. アニメーションの作成(1) 以下の1次元線形波動方程式をスペクトル法で計算. 境界条件は周期境界. 初期条件は領域中央にピークをもつガウス関数. 解析解は, 初期条件を f(x) として,
解析解のように, 左右にピークが半分となって伝播. アニメーション(1) 動かしてみると... 解析解のように, 左右にピークが半分となって伝播.
以下の2次元線形移流方程式をスペクトル法で計算. アニメーションの作成(2) 以下の2次元線形移流方程式をスペクトル法で計算. 境界条件は周期境界. 初期条件は領域中央にピークをもつガウス関数. 解析解は, 初期条件を f(x,y) として,
アニメーション(2) 動かしてみると... 解析解のように移流速度で移流する.
グラフの保存 出力されたグラフは, ”q”を押せば,消えます. 出力されたグラフを保存するには, グラフが出力 されている状態で, ”d”を押して下さい. Post script で出力した場合は, Window には表示 されず, ps ファイルとして保存されています.
以上で, DCL について, 本当に簡単な 事柄を紹介致しました. 何かご質問等あれば, 挙手して下さい.
まとめ DCL は地球流体電脳倶楽部で開発された Fortran77 の描画ライブラリ.
参考文献 http://www.gfd-dennou.org/arch/dcl/dcl- f77doc/rc1/index_menu.html 地球流体電脳倶楽部 DCL チュートリアル
宣伝 https://itpass.scitec.kobe-u.ac.jp/~fourtran/index.html
概要 ITPASS の一環として, 有志によって行われてい る Fortranについての勉強会(不定期). 内容 数値解法・数値計算について 参加するには 誰でも参加いただけますが, ITPASS サーバのア カウント保持者には特典がつきます(後述). ”fourtran@itpass.scitec.kobe-u.ac.jp” まで
実際 https://itpass.scitec.kobe-u.ac.jp/~fourtran/hiki 実際に, 勉強会の詳細については, メインページから辿れる Hiki ページに記述してあります.
実際 Hiki ページでは, 過去の勉強会の発表・配布資料のアーカイブ 過去の勉強会の実習内容の履歴 参加者が作成したプログラムソースファイル・ 実行結果・データのアーカイブ Hiki ページは閲覧に制限をかけていませんので, 全世界からこれらの資料を閲覧可能. ITPASS サーバアカウント保持者は Hiki ページ の編集・ソースファイルのアップロード権限が特 典として付与.
内容等に関しましては, 先ほどの Hiki ページで ちなみに... 3/17 (水) 10:30 – 13:30 @508 にて, 第 7 回勉強会開催予定!! 内容等に関しましては, 先ほどの Hiki ページで ご確認下さい.
お付き合いいただき, 誠にありがとうございました.