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

spml/et_module モジュールは 2 次元水路領域での流体運動をスペクトル法により 数値計算を実行するための Fortran90 関数を提供する. 周期的な境界条件を扱うための X 方向へのフーリエ変換と 境界壁を扱うための Y 方向のチェビシェフ変換を用いる場合の スペクトル計算のためのさまざまな関数を提供する. 内部で ae_module, at_module を用いている. 最下部ではフーリエ変換およびチェビシェフ変換のエンジンとして ISPACK/FTPACK の Fortran77 サブルーチンを用いている.

目次


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

初期化 機能
et_initial スペクトル変換の格子点数, 波数, 領域の大きさの設定
座標変数 機能
x_X, y_Y 格子点座標(X,Y座標)を格納した 1 次元配列.
x_X_Weigtht, y_Y_Weight 重み座標を格納した 1 次元配列.
yx_X, yx_Y 格子点データの XY 座標(X,Y)(格子点データ型 2 次元配列)
基本変換 機能
yx_et スペクトルデータから格子データへの変換(2 次元)
et_yx 格子データからスペクトルデータへの変換(2 次元)
ax_ae, x_e X 方向のスペクトルデータから格子データへの変換
ay_at, y_t Y 方向のスペクトルデータから格子データへの変換
ae_ax, e_x X 方向の格子点データからスペクトルデータへの変換
at_ay, t_y Y 方向の格子点データからスペクトルデータへの変換
微分 機能
et_Lapla_et スペクトルデータにラプラシアンを作用させる
et_Dx_et, ae_Dx_ae, e_Dx_e スペクトルデータにX 微分を作用させる
et_Dy_et at_Dy_at, t_Dy_t スペクトルデータに Y 微分を作用させる
非線形計算 機能
et_Jacobian_et_et 2 つのスペクトルデータからヤコビアンを計算する.
境界値問題 機能
et_Boundaries ディリクレ, ノイマン境界条件の適用
et_LaplaInv_et スペクトルデータにラプラシアンの逆変換を作用させる.
ey_Vor2Strm_ey, et_Vor2Strm_et, et_Vor2Strm1_et 渦度から流線を計算する.
積分・平均 機能
IntYX_yx, AvrYX_yx 2 次元格子点データの全領域積分および平均.
y_IntX_yx, y_AvrX_yx 2 次元格子点データの X 方向積分および平均.
IntX_x, AvrX_x 1 次元(X)格子点データの X 方向積分および平均.
x_IntY_yx, x_AvrY_yx 2 次元格子点データの Y 方向積分および平均.
IntY_y, AvrY_y 1 次元(Y)格子点データの Y 方向積分および平均.


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

命名法

各データの種類の説明


サブルーチンの説明

subroutine et_Initial(i,j,k,l,xmin,xmax,ymin,ymax)

  1. 機能 : スペクトル変換の格子点数, 波数, 領域の大きさを設定する.
  2. 引数の説明
        integer,intent(in) :: i, j             ! 格子点の設定(X,Y)
        integer,intent(in) :: k, l             ! 切断波数の設定(X,Y)
        real(8),intent(in) :: xmin, xmax       ! X 座標の範囲
        real(8),intent(in) :: ymin, ymax       ! Y 座標の範囲
        
  3. 備考
    他の関数や変数を呼ぶ前に, 最初にこのサブルーチンを呼んで初期設定を しなければならない.

subroutine et_Boundaries(et,values,cond)

  1. 機能 : ディリクレ, ノイマン条件の適用. チェビシェフ空間での計算
  2. 引数の説明
          real(8), dimension(-km:km,0:lm),intent(inout)      :: et
                  ! 境界条件を適用するデータ. 修正された値を返す. 
    
          real(8), dimension(-km:km,2), intent(in), optional :: values
                  ! 境界での 値/勾配 分布を水平スペクトル変換したものを与える. 
                  ! 省略時は値/勾配 0 となる. 
    
          character(len=2), intent(in), optional             :: cond
                  ! 境界条件. 省略時は 'DD'
                  !   DD : 両端ディリクレ
                  !   DN,ND : ディリクレ/ノイマン条件
                  !   NN : 両端ノイマン
        
  3. 備考
    実際には中で呼ばれている at_module のサブルーチン at_Boundaries_DD, at_Boundaries_DN, at_Boundaries_ND, at_Boundaries_NN を用いている. これらを直接呼ぶことも出来る.

変数の説明

x_X, y_Y

  1. 説明 : 格子点座標(X,Y)を格納した 1 次元配列.
  2. 変数の型
          real(8), dimension(0:im-1) :: x_X
          real(8), dimension(0:jm)   :: y_Y
        
  3. 備考
    X 方向は等間隔格子点. Y 方向は JM 次のチェビシェフ多項式の零点から定まる格子点.

x_X_Weigtht, y_Y_Weight

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

yx_X, yx_Y

  1. 説明 : 各格子点(i,j)の位置の X, Y 座標を格納した格子データ.
  2. 変数の型
          real(8), dimension(0:jm,0:im-1) :: yx_X, yx_Y
        
  3. 備考
    x_X, y_Y を 2 次元に拡張した配列. 2 次元データの値を設定する際にはこれらの変数を用いると
           yx_Data = yx_X ** 2 + yx_Y **2 
        
    という具合に数式と同じ形で書くことができる.

