ISPACK F90/SPPACK レファレンスマニュアル
ISPACK F90/SPPACK モジュールは球面上での 2 次元流体運動を
スペクトル法により数値計算するための Fortran90 関数を提供する.
内部で ISPACK の SPPACK と SNPACK の Fortran77 サブルーチンを呼んでいる.
スペクトルデータおよび格子点データの格納方法や
変換の詳しい計算法については ISPACK/SNPACK,SPPACK のマニュアルを参照されたい.
モジュール stpack では各関数とも 1 層データ(2 次元), 多層データ(3 次元)どちらも
扱うことができる.
多層データの層数は初期化ルーチンで指定した最大値以下であれば制限がない.
1 層データのみ扱う場合のために stpack_single モジュールも用意してある.
ISPACK F90 版 SPPACK は内部で ISPACK F90 版 SNPACK を使っているので,
使用する際には sppack.f90 だけでなく snpack.f90 も必要になる.
変数・サブルーチン・関数一覧
変数名 |
機能 |
longitude,latitude |
格子点座標(緯度,経度)を格納した 1 次元配列. |
lon_weigtht, lat_weight |
重み座標を格納した 1 次元配列. |
gg_lon, gg_lat |
格子点データの経度緯度座標(λ,φ)(格子点データ型 2 次元配列) |
サブルーチン名 |
機能 |
spinitial |
スペクトル変換の格子点数, 波数, 最大層数の設定(sppack モジュール, 多層用) |
spinitial_single |
スペクトル変換の格子点数, 波数の設定(sppack_single モジュール, 1 層用) |
関数名 |
機能 |
l_nm |
各全波数東西波数からスペクトルデータの格納位置を返す |
nm_l |
スペクトルデータの格納位置から全波数と東西波数を返す |
gg_ep |
スペクトルデータから格子データへの変換 |
ep_gg |
格子データからスペクトルデータへの変換 |
ep_lapla_ep |
スペクトルデータにラプラシアンを作用させる |
ep_laplainv_ep |
スペクトルデータにラプラシアンの逆変換を作用させる |
ep_dlon_ep |
スペクトルデータに経度微分 ∂/∂λ を作用させる |
ep_jacobian_ep_ep |
2 つのスペクトルデータのヤコビアンを計算する |
gg_gradlon_ep |
スペクトルデータに勾配型経度微分 1/cosφ・∂/∂λ を作用させる |
gg_gradlat_ep |
スペクトルデータに勾配型緯度微分 ∂/∂φ を作用させる |
ep_divlon_gg |
格子データに発散型経度微分 1/cosφ・∂/∂λ を作用させる |
ep_divlat_gg |
格子データに発散型緯度微分 1/cosφ・∂(g cosφ)/∂φ を作用させる |
ep_div_gg_gg |
ベクトル成分である 2 つの格子データに発散を作用させる |
変数の説明
- 説明 : 格子点座標(緯度,経度)を格納した 1 次元配列.
- 変数の型
real(8), dimension(im) :: longitude
real(8), dimension(jm) :: latutude
- 備考
単位はラジアン.
- 説明 : 重み座標を格納した 1 次元配列.
- 変数の型
real(8), dimension(im) :: lon_weight
real(8), dimension(jm) :: lat_weight
- 備考
lon_weight には格子点の間隔が格納してある.
lat_weight にはガウス重みが格納してある.
- 説明 : 各格子点(i,j)の位置の経度, 緯度座標を格納した格子データ.
- 変数の型
real(8), dimension(im,jm) :: gg_lon, gg_lat
- 備考
単位はラジアン.
サブルーチンの説明
- 機能 : スペクトル変換の格子点数, 波数を設定する(sppack モジュール).
- 引数の説明
integer,intent(in) :: nm ! 切断全波数
integer,intent(in) :: im, jm ! 格子点数(経度λ, 緯度φ)
integer,intent(in) :: km ! 同時に処理する最大データ数(層の数)
- 備考
他の関数を呼ぶ前に, 最初にこのサブルーチンを呼んで初期設定を
しなければならない.
- 機能 : スペクトル変換の格子点数, 波数を設定する(sppack_single モジュール).
- 引数の説明
integer,intent(in) :: nm ! 切断全波数
integer,intent(in) :: im, jm ! 格子点数(経度λ, 緯度φ)
- 備考
他の関数を呼ぶ前に, 最初にこのサブルーチンを呼んで初期設定を
しなければならない.
各関数の説明
関数の名前について
- 関数名の先頭 (ep_, gg_) は, 返す値の形を示している.
ep_ : スペクトルデータ, gg_ : 格子点データ
- 関数名の間の文字列(dlon, lapla, laplainv, jacobian, gradlon, gradlat,
divlon, divlat, div)は,
その関数の作用を表している.
- 関数名の最後 (_ep,_ep_ep,_gg,_gg_gg) は,
入力変数の形スペクトルデータおよび格子点データであることを示している.
_ep : スペクトルデータ, _ep_ep : 2 つのスペクトルデータ,
_gg : 格子点データ, _gg_gg : 2 つの格子点データ.
凡例
- gg : 格子点データ.
変数の種類と次元は 1 層データ real(8), dimension(im,jm)
あるいは多層データ real(8), dimension(im,jm,*)
(ただし stpack_single では 2 次元データのみ).
im, jm はそれぞれ経度, 緯度座標の格子点数であり,
サブルーチン spinitial
あるいは spinitial_single
にてあらかじめ設定しておく.
- ep : スペクトルデータ.
変数の種類と次元は 1 層データ real(8), dimension((nm+1)*(nm+1))
あるいは多層データ real(8), dimension((nm+1)*(nm+1),*)
(ただし stpack_single では 2 次元データのみ).
nm は球面調和函数の最大全波数であり,
サブルーチン spinitial
あるいは spinitial_single
にてあらかじめ設定しておく.
スペクトルデータの格納のされ方は関数
l_nm, nm_l によって
調べることができる.
- ep_ で始まる関数が返す値はスペクトルデータに同じ.
- gg_ で始まる関数が返す値は格子点データに同じ.
- スペクトルデータに対する微分等の作用とは,
対応する格子点データに微分などを作用させたデータを
スペクトル変換したものことである.
- 多層データの場合には同時に処理する最大の層の数
(同時に処理する最大データ数)も
spinitial で設定しておく.
多層データを各関数に与えた場合,
複数の 2 次元データが同時に処理されることになる.
返される配列の最後の次元の長さは入力のものと同じである.
- 機能 : 全波数(n)と東西波数(m)からそのスペクトルデータの格納位置を返す.
- 備考
- 機能 : スペクトルデータの格納位置(l)から全波数(n)と東西波数(m)を返す.
- 備考
返り値は長さ 2 の整数配列 (n,m).
- 機能 : スペクトルデータから格子データへ変換する.
- 引数の説明
- 整数型オプショナル引数 ipow は,
変換時に同時に作用させる 1/(cosφ)**n の次数を指定する.
省略したときは 0.
- 整数型オプショナル引数 iflag は変換の種類を指定する.
0 : 通常の正変換
1 : 経度微分を作用させた正変換
-1 : 緯度微分を作用させた正変換
2 : sinφを作用させた正変換
省略時は 0.
- 備考
- 機能 : 格子データからスペクトルデータへ(正)変換する.
- 引数の説明
- 整数型オプショナル引数 ipow は,
変換時に同時に作用させる 1/(cosφ)**n の次数を指定する.
省略したときは 0.
- 整数型オプショナル引数 iflag は変換の種類を指定する.
0 : 通常の正変換
1 : 経度微分を作用させた正変換
-1 : 緯度微分を作用させた正変換
2 : sinφを作用させた正変換
省略時は 0.
- 備考
- 機能 : 入力スペクトルデータにラプラシアンを作用する.
- 備考
スペクトルデータのラプラシアンとは,
対応する格子点データにラプラシアンを作用させたデータのスペクトル変換のことである.
ラプラシアンは ▽^2 = 1/cos^2φ・∂^2/∂λ^2 + 1/cosφ・∂/∂φ(cosφ∂/∂φ) と計算される.
- 機能 : 入力スペクトルデータに逆ラプラシアンを作用する.
- 備考
スペクトルデータの逆ラプラシアンとは,
対応する格子点データに逆ラプラシアンを作用させたデータのスペクトル変換のことである.
- 機能 : 入力スペクトルデータに経度微分を作用する.
- 備考
スペクトルデータの経度微分とは,
対応する格子点データに経度微分 ∂/∂λ を
作用させたデータのスペクトル変換のことである.
- 機能 : 2 つのスペクトルデータからヤコビアンを計算する.
- 備考
2 つのスペクトルデータのヤコビアンとは,
対応する 2 つの格子点データのヤコビアンのスペクトル変換のことである.
2 つのデータ f, g のヤコビアンは
J(f,g) = ∂f/∂λ・∂g/∂μ - ∂g/∂λ・∂f/∂μ
= ∂f/∂λ・1/cosφ・∂g/∂φ - ∂g/∂λ・1/cosφ・∂f/∂φ
と計算される.
- 機能 : スペクトルデータに勾配型経度微分を作用させる.
- 備考
スペクトルデータに対応する格子点データに
勾配型経度微分 1/cosφ・∂/∂λ を作用させた格子データが返される
- 機能 : スペクトルデータに勾配型経度微分を作用させる.
- 備考
入力スペクトルデータに対応する格子データに
勾配型緯度微分 ∂/∂φ を作用させた格子データが返される
- 機能 : 格子データに発散型経度微分を作用させる.
- 備考
入力格子データに発散型経度微分 1/cosφ・∂/∂λ を作用させた
スペクトルデータが返される
- 機能 : 格子データに発散型緯度微分を作用させる.
- 備考
入力格子データに発散型経度微分 1/cosφ・∂(g cosφ)/∂φ を作用させた
スペクトルデータが返される
- 機能 : ベクトル成分である 2 つの格子データに発散を作用させる.
- 備考
第 1, 2 引数(u,v)がそれぞれベクトルの経度成分と緯度成分を表し,
発散は 1/cosφ・∂u/∂λ + 1/cosφ・∂(v cosφ)/∂φ と計算される.
地球流体電脳倶楽部 SPMODEL プロジェクト
spmodel(at)gfd-dennou.org
2001/12/09 作成 (竹広真一)
2001/02/02 更新 (竹広真一)