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 つの格子データに発散を作用させる


変数の説明

longitude, latitude

  1. 説明 : 格子点座標(緯度,経度)を格納した 1 次元配列.
  2. 変数の型
          real(8), dimension(im) :: longitude
          real(8), dimension(jm) :: latutude
        
  3. 備考
    単位はラジアン.

lon_weight, lat_weight

  1. 説明 : 重み座標を格納した 1 次元配列.
  2. 変数の型
          real(8), dimension(im) :: lon_weight
          real(8), dimension(jm) :: lat_weight
        
  3. 備考
    lon_weight には格子点の間隔が格納してある. lat_weight にはガウス重みが格納してある.

gg_lon, gg_lat

  1. 説明 : 各格子点(i,j)の位置の経度, 緯度座標を格納した格子データ.
  2. 変数の型
          real(8), dimension(im,jm) :: gg_lon, gg_lat
        
  3. 備考
    単位はラジアン.

サブルーチンの説明

subroutine spinitial(nm,im,jm,km)

  1. 機能 : スペクトル変換の格子点数, 波数を設定する(sppack モジュール).
  2. 引数の説明
        integer,intent(in)          :: nm          ! 切断全波数
        integer,intent(in)          :: im, jm      ! 格子点数(経度λ, 緯度φ)
        integer,intent(in)          :: km          ! 同時に処理する最大データ数(層の数)
        
  3. 備考
    他の関数を呼ぶ前に, 最初にこのサブルーチンを呼んで初期設定を しなければならない.

subroutine spinitial_single(nm,im,jm)

  1. 機能 : スペクトル変換の格子点数, 波数を設定する(sppack_single モジュール).
  2. 引数の説明
        integer,intent(in)          :: nm              ! 切断全波数
        integer,intent(in)          :: im, jm          ! 格子点数(経度λ, 緯度φ)
        
  3. 備考
    他の関数を呼ぶ前に, 最初にこのサブルーチンを呼んで初期設定を しなければならない.

各関数の説明

関数の名前について

凡例

function l_nm(n,m)

  1. 機能 : 全波数(n)と東西波数(m)からそのスペクトルデータの格納位置を返す.
  2. 備考

function nm_l(l)

  1. 機能 : スペクトルデータの格納位置(l)から全波数(n)と東西波数(m)を返す.
  2. 備考
    返り値は長さ 2 の整数配列 (n,m).

function gg_ep(ep,ipow,iflag)

  1. 機能 : スペクトルデータから格子データへ変換する.
  2. 引数の説明
  3. 備考

function ep_gg(g,ipow,iflag)

  1. 機能 : 格子データからスペクトルデータへ(正)変換する.
  2. 引数の説明
  3. 備考

function ep_lapla_ep(ep)

  1. 機能 : 入力スペクトルデータにラプラシアンを作用する.
  2. 備考
    スペクトルデータのラプラシアンとは, 対応する格子点データにラプラシアンを作用させたデータのスペクトル変換のことである. ラプラシアンは ▽^2 = 1/cos^2φ・∂^2/∂λ^2 + 1/cosφ・∂/∂φ(cosφ∂/∂φ) と計算される.

function ep_laplainv_ep(ep)

  1. 機能 : 入力スペクトルデータに逆ラプラシアンを作用する.
  2. 備考
    スペクトルデータの逆ラプラシアンとは, 対応する格子点データに逆ラプラシアンを作用させたデータのスペクトル変換のことである.

function ep_dlon_ep(ep)

  1. 機能 : 入力スペクトルデータに経度微分を作用する.
  2. 備考
    スペクトルデータの経度微分とは, 対応する格子点データに経度微分 ∂/∂λ を 作用させたデータのスペクトル変換のことである.

function ep_jacobian_ep_ep(ep_a,ep_b)

  1. 機能 : 2 つのスペクトルデータからヤコビアンを計算する.
  2. 備考
    2 つのスペクトルデータのヤコビアンとは, 対応する 2 つの格子点データのヤコビアンのスペクトル変換のことである.
    2 つのデータ f, g のヤコビアンは J(f,g) = ∂f/∂λ・∂g/∂μ - ∂g/∂λ・∂f/∂μ = ∂f/∂λ・1/cosφ・∂g/∂φ - ∂g/∂λ・1/cosφ・∂f/∂φ と計算される.

function gg_gradlon_ep(ep)

  1. 機能 : スペクトルデータに勾配型経度微分を作用させる.
  2. 備考
    スペクトルデータに対応する格子点データに 勾配型経度微分 1/cosφ・∂/∂λ を作用させた格子データが返される

function gg_gradlat_ep(ep)

  1. 機能 : スペクトルデータに勾配型経度微分を作用させる.
  2. 備考
    入力スペクトルデータに対応する格子データに 勾配型緯度微分 ∂/∂φ を作用させた格子データが返される

function ep_divlon_gg(gg)

  1. 機能 : 格子データに発散型経度微分を作用させる.
  2. 備考
    入力格子データに発散型経度微分 1/cosφ・∂/∂λ を作用させた スペクトルデータが返される

function ep_divlat_gg(gg)

  1. 機能 : 格子データに発散型緯度微分を作用させる.
  2. 備考
    入力格子データに発散型経度微分 1/cosφ・∂(g cosφ)/∂φ を作用させた スペクトルデータが返される

function ep_div_gg_gg(gg_u,gg_v)

  1. 機能 : ベクトル成分である 2 つの格子データに発散を作用させる.
  2. 備考
    第 1, 2 引数(u,v)がそれぞれベクトルの経度成分と緯度成分を表し, 発散は 1/cosφ・∂u/∂λ + 1/cosφ・∂(v cosφ)/∂φ と計算される.


地球流体電脳倶楽部 SPMODEL プロジェクト
spmodel(at)gfd-dennou.org

2001/12/09 作成 (竹広真一)
2001/02/02 更新 (竹広真一)