各関数の説明

function yx_et(et)

  1. 機能 : スペクトルデータから格子データへ変換する.
  2. 変数の型
          real(8), dimension(0:jm,0:im-1)              :: yx_et
          real(8), dimension(-km:km,0:lm), intent(in)  :: et
        
  3. 備考

function et_yx(yx)

  1. 機能 : 格子データからスペクトルデータへ変換する.
  2. 変数の型
          real(8), dimension(-km:km,0:lm)              :: et_yx
          real(8), dimension(0:jm,0:im-1), intent(in)  :: yx
        
  3. 備考

function x_e(e), function ax_ae(ae)

  1. 機能 : X 方向のスペクトルデータから格子データへ変換する.
  2. 変数の型
          real(8), dimension(0:im-1)               :: x_e
          real(8), dimension(-km:km), intent(in)   :: e
    
          real(8), dimension(size(ae,1),0:im-1)    :: ax_ae
          real(8), dimension(:,-km:km), intent(in) :: ae
        
  3. 備考
    実際は中で呼ばれている ae_module の関数.

function y_t(t), function ay_at(at)

  1. 機能 : Y 方向のスペクトルデータから格子データへ変換する.
  2. 変数の型
          real(8), dimension(0:jm)               :: y_t
          real(8), dimension(0:lm), intent(in)   :: t
    
          real(8), dimension(size(at,1),0:jm)    :: ay_at
          real(8), dimension(:,0:lm), intent(in) :: at
        
  3. 備考
    実際は中で呼ばれている at_module の関数.

function e_x(x), function ae_ax(ax)

  1. 機能 : X 方向の格子データからスペクトルデータへ変換する.
  2. 変数の型
          real(8), dimension,-km:km)               :: e_x
          real(8), dimension(0:im-1), intent(in)   :: x
    
          real(8), dimension(size(ax,1),-km:km)    :: ae_ax
          real(8), dimension(:,0:im-1), intent(in) :: ax
        
  3. 備考
    実際は中で呼ばれている ae_module の関数.

function t_y(y), function at_ay(ay)

  1. 機能 : Y 方向の格子データからスペクトルデータへ変換する.
  2. 変数の型
          real(8), dimension(0:lm)               :: t_y
          real(8), dimension(0:jm), intent(in)   :: y
    
          real(8), dimension(size(ay,1),0:lm)    :: at_ay
          real(8), dimension(:,0:jm), intent(in) :: ay
        
  3. 備考
    実際は中で呼ばれている at_module の関数.

function et_Lapla_et(et)

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

function et_Dx_et(et), function ae_Dx_ae(ae), function e_Dx_e(e)

  1. 機能 : 入力スペクトルデータに X 微分を作用する.
  2. 変数の型
          real(8), dimension(-km:km,0:lm)                :: et_Dx_et
          real(8), dimension(-km:km,0:lm), intent(in)    :: et
    
          real(8), dimension(size(ae,1),-km:km)          :: ae_Dx_ae
          real(8), dimension(:,-km:km), intent(in)       :: ae
    
          real(8), dimension(-km:km)                     :: e_Dx_a
          real(8), dimension(-km:km), intent(in)         :: e
        
  3. 備考
    スペクトルデータの X 微分とは, 対応する格子点データに X 微分を作用させたデータのスペクトル変換のことである.

function et_Dy_et(et), function at_Dy_at(et), function t_Dy_t(et)

  1. 機能 : 入力スペクトルデータに Y 微分を作用する.
  2. 変数の型
          real(8), dimension(-km:km,0:lm)               :: et_Dy_et
          real(8), dimension(-km:km,0:lm), intent(in)   :: et
    
          real(8), dimension(size(at,1),0:lm)           :: at_Dy_at
          real(8), dimension(:,0:lm), intent(in)        :: at
    
          real(8), dimension(0:lm)                      :: t_Dy_t
          real(8), dimension(0:lm), intent(in)          :: t
        
  3. 備考
    スペクトルデータの Y 微分とは, 対応する格子点データに Y 微分を作用させたデータのスペクトル変換のことである.

function et_Jacobian_et_et(et_a,et_b)

  1. 機能 : 2 つのスペクトルデータからヤコビアンを計算する.
  2. 変数の型
          real(8), dimension(-km:km,0:lm)                :: et_Jacobian_et_et
          real(8), dimension(-km:km,0:lm), intent(in)    :: et_a, et_b
        
  3. 備考
    2 つのスペクトルデータのヤコビアンとは, 対応する 2 つの格子点データのヤコビアンのスペクトル変換のことである.

function et_LaplaInv_et(et,values)

  1. 機能 : 境界で一様な値を与える条件(ディリクレ条件)下で, 入力スペクトルデータに逆ラプラシアンを作用する.
  2. 変数の型
          real(8), dimension(-km:km,0:lm)             :: et_LaplaInv_et
          real(8), dimension(-km:km,0:lm),intent(in)  :: et
          real(8), dimension(-km:km,2), intent(in), optional :: values ! Y=0,jmでの境界値
        
  3. 備考
    スペクトルデータの逆ラプラシアンとは, 対応する格子点データに逆ラプラシアンを作用させたデータのスペクトル変換のことである.

