階層的地球流体力学 スペクトルモデル集 SPMODEL 小高正嗣 (北大・理) 石渡正樹 (北大・地球環境) 竹広真一 (京大・数解研) 石岡圭一 (京大・理) 林祥介 (北大・理) 1.はじめに 自然現象の理論的記述と理解のためには… 昔:支配方程式を「手で解く」(式変形する) 解ける問題は少ない 手順を追体験し, 結果を確認することが可能 • 紙と鉛筆があれば追跡できる • 理解の共有へ 今:支配方程式を「数値的に解く」(数値計算) 解ける問題は多くなった 手順を追体験し, 結果を確認することは困難 • 他人のプログラムを追跡, 再構築するのは大変 • 結果を信じるしかない 2.計算結果を理解するには… 数値計算を追体験する必要がある 結果の図を得るまでの同じ計算 設定やパラメータを変更した計算 追体験の容易な数値モデルの要件 可読性が高い • まずはソースコードが読めないとわからない 拡張性が高い • 設定とパラメータの変更が簡単にできる • 系の変形も簡単にできる 3.SPMODEL 階層的地球流体力学スペクトルモデル集 GFD スペクトルモデルを階層的に整備 Fortran90 で記述 基本方針 コードの可読性を重視 • 実行速度性能にはこだわらない 共通のライブラリを利用 • プログラム構造を階層化 • 計算エンジンに ISPACK, データ I/O に gt4f90io 4.読みやすいコードにするために 変数配列などの書法をきめる 配列関数ライブラリ(spml)を用意 ISPACK の Fortran90 インターフェース スペクトル変換, 逆変換, 空間微分など データ入出力は gt4f90io におまかせ gtool4 netCDF 形式のデータ入出力を容易に • 4 つのサブルーチンを call するだけ 5.SPMODEL 書法 変数 データの種類を示す接頭詞をつける • 実空間データ • スペクトルデータ g_Zeta s_Zeta 配列関数 (出力型)_(機能)_(入力型) のように書く • スペクトル変換 • 逆変換 • 発散 s_Zeta=s_g(g_Zeta) g_Zeta=g_s(s_Zeta) s_Div_g(g_Zeta) 引数の型を間違えることが少ない 6.ソースコード例 1 次元線形移流拡散方程式 U D 2 t x x コード例 (Euler 法で時間積分) 2 s_ZetaA = s_ZetaB + & dt*( - U*s_Dx_s(s_Zeta) + D*s_Dx_s(s_Dx_s(s_Zeta)) 数式のように数値コードを書ける 2次元, 3次元の方程式系でも同様にできる 7.ソースコード例(データ I/O 部) use gt4history ! モジュール引用 … call HistoryCreate( & ! 出力ファイル作成 file=“output_file”, title=“Run Number”, source=“shallow” & institution=“GFD Dennou Club SPMODEL project”, & dims=(/‘lon’,‘lat’,‘t ’/),dimsizes=(/im,jm,0/), & longnames=(/‘longitude’,‘latitude ’,‘time ’/), & units=(/'deg.','deg.','sec.'/), origin=real(tinit), & interval=real(intrst*delt) ) … call HistoryAddVariable( varname=“eta”, & ! 出力変数定義 dims=(/’lon’,’lat’,’t ’/), logname=‘Vorticity’, units=‘1/s’,xtype=‘double’) … do it =1, n ! ループ開始 … call HistoryPut(‘eta’,xy_Eta) ! 変数出力 end do … call HistoryClose ! 入出力終了 8.開発した数値モデル 以下の方程式系の数値モデルを開発 1 次元モデル • 移流拡散方程式, KdV 方程式 2 次元モデル • 水路領域ブシネスク方程式, 赤道β面浅水方程式 • 球面順圧渦度方程式, 球面浅水方程式 3 次元モデル • 球殻ブシネスク方程式 • 球殻 MHD 方程式 • プリミティブ方程式(検討中) 9.動作環境 パソコン(x86 Linux) Fujitsu frt: Intel ifc: ver.3.0, 4.0 (5.0 もおそらく動作) ver.6.0, 7.0 • 8.0 は最新版(8.0.039)で部分的に動作 スーパーコンピュータ Fujitsu VPP NEC SX VPP800, VPP5000 移植作業中 10.計算時の CPU 時間 球面浅水モデルの場合 15 日モデル時間計算 • Δt=1800 sec, 720 ステップ(T106 はΔt=900 sec) 表示は hh:mm:ss 実行速度はまずまず Xeon 2.4GHz T42 T63 T106 00:00:33 00:01:09 00:13:52 00:00:09 ---------- 00:01:53 VPP800 11.球面浅水モデル計算結果 Williamson et al.(1992) のテスト:山を越える流れ 0, 5, 10, 15 日後の厚さ h の分布 12.SPMODEL の成果 数式のような数値コードが簡単に書ける 書法が決まっている • コード作成時のバグも出にくい 変数配列の添え字を管理しなくてよい • do ループは時間積分ループだけ 改変も簡単 なぜ簡単に書けたのか? 全ての変数が同じ格子点上にあるため • 配列添え字の隠蔽が容易 • 交互格子の差分モデルでは簡単には隠蔽できない 13.SPMODEL の課題 差分法と併用する場合 ex). 球面プリミティブ方程式モデル 解1:構造体を利用し配列添え字を隠蔽 • 構造体の演算に注意を払う必要がある 解2:配列添え字を陽に扱う • 安直だけど可読性は良くないだろう 解3:差分しない • 全部スペクトル, 使い物になるだろうか? コードを作成しながら検討を予定 14.参考 URL SPMODEL http://www.gfd-dennou.org/arch/spmodel/ ISPACK http://www.gfd-dennou.org/arch/ispack/ gt4f90io http://www.gfd-dennou.org/arch/gtool4/ 15.付録 Debian GNU/Linux 用パッケージを用意 インストール手順 /etc/apt/sources.list に以下の 2 行を追加 deb ftp://www.gfd-dennou.org/arch/spmodel/debian woody/ deb-src ftp://www.gfd-dennou.org/arch/spmodel/debian woody/ apt コマンドでインストール # apt-get install spml ISPACK, netCDF のパッケージも用意 詳細はhttp://www/gfddennou.org/arch/spmodel
© Copyright 2024 ExpyDoc