SPMODEL - ISPACK とgt4f90io

階層的地球流体力学
スペクトルモデル集 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