function ey_Vor2Strm_ey(ey,values,cond)

  1. 機能 : 渦度から流線を求める. Y 方向格子点空間での Chebyshev-Collocation 法による計算
          | 渦度 \zeta を与えて流線 \psi を求める.
          !    \nabla^2 \psi = \zeta, 
          !    \psi = const. at boundaries.
          ! 粘着条件
          !    \DP{\psi}{y} = 0 at boundaries
          ! 応力なし条件
          !    \DP[2]{\psi}{y} = 0 at boundaries
          
  2. 変数の型
          real(8), dimension(-km:km,0:jm),intent(in)  :: ey
                  ! 入力渦度分布
    
          real(8), dimension(-km:km,0:jm)             :: ey_Vor2Strm_ey
                  ! 出力流線分布
    
          real(8), dimension(2), intent(in), optional :: values
                  ! 流線境界値. 境界で一定なので波数 0 成分のみ
    	      ! 省略時は 0.
    
          character(len=2), intent(in), optional  :: cond
                  ! 境界条件スイッチ. 省略時は 'RR'
                  !   RR : 両端粘着条件
                  !   RF,FR : 粘着/応力なし条件
                  !   FF : 両端応力なし条件
        
  3. 備考
    Y 方向の切断波数を lm=jm と設定しておかないと 計算結果が振動して不安定となる.

function et_Vor2Strm_et(et,values,rigid)

  1. 機能 : 渦度から流線を求める. Y 方向チェビシェフ空間での Chebyshev-tau 法による計算.
          ! 渦度 \zeta を与えて流線 \psi を求める.
          !    \nabla^2 \psi = \zeta, 
          !    \psi = const. at boundaries.
          ! 粘着条件
          !    \DP{\psi}{y} = 0 at boundaries
          ! 応力なし条件
          !    \DP[2]{\psi}{y} = 0 at boundaries
          !
          ! l=0,1,lm-1,lm 成分の式の代わりに境界条件を与える. 
          ! 渦度の低次成分を無視することは
          ! \nabla^4 \psi = \zeta^2 を解いていることに相当. 
          ! 4 階の微分方程式にすることで境界条件の数とつじつまがあう. 
          
  2. 変数の型
          real(8), dimension(-km:km,0:lm),intent(in)  :: et
          real(8), dimension(-km:km,0:lm)             :: et_Vor2Strm_et
    
          ! 流線境界値. 境界で一定なので波数 0 成分のみ
          real(8), dimension(2), intent(in), optional :: values
          ! 境界条件スイッチ
          logical, dimension(2), intent(in), optional :: rigid
        
  3. 備考
    以下の点がうまくなく現在保留中.

function et_Vor2Strm1_et(et,values,rigid)

  1. 機能 : 渦度から流線を求める. Y 方向チェビシェフ空間での Chebyshev-tau 法による計算.
          ! 渦度 \zeta を与えて流線 \psi を求める.
          !    \nabla^2 \psi = \zeta, 
          !    \psi = const. at boundaries.
          ! 粘着条件
          !    \DP{\psi}{y} = 0 at boundaries
          ! 応力なし条件
          !    \DP[2]{\psi}{y} = 0 at boundaries
          !
          ! \nabla^4 \psi = \nabla^2\zeta を解く
          ! 4 階の微分方程式にすることで境界条件の数とつじつまがあう. 
          
  2. 変数の型
          real(8), dimension(-km:km,0:lm),intent(in)  :: et
          real(8), dimension(-km:km,0:lm)             :: et_Vor2Strm1_et
    
          ! 流線境界値. 境界で一定なので波数 0 成分のみ
          real(8), dimension(2), intent(in), optional :: values
          ! 境界条件スイッチ
          logical, dimension(2), intent(in), optional :: rigid
        
  3. 備考
    以下の点がうまくなく現在保留中.

function IntYX_yx(yx), function AvrYX_yx(yx),
  1. 機能 : 2 次元格子点データの全領域積分および平均.
  2. 変数の型
        
  3. 備考

function y_IntX_yx(yx), function y_AvrX_yx(yx),
  1. 機能 : 2 次元格子点データの X 方向積分および平均.
  2. 変数の型
        
  3. 備考

function IntX_x(x), function AvrX_x(x),
  1. 機能 : 1 次元(X)格子点データの X 方向積分および平均.
  2. 変数の型
        
  3. 備考

function x_IntYX_yx(yx), function x_AvrYX_yx(yx),
  1. 機能 : 2 次元格子点データの Y 方向域積分および平均.
  2. 変数の型
        
  3. 備考

function IntYX_y(y), function AvrYX_y(y),
  1. 機能 : 1 次元(Y)格子点データの Y 方向域積分および平均.
  2. 変数の型
        
  3. 備考


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

2002/08/20 作成 (竹広真一)
2005/05/24 更新 (竹広真一)