spml/w_module レファレンスマニュアル

spml/w_module モジュールは球面上での 2 次元流体運動を 球面調和函数を用いたスペクトル法によって数値計算するための Fortran90 関数を提供する. 内部で ISPACK の SPPACK と SNPACK の Fortran77 サブルーチンを呼んでいる. スペクトルデータおよび格子点データの格納方法や 変換の詳しい計算法については ISPACK/SNPACK,SPPACK のマニュアルを参照されたい.

w_module は実際には基本変換, 微分計算, 積分・平均計算をそれぞれ担っている 下部モジュール w_base_module, w_deriv_module, w_integral_module からなっている.

目次


サブルーチン・関数一覧(機能別)

初期化 機能
w_Initial スペクトル変換の格子点数, 波数, 領域の大きさの設定
座標変数 機能
x_Lon, y_Lat 格子点座標(X,Y座標)を格納した 1 次元配列.
x_Lon_weight, y_Lat_Weight 重み座標を格納した 1 次元配列.
xy_Lon, xy_Lat 格子点データの XY 座標(X,Y)(格子点データ型 2 次元配列)
基本変換 機能
xy_w スペクトルデータから格子データへの変換
w_xy 格子データからスペクトルデータへの変換
l_nm, nm_l スペクトルデータの格納位置と全波数・帯状波数の変換
微分 機能
w_Lapla_w スペクトルデータにラプラシアンを作用させる
rn スペクトルデータのラプラシアンを計算するための係数.
irm 経度微分演算用配列
w_LaplaInv_w スペクトルデータにラプラシアンの逆変換を作用させる
w_DLon_w スペクトルデータに経度微分 ∂/∂λ を作用させる
xy_GradLon_w スペクトルデータに勾配型経度微分 1/cosφ・∂/∂λ を作用させる
xy_GradLat_w スペクトルデータに勾配型緯度微分 ∂/∂φ を作用させる
w_DivLon_xy 格子データに発散型経度微分 1/cosφ・∂/∂λ を作用させる
w_DivLat_xy 格子データに発散型緯度微分 1/cosφ・∂(g cosφ)/∂φ を作用させる
w_Div_xy_xy ベクトル成分である 2 つの格子データに発散を作用させる
w_Jacobian_w_w 2 つのスペクトルデータからヤコビアンを計算する.
積分・平均 機能
IntLonLat_xy, AvrLonLat_xy 2 次元格子点データの全領域積分および平均.
y_IntLon_xy, y_AvrLon_xy 2 次元格子点データの経度方向積分および平均.
IntLon_x, AvrLon_x 1 次元(X)格子点データの経度方向積分および平均.
x_IntLat_xy, x_AvrLat_xy 2 次元格子点データの緯度方向積分および平均.
IntLat_y, AvrLat_y 1 次元(Y)格子点データの緯度方向積分および平均.


関数・変数の名前と型について

命名法

各データの種類の説明


サブルーチンの説明

subroutine w_Initial(nm,im,jm)

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


変数の説明

x_Lon, y_Lat

  1. 説明 : 格子点座標(X,Y)を格納した 1 次元配列.
  2. 変数の型
          real(8), dimension(im) :: x_Lon
          real(8), dimension(jm) :: y_Lat
        
  3. 備考

x_Lon_Weigtht, y_Lat_Weight

  1. 説明 : 重み座標を格納した 1 次元配列.
  2. 変数の型
          real(8), dimension(im) :: x_X_Weigtht
          real(8), dimension(jm) :: y_Y_Weigtht
        
  3. 備考
    x_X_Weight, y_Y_Weight にはそれぞれ X, Y 方向の格子点の 間隔が格納してある.

xy_Lon, xy_Lat

  1. 説明 : 各格子点(i,j)の位置の X, Y 座標を格納した格子データ.
  2. 変数の型
          real(8), dimension(im,jm) :: xy_Lon, xy_Lat
        
  3. 備考

