階層的地球流体スペクトルモデル集 SPMODEL << Prev | Index| Next >>

3. SPMODEL ライブラリ(spml)

3.1. サブルーチンと関数の例

SPMODEL ライブラリ (spml) [4] は, スペクトル法による流体計算のための基本的な 関数を提供するライブラリである. これらの関数群は, スペクトル計算のための既存 FORTRAN77 ライブラリである ISPACK[2] のサブルーチン群を, 第 2 節 で説明した Fortran90 で強化された配列機能を利用してくるむことにより 作成されたものである. ISPACK が提供していた格子点空間とスペクトル空間との変換に加えて, 微分積分計算をも関数として新たに追加している.

SPMODEL ライブラリが提供するサブプログラムの例として, 1 次元周期境界条件領域用のサブルーチンと関数のいくつかを以下に示す.

3.2. 関数の命名法と書法

SPMODEL ライブラリの関数の名前は

(出力データ空間識別子)_(機能)_(入力データ空間識別子)

といった形に統一されている.

名前自体は冗長になるが, 関数への入力データと関数からの出力とが定義されている空間 (たとえばスペクトル空間か実空間か), ならびに, 関数の機能を名前からわかるようにすることで, 操作内容を読みとりやすくし, 同時に, プログラム間違いを減らすことを 狙っている.

関数の命名法にあわせて, 格子点およびスペクトルデータを表す配列を

(変数のデータ空間識別子)_(変数名) 

といった形式にそろえて用いることを推奨している. 関数と関数が作用する変数の書式を統一することにより, 以下の例で示すように, 数式表現で良くもちいられるテンソル表現に 類似した表現形式をもったプログラムを作成することができる.

1 次元周期境界条件用モジュールで用意されている関数の場合で 例示しよう. 先にリストしたように, スペクトル変換と微分は次のような名前を与えられていた:

g_e(e_Data)      ! スペクトルから格子点への変換
e_g(g_Data)      ! 格子点からスペクトルへの変換
e_Dx_e(e_Data)   ! x 微分(波数をかける)

関数の接頭子 e_, g_ は, 関数の出力がそれぞれスペクトル空間および実空間(格子点)で 定義されているデータ配列であることを示す データ空間識別子である. 一方, 関数の接尾子 _e, _g は, 関数への入力データがそれぞれ スペクトル空間および実空間(格子点)で定義された データ配列であることを示すデータ空間識別子である. 配列データも同じ表記に従い, e_Data, g_Data はそれぞれ, スペクトルデータおよび実空間(格子点)データであることを示している.

これらの関数を用いると, 格子点データ配列 g_Data1 の x 微分を スペクトル変換して計算し, 格子点配列 g_Data2 に格納することが

g_Data2 = g_e(e_Dx_e(e_g(g_Data1)))

という 1 行で表記できる. 接頭子と接尾子がちょうどテンソル計算での添字の縮約規則のように 対になって現れることに注意されたい.


階層的地球流体スペクトルモデル集 SPMODEL << Prev | Index| Next >>