rn

  1. 説明 : スペクトルデータのラプラシアンを計算するための係数.
    r(L,1) には L 番目の格納位置のスペクトルに対する ラプラシアン計算の係数 -n(n+1) の値が格納されている. ここで n は L 番目のスペクトルの全波数である. rn(L,2) には逆ラプラシアン計算の係数 -1/n(n+1) の値が格納される. ただし n=0 の場合には 1 としている.
  2. 変数の型
          real(8), dimension((nm+1)*(nm+1),2)) :: rn    ! ラプラシアン演算用配列
        
  3. 備考

irm

  1. 説明 : スペクトルデータの経度微分を計算するための係数.
    L番目の格納位置のスペクトルが実部なら irm(L,1)には対応する虚部の格納位置が, irm(L,2) には東西波数 m が格納されている. また, L番目の格納位置のスペクトルが虚部なら irm(L,1)には対応する実部の格納位置が, irm(L,2)には -m が格納されている.
  2. 変数の型
          integer, dimension((nm+1)*(nm+1),2)) :: irm    ! 経度微分演算用配列
        
  3. 備考

各関数の説明

function l_nm(n,m)

  1. 機能 : 全波数(n)と東西波数(m)からそのスペクトルデータの格納位置を返す.
  2. 変数の型
          integer               :: l_nm     ! スペクトルデータ位置
          integer, intent(in)   :: n, m     ! 全波数, 帯状波数
        
  3. 備考

function nm_l(l)

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

function xy_w(w_data,ipow,iflag)

  1. 機能 : スペクトルデータから格子データへ変換する.
  2. 変数の型
          real(8)               :: xy_w(im,jm)            ! 格子点
          real(8), intent(in)   :: w_data((nm+1)*(nm+1))  ! スペクトル
          integer, intent(in), optional  :: ipow      ! 作用させる 1/cosφ の次数
          integer, intent(in), optional  :: iflag     ! 変換の種類
        
  3. 引数の説明
  4. 備考

function w_xy(xy_data,ipow,iflag)

  1. 機能 : 格子データからスペクトルデータへ(正)変換する.
  2. 変数の型
          real(8)               :: w_xy((nm+1)*(nm+1))! スペクトル
          real(8), intent(in)   :: xy_data(im,jm)     ! 格子点
          integer, intent(in), optional  :: ipow      ! 作用させる 1/cosφ の次数
          integer, intent(in), optional  :: iflag     ! 変換の種類
        
  3. 引数の説明
  4. 備考

function w_Lapla_w(w_data)

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

function w_LaplaInv_w(w_data)

  1. 機能 : 入力スペクトルデータに逆ラプラシアンを作用する.
  2. 変数の型
          real(8)              :: w_LaplaInv_w((nm+1)*(nm+1))
          real(8), intent(in)  :: w_data((nm+1)*(nm+1))
        
  3. 備考
    スペクトルデータの逆ラプラシアンとは, 対応する格子点データに逆ラプラシアンを作用させたデータのスペクトル変換のことである.

function w_DLon_w(w_data)

  1. 機能 : 入力スペクトルデータに経度微分を作用する.
  2. 変数の型
          real(8)              :: w_DLon_w((nm+1)*(nm+1))
          real(8), intent(in)  :: w_data((nm+1)*(nm+1))
        
  3. 備考
    スペクトルデータの経度微分とは, 対応する格子点データに経度微分 ∂/∂λ を 作用させたデータのスペクトル変換のことである.

function xy_GradLon_w(w_data)

  1. 機能 : スペクトルデータに勾配型経度微分を作用させる.
  2. 変数の型
          real(8)              :: xy_GradLat_w(im,jm)
          real(8), intent(in)  :: w_data((nm+1)*(nm+1))
        
  3. 備考
    スペクトルデータに対応する格子点データに 勾配型経度微分 1/cosφ・∂/∂λ を作用させた格子データが返される

function xy_GradLat_w(w_data)

  1. 機能 : スペクトルデータに勾配型経度微分を作用させる.
  2. 変数の型
          real(8)              :: xy_GradLat_w(im,jm)
          real(8), intent(in)  :: w_data((nm+1)*(nm+1))
        
  3. 備考
    入力スペクトルデータに対応する格子データに 勾配型緯度微分 ∂/∂φ を作用させた格子データが返される

function w_DivLon_xy(xy_data)

  1. 機能 : 格子データに発散型経度微分を作用させる.
  2. 変数の型
          real(8)              :: w_DivLon_xy((nm+1)*(nm+1))
          real(8), intent(in)  :: xy_data(im,jm)
        
  3. 備考
    入力格子データに発散型経度微分 1/cosφ・∂/∂λ を作用させた スペクトルデータが返される

function w_DivLat_xy(xy_data)

  1. 機能 : 格子データに発散型緯度微分を作用させる.
  2. 変数の型
          real(8)              :: w_DivLat_xy((nm+1)*(nm+1))
          real(8), intent(in)  :: xy_data(im,jm)
        
  3. 備考
    入力格子データに発散型経度微分 1/cosφ・∂(g cosφ)/∂φ を作用させた スペクトルデータが返される

function w_Div_xy_xy(xy_u,xy_v)

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

function w_Jacobian_w_w(w_a,w_b)

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

function IntLonLat_xy(xy), function AvrLonLat_xy(xy)

  1. 機能 : 2 次元格子点データの全領域積分および平均.
  2. 変数の型
          real(8), dimension(im,jm)   :: xy             ! 2 次元格子点
          real(8)                     :: IntLonLat_xy   ! 積分値
    
          real(8), dimension(im,jm)   :: xy             ! 2 次元格子点
          real(8)                     :: AvrLonLat_xy   ! 平均値
        
  3. 備考

function y_IntLon_xy(xy), function y_AvrLon_xy(xy)

  1. 機能 : 2 次元格子点データの経度方向積分および平均.
  2. 変数の型
          real(8), dimension(im,jm)   :: xy            ! 2 次元格子点
          real(8), dimension(jm)      :: y_IntLon_xy   ! 1 次元(緯度)格子点
    
          real(8), dimension(im,jm)   :: xy            ! 2 次元格子点
          real(8), dimension(jm)      :: y_AvrLon_xy   ! 1 次元(緯度)格子点
        
  3. 備考

function IntLon_x(x), function AvrLon_x(x)

  1. 機能 : 1 次元(Lon)格子点データの経度方向積分および平均.
  2. 変数の型
          real(8), dimension(im)   :: x            ! 1 次元格子点
          real(8)                  :: IntLon_x     ! 積分値
    
          real(8), dimension(im)   :: x            ! 1 次元格子点
          real(8)                  :: AvrLon_x     ! 平均値
        
  3. 備考

function x_IntLonLat_xy(xy), function x_AvrLonLat_xy(xy)

  1. 機能 : 2 次元格子点データの緯度方向域積分および平均.
  2. 変数の型
          real(8), dimension(im,jm)   :: xy            ! 2 次元格子点
          real(8), dimension(im)      :: x_IntLat_xy   ! 1 次元(経度)格子点
    
          real(8), dimension(im,jm)   :: xy            ! 2 次元格子点
          real(8), dimension(im)      :: x_AvrLat_xy   ! 1 次元(経度)格子点
        
  3. 備考

function IntLonLat_y(y), function AvrLonLat_y(y)

  1. 機能 : 1 次元(Lat)格子点データの緯度方向域積分および平均.
  2. 変数の型
          real(8), dimension(jm)   :: y            ! 1 次元格子点
          real(8)                  :: IntLat_y     ! 積分値
    
          real(8), dimension(jm)   :: y            ! 1 次元格子点
          real(8)                  :: AvrLat_y     ! 平均値
        
  3. 備考


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

2002/08/21 作成 (竹広真一)