Class et_galerkin_module
In: src/et_galerkin_module.f90

et_galerkin_module

Authors:Shin-ichi Takehiro, Youhei SASAKI
Version:$Id: et_galerkin_module.f90,v 1.8 2010-03-02 10:09:03 uwabami Exp $
Copyright&License:See COPYRIGHT

概要

spml/et_galerkin_module モジュールは 2 次元チャネル領域での流体運動 をスペクトル法により数値計算するための Fortran90 関数を提供する. 周期的な境界条件を扱うための X 方向へのフーリエ変換, 境界壁を扱うための Y 方向のチェビシェフ変換(チェビシェフーガラーキン法) のスペクトル計算のためのさまざまな関数を提供する

内部で et_module, および境界条件を解くためにチェビシェフーガラーキン法の モジュール群(at_ab_galerkin_ND, at_ad_galerkin_DD, at_af_galerkin_MM, at_ah_galerkin_MMex, at_ap_galerkin_DN, at_aq_galerkin_RRFF, at_av_galerkin_NN) を用いている.

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

命名法

  • 関数名の先頭 (et_, yx_, x_, y_...) は, 返す値の形を示している.
    et_ :2次元スペクトルデータ
    yx_ :2 次元格子点データ
    x_ :X 方向 1 次元格子点データ
    y_ :Y 方向 1 次元格子点データ
    ed_ :2次元ガラーキンデータ(y=ymin,ymax で値が 0)
    ev_ :2次元ガラーキンデータ(y=ymin,ymax で 1 階微分値が 0)
    eb_ :2次元ガラーキンデータ(y=ymin で値が 0, ymax で 1 階微分値が 0)
    ep_ :2次元ガラーキンデータ(y=ymin で1 階微分値が 0, ymax で 値が 0)
    ef_ :2次元ガラーキンデータ(y=ymin,ymax で混合境界条件が 0)
    eh_ :2次元ガラーキンデータ(y=ymin,ymax で水平波数毎の混合境界条件が 0)
    eq_ :2次元流線関数ガラーキンデータ(y=ymin,ymax で自由すべり/粘着条件)
  • 関数名の間の文字列(Dx, Dy, Lapla, LaplaInv, Jacobian)は, その関数の作用を表している.
  • 関数名の最後 (_et_et, _et, _yx, _x, _y...) は, 入力変数のスペクトルデータ 格子点データおよびガラーキンであることを示している.
    _et :2次元スペクトルデータ
    _yx :2 次元格子点データ
    _x :X 方向 1 次元格子点データ
    _y :Y 方向 1 次元格子点データ
    _ed :2次元ガラーキンデータ(y=ymin,ymax で値が 0)
    _ev :2次元ガラーキンデータ(y=ymin,ymax で 1 階微分値が 0)
    _eb :2次元ガラーキンデータ(y=ymin で値が 0, ymax で 1 階微分値が 0)
    _ep :2次元ガラーキンデータ(y=ymin で1 階微分値が 0, ymax で 値が 0)
    _ef :2次元ガラーキンデータ(y=ymin,ymax で混合境界条件が 0)
    _eh :2次元ガラーキンデータ(y=ymin,ymax で水平波数毎の混合境界条件が 0)
    _eq :2次元流線関数ガラーキンデータ(y=ymin,ymax で自由すべり/粘着条件)

各データの種類の説明

  • yx : 2 次元格子点データ.
    • 変数の種類と次元は real(8), dimension(0:jm,0:im-1).
    • im, jm はそれぞれ X, Y 座標の格子点数であり, サブルーチン et_galerkin_Initial にてあらかじめ設定しておく.
    • 第 1 次元が Y 座標の格子点位置番号, 第 2 次元が X 座標の 格子点位置番号である (X, Y の順ではない)ことに注意.
  • et : 2 次元スペクトルデータ.
    • 変数の種類と次元は real(8), dimension(-km:km,0:lm).
    • km, lm はそれぞれ X, Y 方向の最大波数であり, サブルーチン et_galerkin_Initial にてあらかじめ設定しておく.
    • スペクトルデータの格納のされ方については…
  • ed, ev, eb, ef, eh : 2 次元ガラーキンデータ.
    • 変数の種類と次元は real(8), dimension(-km:km,2:lm).
    • km, lm はそれぞれ X, Y 方向の最大波数であり, サブルーチン et_galerkin_Initial にてあらかじめ設定しておく.
  • eq : 2 次元ガラーキンデータ.
    • 変数の種類と次元は real(8), dimension(-km:km,4:lm).
    • km, lm はそれぞれ X, Y 方向の最大波数であり, サブルーチン et_galerkin_Initial にてあらかじめ設定しておく.
  • x, y : X, Y 方向 1 次元格子点データ.
    • 変数の種類と次元はそれぞれ real(8), dimension(0:im-1) および real(8), dimension(0:jm).
  • e, t : 1 次元スペクトルデータ.
    • 変数の種類と次元は real(8), dimension(-km:km) および real(8), dimension(-lm:lm).
  • ax, ay : 1 次元格子点データの並んだ 2 次元配列.
    • 変数の種類と次元は real(8), dimension(:,0:im-1) および real(8), dimension(:,0:jm).
  • ae, at : 1 次元スペクトルデータの並んだ 2 次元配列.
    • 変数の種類と次元は real(8), dimension(:,-km:km) および real(8), dimension(:,0:lm).
  • et_ で始まる関数が返す値はスペクトルデータに同じ.
  • ed_, ev_, eb_, ep_, ef_, eh_, eq_ で始まる関数が返す値は ガラーキンデータに同じ.
  • yx_ で始まる関数が返す値は 2 次元格子点データに同じ.
  • x_, y_ で始まる関数が返す値は 1 次元格子点データに同じ.
  • スペクトル/ガラーキンデータに対する微分等の作用とは, 対応する格子点データに微分などを作用させたデータを スペクトル/ガラーキン変換したものことである.

変数・手続き群の要約

初期化

et_galerlin_Initial :スペクトル/ガラーキン変換の格子点数, 波数, 領域の大きさ, 使用するガラーキン変数の設定

座標変数

x_X, y_Y :格子点座標(X,Y座標)を格納した 1 次元配列
x_X_Weight, y_Y_Weight :重み座標を格納した 1 次元配列
yx_X, yx_Y :格子点データの XY 座標(X,Y)(格子点データ型 2 次元配列)

基本変換

yx_et :スペクトルデータから格子データへの変換
et_yx :格子データからスペクトルデータへの変換
ax_ae, x_e :X 方向のスペクトルデータから格子データへの変換
ay_at, y_t :Y 方向のスペクトルデータから格子データへの変換
ae_ax, e_x :X 方向の格子点データからスペクトルデータへの変換
at_ay, t_y :Y 方向の格子点データからスペクトルデータへの変換
ed_yx :ガラーキンデータ->格子点変換
yx_ed :格子点->ガラーキンデータ変換
ed_et, d_t :チェビシェフ->ガラーキン変換
et_ed, t_d :ガラーキン->チェビシェフ変換
ed_ey, d_y :格子点->ガラーキンデータ変換
ey_ed, y_d :ガラーキン->格子点データ変換
ev_yx :ガラーキンデータ->格子点変換
yx_ev :格子点->ガラーキンデータ変換
ev_et, v_t :チェビシェフ->ガラーキン変換
et_ev, t_v :ガラーキン->チェビシェフ変換
ev_ey, v_y :格子点->ガラーキンデータ変換
ey_ev, y_v :ガラーキン->格子点データ変換
eb_yx :ガラーキンデータ->格子点変換
yx_eb :格子点->ガラーキンデータ変換
eb_et, b_t :チェビシェフ->ガラーキン変換
et_eb, t_b :ガラーキン->チェビシェフ変換
eb_ey, b_y :格子点->ガラーキンデータ変換
ey_eb, y_b :ガラーキン->格子点データ変換
ep_yx :ガラーキンデータ->格子点変換
yx_ep :格子点->ガラーキンデータ変換
ep_et, p_t :チェビシェフ->ガラーキン変換
et_ep, t_p :ガラーキン->チェビシェフ変換
ep_ey, p_y :格子点->ガラーキンデータ変換
ey_ep, y_p :ガラーキン->格子点データ変換
ef_yx :ガラーキンデータ->格子点変換
yx_ef :格子点->ガラーキンデータ変換
ef_et, f_t :チェビシェフ->ガラーキン変換
et_ef, t_f :ガラーキン->チェビシェフ変換
ef_ey, f_y :格子点->ガラーキンデータ変換
ey_ef, y_f :ガラーキン->格子点データ変換
eh_yx :ガラーキンデータ->格子点変換
yx_eh :格子点->ガラーキンデータ変換
eh_et :チェビシェフ->ガラーキン変換
et_eh :ガラーキン->チェビシェフ変換
eh_ey :格子点->ガラーキンデータ変換
ey_eh :ガラーキン->格子点データ変換
eq_yx :ガラーキンデータ->格子点変換
yx_eq :格子点->ガラーキンデータ変換
eq_et, q_t :チェビシェフ->ガラーキン変換
et_eq, t_q :ガラーキン->チェビシェフ変換
eq_ey, q_y :格子点->ガラーキンデータ変換
ey_eq, y_q :ガラーキン->格子点データ変換

微分

et_Lapla_et :スペクトルデータにラプラシアンを作用させる
et_LaplaInv_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 つのスペクトルデータからヤコビアンを計算する
ed_Dx_ed :X 微分
ed_Dy_ed, d_Dy_d :Y 微分
ev_Dx_ev :X 微分
ev_Dy_ev, v_Dy_v :Y 微分
eb_Dx_eb :X 微分
eb_Dy_eb, b_Dy_b :Y 微分
ep_Dx_ep :X 微分
ep_Dy_ep, p_Dy_p :Y 微分
ef_Dx_ef :X 微分
ef_Dy_ef, f_Dy_f :Y 微分
eh_Dx_eh :X 微分
eh_Dy_eh :Y 微分
eq_Dx_eq :X 微分
eq_Dy_eq, q_Dy_q :Y 微分

境界値問題

eq_Vor2Strm_eq :渦度から流線を計算する

積分・平均

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 方向積分および平均

注意

Y 微分計算を連続して行う場合にはガラーキンデータ用関数を用いるのでなく チェビシェフスペクトル用関数を用いること

  × : ed_Dy_ed(ed_Dy_ed(ed)
  ○ : ed_et(et_Dy_et(et_Dy_et(et_ed(ed))))

Methods

AvrX_x   AvrYX_yx   AvrY_y   IntX_x   IntYX_yx   IntY_y   b_Dy_b   b_t   b_y   d_Dy_d   d_t   d_y   eb_Dx_eb   eb_Dy_eb   eb_et   eb_ey   eb_yx   ed_Dx_ed   ed_Dy_ed   ed_et   ed_ey   ed_yx   ef_Dx_ef   ef_Dy_ef   ef_et   ef_ey   ef_yx   eh_Dx_eh   eh_Dy_eh   eh_et   eh_ey   eh_yx   ep_Dx_ep   ep_Dy_ep   ep_et   ep_ey   ep_yx   eq_Dx_eq   eq_Dy_eq   eq_Vor2Strm_et   eq_et   eq_ey   eq_yx   et_Dx_et   et_Dy_et   et_Jacobian_et_et   et_LaplaInv_et   et_Lapla_et   et_eb   et_ed   et_ef   et_eh   et_ep   et_eq   et_ev   et_galerkin_Initial   et_yx   ev_Dx_ev   ev_Dy_ev   ev_et   ev_ey   ev_yx   ey_eb   ey_ed   ey_ef   ey_eh   ey_ep   ey_eq   ey_ev   f_Dy_f   f_t   f_y   p_Dy_p   p_t   p_y   q_Dy_q   q_t   q_y   t_b   t_d   t_f   t_p   t_q   t_v   v_Dy_v   v_t   v_y   x_AvrY_yx   x_IntY_yx   y_AvrX_yx   y_IntX_yx   y_b   y_d   y_f   y_p   y_q   y_v   yx_X   yx_Y   yx_eb   yx_ed   yx_ef   yx_eh   yx_ep   yx_eq   yx_et   yx_ev  

Included Modules

dc_message lumatrix et_module at_ad_galerkin_DD at_av_galerkin_NN at_ab_galerkin_ND at_ap_galerkin_DN at_af_galerkin_MM at_ah_galerkin_MMex at_aq_galerkin_RRFF

Public Instance methods

AvrX_x( x ) result(AvrX_x)
Function :
AvrX_x :real(8)
: (out) 平均値
x :real(8), dimension(0:im-1)
: (in) 1 次元格子点データ

1 次元(X)格子点データの X 方向平均

実際には格子点データ各点毎に x_X_Weight をかけた総和を計算し, x_X_Weight の総和で割ることで平均している.

Original external subprogram is et_module#AvrX_x

AvrYX_yx( yx ) result(AvrYX_yx)
Function :
AvrYX_yx :real(8)
: (out) 平均値
yx :real(8), dimension(0:jm,0:im-1)
: (in) 2 次元格子点データ

2 次元格子点データの全領域平均

実際には格子点データ各点毎に x_X_Weight, y_Y_Weight をかけた 総和を計算し, x_X_Weight*y_Y_Weight の総和で割ることで平均している.

Original external subprogram is et_module#AvrYX_yx

AvrY_y( y ) result(AvrY_y)
Function :
AvrY_y :real(8)
: (out) 平均値
y :real(8), dimension(0:jm)
: (in) 1 次元格子点データ

1 次元(Y)格子点データの Y 方向平均

実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, y_Y_Weight の総和で割ることで平均している.

Original external subprogram is et_module#AvrY_y

IntX_x( x ) result(IntX_x)
Function :
IntX_x :real(8)
: (out) 積分値
x :real(8), dimension(0:im-1)
: (in) 1 次元格子点データ

X 方向積分

1 次元(X)格子点データの X 方向積分

実際には格子点データ各点毎に x_X_Weight をかけた総和を計算している.

Original external subprogram is et_module#IntX_x

IntYX_yx( yx ) result(IntYX_yx)
Function :
IntYX_yx :real(8)
: (out) 積分値
yx :real(8), dimension(0:jm,0:im-1)
: (in) 2 次元格子点データ

全領域積分

2 次元格子点データの全領域積分および平均.

実際には格子点データ各点毎に x_X_Weight, y_Y_Weight をかけた 総和を計算している.

Original external subprogram is et_module#IntYX_yx

IntY_y( y ) result(IntY_y)
Function :
IntY_y :real(8)
: (out) 積分値
y :real(8), dimension(0:jm)
: (in) 1 次元格子点データ

Y 方向積分

1 次元(Y)格子点データの Y 方向積分

実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している.

Original external subprogram is et_module#IntY_y

b_Dy_b( b_data ) result(b_Dx_b)
Function :
b_Dx_b(ks:km) :real(8)
b_data(ks:km) :real(8), intent(IN)

チェビシェフ−ガラーキン法 片端ノイマン片端ディリクレ境界条件

X 微分計算(1 次元)

Original external subprogram is at_ab_galerkin_ND#b_Dx_b

b_t( t_data ) result(b_t)
Function :
b_t(ks:km) :real(8)
: (out) ガラーキン係数
t_data(0:km) :real(8), intent(IN)
: (in) チェビシェフ係数

チェビシェフ−ガラーキン法 片端ノイマン片端ディリクレ境界条件

チェビシェフ係数 -> ガラーキン係数変換(1次元データ)

Original external subprogram is at_ab_galerkin_ND#b_t

b_y( g_data ) result(b_g)
Function :
b_g(ks:km) :real(8)
: (out) ガラーキン係数
g_data(0:im) :real(8), intent(IN)
: (in) 格子点データ

チェビシェフ−ガラーキン法 片端ノイマン片端ディリクレ境界条件

格子点データ -> ガラーキン係数変換(1次元データ)

Original external subprogram is at_ab_galerkin_ND#b_g

d_Dy_d( d_data ) result(d_Dx_d)
Function :
d_Dx_d(ks:km) :real(8)
d_data(ks:km) :real(8), intent(IN)

チェビシェフ−ガラーキン法 両端ディリクレ境界条件

X 微分計算(1 次元データ)

Original external subprogram is at_ad_galerkin_DD#d_Dx_d

d_t( t_data ) result(d_t)
Function :
d_t(ks:km) :real(8)
: (out) ガラーキン係数
t_data(0:km) :real(8), intent(IN)
: (in) チェビシェフ係数

チェビシェフ−ガラーキン法 両端ディリクレ境界条件

チェビシェフ係数 -> ガラーキン係数変換(1次元データ)

Original external subprogram is at_ad_galerkin_DD#d_t

d_y( g_data ) result(d_g)
Function :
d_g(ks:km) :real(8)
: (out) ガラーキン係数
g_data(0:im) :real(8), intent(IN)
: (in) 格子点データ

チェビシェフ−ガラーキン法 両端ディリクレ境界条件

格子点データ -> ガラーキン係数変換(1次元データ)

Original external subprogram is at_ad_galerkin_DD#d_g

Function :
eb_Dx_eb :real(8), dimension(-km:km,2:lm)
eb :real(8), dimension(-km:km,2:lm), intent(in)

入力スペクトルデータに X 微分(∂x)を作用する.

スペクトルデータの X 微分とは, 対応する格子点データに X 微分を 作用させたデータのスペクトル変換のことである.

実際にはスペクトルデータに X 方向波数 k をかけて sin(kx) <-> cos(kx) 成分に入れ換える計算を行っている.

[Source]

    function eb_Dx_eb(eb)
      !
      ! 入力スペクトルデータに X 微分(∂x)を作用する.
      !
      ! スペクトルデータの X 微分とは, 対応する格子点データに X 微分を
      ! 作用させたデータのスペクトル変換のことである.
      !
      ! 実際にはスペクトルデータに X 方向波数 k をかけて
      ! sin(kx) <-> cos(kx) 成分に入れ換える計算を行っている.
      !
      real(8), dimension(-km:km,2:lm)                :: eb_Dx_eb
      real(8), dimension(-km:km,2:lm), intent(in)    :: eb
      integer k

      do k=-km,km
         eb_Dx_eb(k,:)  =  (-2*pi*k/xl)*eb(-k,:)
      enddo
    end function eb_Dx_eb
eb_Dy_eb( ab_data ) result(ab_Dx_ab)
Function :
ab_Dx_ab(size(ab_data,1),ks:km) :real(8)
: (out) 微分ガラーキン
ab_data(:,ks:) :real(8), intent(IN)
: (in) ガラーキン係数

チェビシェフ−ガラーキン法 片端ノイマン片端ディリクレ境界条件

X 微分計算(2 次元)

Original external subprogram is at_ab_galerkin_ND#ab_Dx_ab

eb_et( at_data ) result(ab_at)
Function :
ab_at(size(at_data,1),ks:km) :real(8)
: (out) ガラーキン係数
at_data(:,0:) :real(8), intent(IN)
: (in) チェビシェフ係数

チェビシェフ−ガラーキン法 片端ノイマン片端ディリクレ境界条件

チェビシェフ係数 -> ガラーキン係数変換(2次元データ)

Original external subprogram is at_ab_galerkin_ND#ab_at

eb_ey( ag_data ) result(ab_ag)
Function :
ab_ag(size(ag_data,1),ks:km) :real(8)
: (out) ガラーキン係数
ag_data(:,0:) :real(8), intent(IN)
: (in) 格子点データ

チェビシェフ−ガラーキン法 片端ノイマン片端ディリクレ境界条件

格子点データ -> ガラーキン係数変換(2次元データ)

Original external subprogram is at_ab_galerkin_ND#ab_ag

Function :
eb_yx :real(8), dimension(-km:km,2:lm)
: (out) スペクトルデータ
yx :real(8), dimension(0:jm,0:im-1), intent(in)
: (in) 格子点データ

格子データからガラーキンデータへ変換する.

[Source]

    function eb_yx(yx)
      !
      ! 格子データからガラーキンデータへ変換する.
      !
      real(8), dimension(-km:km,2:lm)              :: eb_yx
      !(out) スペクトルデータ

      real(8), dimension(0:jm,0:im-1), intent(in)  :: yx
      !(in) 格子点データ

      eb_yx = eb_et(et_yx(yx))

    end function eb_yx
Function :
ed_Dx_ed :real(8), dimension(-km:km,2:lm)
ed :real(8), dimension(-km:km,2:lm), intent(in)

入力スペクトルデータに X 微分(∂x)を作用する.

スペクトルデータの X 微分とは, 対応する格子点データに X 微分を 作用させたデータのスペクトル変換のことである.

実際にはスペクトルデータに X 方向波数 k をかけて sin(kx) <-> cos(kx) 成分に入れ換える計算を行っている.

[Source]

    function ed_Dx_ed(ed)
      !
      ! 入力スペクトルデータに X 微分(∂x)を作用する.
      !
      ! スペクトルデータの X 微分とは, 対応する格子点データに X 微分を
      ! 作用させたデータのスペクトル変換のことである.
      !
      ! 実際にはスペクトルデータに X 方向波数 k をかけて
      ! sin(kx) <-> cos(kx) 成分に入れ換える計算を行っている.
      !
      real(8), dimension(-km:km,2:lm)                :: ed_Dx_ed
      real(8), dimension(-km:km,2:lm), intent(in)    :: ed
      integer k

      do k=-km,km
         ed_Dx_ed(k,:)  =  (-2*pi*k/xl)*ed(-k,:)
      enddo
    end function ed_Dx_ed
ed_Dy_ed( ad_data ) result(ad_Dx_ad)
Function :
ad_Dx_ad(size(ad_data,1),ks:km) :real(8)
: (out) 微分ガラーキン
ad_data(:,ks:) :real(8), intent(IN)
: (in) ガラーキン係数

チェビシェフ−ガラーキン法 両端ディリクレ境界条件

X 微分計算(2 次元データ)

Original external subprogram is at_ad_galerkin_DD#ad_Dx_ad

ed_et( at_data ) result(ad_at)
Function :
ad_at(size(at_data,1),ks:km) :real(8)
: (out) ガラーキン係数
at_data(:,0:) :real(8), intent(IN)
: (in) チェビシェフ係数

チェビシェフ−ガラーキン法 両端ディリクレ境界条件

チェビシェフ係数 -> ガラーキン係数変換(2次元データ)

Original external subprogram is at_ad_galerkin_DD#ad_at

ed_ey( ag_data ) result(ad_ag)
Function :
ad_ag(size(ag_data,1),ks:km) :real(8)
: (out) ガラーキン係数
ag_data(:,0:) :real(8), intent(IN)
: (in) 格子点データ

チェビシェフ−ガラーキン法 両端ディリクレ境界条件

格子点データ -> ガラーキン係数変換(2次元データ)

Original external subprogram is at_ad_galerkin_DD#ad_ag

Function :
ed_yx :real(8), dimension(-km:km,2:lm)
: (out) スペクトルデータ
yx :real(8), dimension(0:jm,0:im-1), intent(in)
: (in) 格子点データ

格子データからガラーキンデータへ変換する.

[Source]

    function ed_yx(yx)
      !
      ! 格子データからガラーキンデータへ変換する.
      !
      real(8), dimension(-km:km,2:lm)              :: ed_yx
      !(out) スペクトルデータ

      real(8), dimension(0:jm,0:im-1), intent(in)  :: yx
      !(in) 格子点データ

      ed_yx = ed_et(et_yx(yx))

    end function ed_yx
Function :
ef_Dx_ef :real(8), dimension(-km:km,2:lm)
ef :real(8), dimension(-km:km,2:lm), intent(in)

入力スペクトルデータに X 微分(∂x)を作用する.

スペクトルデータの X 微分とは, 対応する格子点データに X 微分を 作用させたデータのスペクトル変換のことである.

実際にはスペクトルデータに X 方向波数 k をかけて sin(kx) <-> cos(kx) 成分に入れ換える計算を行っている.

[Source]

    function ef_Dx_ef(ef)
      !
      ! 入力スペクトルデータに X 微分(∂x)を作用する.
      !
      ! スペクトルデータの X 微分とは, 対応する格子点データに X 微分を
      ! 作用させたデータのスペクトル変換のことである.
      !
      ! 実際にはスペクトルデータに X 方向波数 k をかけて
      ! sin(kx) <-> cos(kx) 成分に入れ換える計算を行っている.
      !
      real(8), dimension(-km:km,2:lm)                :: ef_Dx_ef
      real(8), dimension(-km:km,2:lm), intent(in)    :: ef
      integer k

      do k=-km,km
         ef_Dx_ef(k,:)  =  (-2*pi*k/xl)*ef(-k,:)
      enddo
    end function ef_Dx_ef
ef_Dy_ef( af_data ) result(af_Dx_af)
Function :
af_Dx_af(size(af_data,1),ks:km) :real(8)
: (out) 微分ガラーキン
af_data(:,ks:) :real(8), intent(IN)
: (in) ガラーキン係数

チェビシェフ−ガラーキン法 ディリクレ・ノイマン混合境界条件

X 微分計算(2 次元)

Original external subprogram is at_af_galerkin_MM#af_Dx_af

ef_et( at_data ) result(af_at)
Function :
af_at(size(at_data,1),ks:km) :real(8)
: (out) ガラーキン係数
at_data(:,0:) :real(8), intent(IN)
: (in) チェビシェフ係数

チェビシェフ−ガラーキン法 ディリクレ・ノイマン混合境界条件

チェビシェフ係数 -> ガラーキン係数変換(2次元データ)

Original external subprogram is at_af_galerkin_MM#af_at

ef_ey( ag_data ) result(af_ag)
Function :
af_ag(size(ag_data,1),ks:km) :real(8)
: (out) ガラーキン係数
ag_data(:,0:) :real(8), intent(IN)
: (in) 格子点データ

チェビシェフ−ガラーキン法 ディリクレ・ノイマン混合境界条件

格子点データ -> ガラーキン係数変換(2次元データ)

Original external subprogram is at_af_galerkin_MM#af_ag

Function :
ef_yx :real(8), dimension(-km:km,2:lm)
: (out) スペクトルデータ
yx :real(8), dimension(0:jm,0:im-1), intent(in)
: (in) 格子点データ

格子データからガラーキンデータへ変換する.

[Source]

    function ef_yx(yx)
      !
      ! 格子データからガラーキンデータへ変換する.
      !
      real(8), dimension(-km:km,2:lm)              :: ef_yx
      !(out) スペクトルデータ

      real(8), dimension(0:jm,0:im-1), intent(in)  :: yx
      !(in) 格子点データ

      ef_yx = ef_et(et_yx(yx))

    end function ef_yx
Function :
eh_Dx_eh :real(8), dimension(-km:km,2:lm)
eh :real(8), dimension(-km:km,2:lm), intent(in)

入力スペクトルデータに X 微分(∂x)を作用する.

スペクトルデータの X 微分とは, 対応する格子点データに X 微分を 作用させたデータのスペクトル変換のことである.

実際にはスペクトルデータに X 方向波数 k をかけて sin(kx) <-> cos(kx) 成分に入れ換える計算を行っている.

[Source]

    function eh_Dx_eh(eh)
      !
      ! 入力スペクトルデータに X 微分(∂x)を作用する.
      !
      ! スペクトルデータの X 微分とは, 対応する格子点データに X 微分を
      ! 作用させたデータのスペクトル変換のことである.
      !
      ! 実際にはスペクトルデータに X 方向波数 k をかけて
      ! sin(kx) <-> cos(kx) 成分に入れ換える計算を行っている.
      !
      real(8), dimension(-km:km,2:lm)                :: eh_Dx_eh
      real(8), dimension(-km:km,2:lm), intent(in)    :: eh
      integer k

      do k=-km,km
         eh_Dx_eh(k,:)  =  (-2*pi*k/xl)*eh(-k,:)
      enddo
    end function eh_Dx_eh
eh_Dy_eh( ah_data ) result(ah_Dx_ah)
Function :
ah_Dx_ah(size(ah_data,1),ks:km) :real(8)
: (out) 微分ガラーキン
ah_data(:,ks:) :real(8), intent(IN)
: (in) ガラーキン係数

チェビシェフ−ガラーキン法 ディリクレ・ノイマン混合境界条件

X 微分計算(2 次元)

Original external subprogram is at_ah_galerkin_MMex#ah_Dx_ah

eh_et( at_data ) result(ah_at)
Function :
ah_at(size(at_data,1),ks:km) :real(8)
: (out) ガラーキン係数
at_data(:,0:) :real(8), intent(IN)
: (in) チェビシェフ係数

チェビシェフ−ガラーキン法 ディリクレ・ノイマン混合境界条件

チェビシェフ係数 -> ガラーキン係数変換(2次元データ)

Original external subprogram is at_ah_galerkin_MMex#ah_at

eh_ey( ag_data ) result(ah_ag)
Function :
ah_ag(size(ag_data,1),ks:km) :real(8)
: (out) ガラーキン係数
ag_data(:,0:) :real(8), intent(IN)
: (in) 格子点データ

チェビシェフ−ガラーキン法 ディリクレ・ノイマン混合境界条件

格子点データ -> ガラーキン係数変換(2次元データ)

Original external subprogram is at_ah_galerkin_MMex#ah_ag

Function :
eh_yx :real(8), dimension(-km:km,2:lm)
: (out) スペクトルデータ
yx :real(8), dimension(0:jm,0:im-1), intent(in)
: (in) 格子点データ

格子データからガラーキンデータへ変換する.

[Source]

    function eh_yx(yx)
      !
      ! 格子データからガラーキンデータへ変換する.
      !
      real(8), dimension(-km:km,2:lm)              :: eh_yx
      !(out) スペクトルデータ

      real(8), dimension(0:jm,0:im-1), intent(in)  :: yx
      !(in) 格子点データ

      eh_yx = eh_et(et_yx(yx))

    end function eh_yx
Function :
ep_Dx_ep :real(8), dimension(-km:km,2:lm)
ep :real(8), dimension(-km:km,2:lm), intent(in)

入力スペクトルデータに X 微分(∂x)を作用する.

スペクトルデータの X 微分とは, 対応する格子点データに X 微分を 作用させたデータのスペクトル変換のことである.

実際にはスペクトルデータに X 方向波数 k をかけて sin(kx) <-> cos(kx) 成分に入れ換える計算を行っている.

[Source]

    function ep_Dx_ep(ep)
      !
      ! 入力スペクトルデータに X 微分(∂x)を作用する.
      !
      ! スペクトルデータの X 微分とは, 対応する格子点データに X 微分を
      ! 作用させたデータのスペクトル変換のことである.
      !
      ! 実際にはスペクトルデータに X 方向波数 k をかけて
      ! sin(kx) <-> cos(kx) 成分に入れ換える計算を行っている.
      !
      real(8), dimension(-km:km,2:lm)                :: ep_Dx_ep
      real(8), dimension(-km:km,2:lm), intent(in)    :: ep
      integer k

      do k=-km,km
         ep_Dx_ep(k,:)  =  (-2*pi*k/xl)*ep(-k,:)
      enddo
    end function ep_Dx_ep
ep_Dy_ep( ap_data ) result(ap_Dx_ap)
Function :
ap_Dx_ap(size(ap_data,1),ks:km) :real(8)
: (out) 微分ガラーキン
ap_data(:,ks:) :real(8), intent(IN)
: (in) ガラーキン係数

チェビシェフ−ガラーキン法 片端ディリクレ片端ノイマン境界条件

X 微分計算(2 次元)

Original external subprogram is at_ap_galerkin_DN#ap_Dx_ap

ep_et( at_data ) result(ap_at)
Function :
ap_at(size(at_data,1),ks:km) :real(8)
: (out) ガラーキン係数
at_data(:,0:) :real(8), intent(IN)
: (in) チェビシェフ係数

チェビシェフ−ガラーキン法 片端ディリクレ片端ノイマン境界条件

チェビシェフ係数 -> ガラーキン係数変換(2次元データ)

Original external subprogram is at_ap_galerkin_DN#ap_at

ep_ey( ag_data ) result(ap_ag)
Function :
ap_ag(size(ag_data,1),ks:km) :real(8)
: (out) ガラーキン係数
ag_data(:,0:) :real(8), intent(IN)
: (in) 格子点データ

チェビシェフ−ガラーキン法 片端ディリクレ片端ノイマン境界条件

格子点データ -> ガラーキン係数変換(2次元データ)

Original external subprogram is at_ap_galerkin_DN#ap_ag

Function :
ep_yx :real(8), dimension(-km:km,2:lm)
: (out) スペクトルデータ
yx :real(8), dimension(0:jm,0:im-1), intent(in)
: (in) 格子点データ

格子データからガラーキンデータへ変換する.

[Source]

    function ep_yx(yx)
      !
      ! 格子データからガラーキンデータへ変換する.
      !
      real(8), dimension(-km:km,2:lm)              :: ep_yx
      !(out) スペクトルデータ

      real(8), dimension(0:jm,0:im-1), intent(in)  :: yx
      !(in) 格子点データ

      ep_yx = ep_et(et_yx(yx))

    end function ep_yx
Function :
eq_Dx_eq :real(8), dimension(-km:km,4:lm)
eq :real(8), dimension(-km:km,4:lm), intent(in)

入力スペクトルデータに X 微分(∂x)を作用する.

スペクトルデータの X 微分とは, 対応する格子点データに X 微分を 作用させたデータのスペクトル変換のことである.

実際にはスペクトルデータに X 方向波数 k をかけて sin(kx) <-> cos(kx) 成分に入れ換える計算を行っている.

[Source]

    function eq_Dx_eq(eq)
      !
      ! 入力スペクトルデータに X 微分(∂x)を作用する.
      !
      ! スペクトルデータの X 微分とは, 対応する格子点データに X 微分を
      ! 作用させたデータのスペクトル変換のことである.
      !
      ! 実際にはスペクトルデータに X 方向波数 k をかけて
      ! sin(kx) <-> cos(kx) 成分に入れ換える計算を行っている.
      !
      real(8), dimension(-km:km,4:lm)                :: eq_Dx_eq
      real(8), dimension(-km:km,4:lm), intent(in)    :: eq
      integer k

      do k=-km,km
         eq_Dx_eq(k,:)  =  (-2*pi*k/xl)*eq(-k,:)
      enddo
    end function eq_Dx_eq
eq_Dy_eq( aq_data ) result(aq_Dx_aq)
Function :
aq_Dx_aq(size(aq_data,1),ks:km) :real(8)
: (out) 微分ガラーキン
aq_data(:,ks:) :real(8), intent(in)
: (in) ガラーキン係数

チェビシェフ−ガラーキン法 非圧縮流体の流線関数・流れポテンシャル用

X 微分計算(2 次元)

Original external subprogram is at_aq_galerkin_RRFF#aq_Dx_aq

Function :
eq_Vor2Strm_et(-km:km,4:lm) :real(8)
: (out) 流線 ψ
et_Zeta(-km:km,0:lm) :real(8), intent(IN)
: (in) 渦度 ζ=▽^2ψ
 2 次元水路領域
 Fourier 展開 + チェビシェフ−ガラーキン法用モジュール

 渦度から流線を計算する.

[Source]

    function eq_Vor2Strm_et(et_Zeta)
      !
      !  2 次元水路領域
      !  Fourier 展開 + チェビシェフ−ガラーキン法用モジュール
      !
      !  渦度から流線を計算する.
      !
      real(8), intent(IN) :: et_Zeta(-km:km,0:lm)        !(in)  渦度 ζ=▽^2ψ
      real(8)             :: eq_Vor2Strm_et(-km:km,4:lm) !(out) 流線 ψ

      real(8), allocatable :: LaplaMT(:,:,:)
      real(8), allocatable :: LaplaInvMT(:,:,:)
      integer, allocatable :: kpvot(:,:)

      integer, parameter :: ls=4

      real(8) :: eq_work(-km:km,ls:lm)
      real(8) :: et_work(-km:km,0:lm)

      integer :: k, m, n, l, p
      logical :: first = .true.
      save LaplaInvMT, kpvot, first

      if ( .not. Set_RRFF ) call MessageNotify('E','eq_Vor2Strm_et', 'at_aq_galerkin_RRFF_module not initialized.')

      if ( first ) then
         first = .false.
         allocate(LaplaMT(-km:km,0:lm,0:lm))
         allocate(LaplaInvMT(-km:km,ls:lm,ls:lm),kpvot(-km:km,ls:lm))

         LaplaMT=0.0D0
         do l=0,lm
            et_work = 0.0D0 
             et_work(:,l) = 1.0D0
            et_work = et_Lapla_et(et_work)
            LaplaMT(:,:,l) = et_work
         enddo

         LaplaInvMT=0.0
         do n=ls,lm
            do m=ls,lm
               do l=0,lm
                  do p=0,lm
                     LaplaInvMT(:,n,m)=LaplaInvMT(:,n,m) +TQ(l,n)*LaplaMT(:,l,p)*alpha(p)*TQ(p,m)
                  enddo
               enddo
            enddo
         enddo

         call LUDecomp(LaplaInvMT,kpvot)
         deallocate(LaplaMT)
      endif

      eq_work=0.0
      do m=ls,lm
         do k=0,lm
            eq_work(:,m)=eq_work(:,m) + alpha(k) * beta(k) * et_Zeta(:,k)* TQ(k,m) 
         enddo
      enddo

      eq_Vor2Strm_et = LUSolve(LaplaInvMT,kpvot,eq_work)

    end function eq_Vor2Strm_et
eq_et( at_data ) result(aq_at)
Function :
aq_at(size(at_data,1),ks:km) :real(8)
: (out) ガラーキン係数
at_data(:,0:) :real(8), intent(in)
: (in) チェビシェフ係数

チェビシェフ−ガラーキン法 非圧縮流体の流線関数・流れポテンシャル用

チェビシェフ係数 -> ガラーキン係数変換(2次元データ)

Original external subprogram is at_aq_galerkin_RRFF#aq_at

eq_ey( ag_data ) result(aq_ag)
Function :
aq_ag(size(ag_data,1),ks:km) :real(8)
: (out) ガラーキン係数
ag_data(:,0:) :real(8), intent(in)
: (in) 格子点データ

チェビシェフ−ガラーキン法 非圧縮流体の流線関数・流れポテンシャル用

格子点データ -> ガラーキン係数変換(2次元データ)

Original external subprogram is at_aq_galerkin_RRFF#aq_ag

Function :
eq_yx :real(8), dimension(-km:km,4:lm)
: (out) スペクトルデータ
yx :real(8), dimension(0:jm,0:im-1), intent(in)
: (in) 格子点データ

格子データからガラーキンデータへ変換する.

[Source]

    function eq_yx(yx)
      !
      ! 格子データからガラーキンデータへ変換する.
      !
      real(8), dimension(-km:km,4:lm)              :: eq_yx
      !(out) スペクトルデータ

      real(8), dimension(0:jm,0:im-1), intent(in)  :: yx
      !(in) 格子点データ

      eq_yx = eq_et(et_yx(yx))

    end function eq_yx
et_Dx_et( et ) result(et_Dx_et)
Function :
et_Dx_et :real(8), dimension(-km:km,0:lm)
et :real(8), dimension(-km:km,0:lm), intent(in)

入力スペクトルデータに X 微分(∂x)を作用する.

スペクトルデータの X 微分とは, 対応する格子点データに X 微分を 作用させたデータのスペクトル変換のことである.

実際にはスペクトルデータに X 方向波数 k をかけて sin(kx) <-> cos(kx) 成分に入れ換える計算を行っている.

Original external subprogram is et_module#et_Dx_et

et_Dy_et( et ) result(et_Dy_et)
Function :
et_Dy_et :real(8), dimension(-km:km,0:lm)
: (out) スペクトルデータの Y 微分
et :real(8), dimension(-km:km,0:lm), intent(in)
: (in) 入力スペクトルデータ

入力スペクトルデータに Y 微分(∂y)を作用する.

スペクトルデータの X 微分とは, 対応する格子点データに Y 微分を 作用させたデータのスペクトル変換のことである.

Original external subprogram is et_module#et_Dy_et

et_Jacobian_et_et( et_a, et_b ) result(et_Jacobian_et_et)
Function :
et_Jacobian_et_et :real(8), dimension(-km:km,0:lm)
: (out) 2 つのスペクトルデータのヤコビアン
et_a :real(8), dimension(-km:km,0:lm), intent(in)
: (in) 1つ目の入力スペクトルデータ
et_b :real(8), dimension(-km:km,0:lm), intent(in)
: (in) 2つ目の入力スペクトルデータ
 2 つのスペクトルデータからヤコビアン

    J(A,B)=(∂xA)(∂yB)-(∂yA)(∂xB)

 を計算する.

 2 つのスペクトルデータのヤコビアンとは, 対応する 2 つの
 格子点データのヤコビアンのスペクトル変換のことである.

Original external subprogram is et_module#et_Jacobian_et_et

et_LaplaInv_et( et, [values] ) result(et_LaplaInv_et)
Function :
et_LaplaInv_et :real(8), dimension(-km:km,0:lm)
: (out) スペクトルデータの逆ラプラシアン
et :real(8), dimension(-km:km,0:lm),intent(in)
: (in) スペクトルデータ
values :real(8), dimension(-km:km,2), intent(in), optional
: (in) 境界値. 省略時は 0 が設定される.

境界で一様な値を与える条件(ディリクレ条件)下で, 入力スペクトルデータに逆ラプラシアン(∂xx+∂yy)**(-1)を作用する.

Chebyshev-tau 法による計算

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

Original external subprogram is et_module#et_LaplaInv_et

et_Lapla_et( et ) result(et_Lapla_et)
Function :
et_Lapla_et :real(8), dimension(-km:km,0:lm)
: (out) スペクトルデータのラプラシアン
et :real(8), dimension(-km:km,0:lm), intent(in)
: (in) 入力スペクトルデータ

入力スペクトルデータにラプラシアン(∂xx+∂yy)を作用する.

スペクトルデータのラプラシアンとは, 対応する格子点データに ラプラシアンを作用させたデータのスペクトル変換のことである.

Original external subprogram is et_module#et_Lapla_et

et_eb( ab_data ) result(at_ab)
Function :
at_ab(size(ab_data,1),0:km) :real(8)
: (out) チェビシェフ係数
ab_data(:,ks:) :real(8), intent(IN)
: (in) ガラーキン係数

チェビシェフ−ガラーキン法 片端ノイマン片端ディリクレ境界条件

ガラーキン係数 -> チェビシェフ係数変換(2次元データ)

Original external subprogram is at_ab_galerkin_ND#at_ab

et_ed( ad_data ) result(at_ad)
Function :
at_ad(size(ad_data,1),0:km) :real(8)
: (out) チェビシェフ係数
ad_data(:,ks:) :real(8), intent(IN)
: (in) ガラーキン係数

チェビシェフ−ガラーキン法 両端ディリクレ境界条件

ガラーキン係数 -> チェビシェフ係数変換(2次元データ)

Original external subprogram is at_ad_galerkin_DD#at_ad

et_ef( af_data ) result(at_af)
Function :
at_af(size(af_data,1),0:km) :real(8)
: (out) チェビシェフ係数
af_data(:,ks:) :real(8), intent(IN)
: (in) ガラーキン係数

チェビシェフ−ガラーキン法 ディリクレ・ノイマン混合境界条件

ガラーキン係数 -> チェビシェフ係数変換(2次元データ)

Original external subprogram is at_af_galerkin_MM#at_af

et_eh( ah_data ) result(at_ah)
Function :
at_ah(size(ah_data,1),0:km) :real(8)
: (out) チェビシェフ係数
ah_data(:,ks:) :real(8), intent(IN)
: (in) ガラーキン係数

チェビシェフ−ガラーキン法 ディリクレ・ノイマン混合境界条件

ガラーキン係数 -> チェビシェフ係数変換(2次元データ)

Original external subprogram is at_ah_galerkin_MMex#at_ah

et_ep( ap_data ) result(at_ap)
Function :
at_ap(size(ap_data,1),0:km) :real(8)
: (out) チェビシェフ係数
ap_data(:,ks:) :real(8), intent(IN)
: (in) ガラーキン係数

片端ディリクレ片端ノイマン境界条件 ガラーキン係数 -> チェビシェフ係数変換(2次元データ)

Original external subprogram is at_ap_galerkin_DN#at_ap

et_eq( aq_data ) result(at_aq)
Function :
at_aq(size(aq_data,1),0:km) :real(8)
: (out) チェビシェフ係数
aq_data(:,ks:) :real(8), intent(in)
: (in) ガラーキン係数

チェビシェフ−ガラーキン法 非圧縮流体の流線関数・流れポテンシャル用

ガラーキン係数 -> チェビシェフ係数変換(2次元データ)

Original external subprogram is at_aq_galerkin_RRFF#at_aq

et_ev( av_data ) result(at_av)
Function :
at_av(size(av_data,1),0:km) :real(8)
: (out) チェビシェフ係数
av_data(:,ks:) :real(8), intent(IN)
: (in) ガラーキン係数

チェビシェフ−ガラーキン法 両端ノイマン境界条件

ガラーキン係数 -> チェビシェフ係数変換(2次元データ)

Original external subprogram is at_av_galerkin_NN#at_av

Subroutine :
i :integer,intent(in)
: 格子点の設定(X,Y)
j :integer,intent(in)
: 格子点の設定(X,Y)
k :integer,intent(in)
: 切断波数の設定(X,Y)
l :integer,intent(in)
: 切断波数の設定(X,Y)
xmin :real(8),intent(in)
: X 座標範囲
xmax :real(8),intent(in)
: X 座標範囲
ymin :real(8),intent(in)
: Y 座標範囲
ymax :real(8),intent(in)
: Y 座標範囲
DD :logical,intent(in),optional
: モジュール読み込みスイッチ
NN :logical,intent(in),optional
: モジュール読み込みスイッチ
DN :logical,intent(in),optional
: モジュール読み込みスイッチ
ND :logical,intent(in),optional
: モジュール読み込みスイッチ
velBC :character(LEN=2),intent(in),optional
: 境界条件(RR/SS/RS/SR)
MM_cfdy0_ymin :real(8),intent(in),optional
: (0階微分@x=ymin)
MM_cfdy1_ymin :real(8),intent(In),optional
: (1階微分@x=ymin)
MM_cfdy0_ymax :real(8),intent(in),optional
: (0階微分@x=ymax)
MM_cfdy1_ymax :real(8),intent(in),optional
: (1階微分@x=ymax)
MMex_cfdy0_ymin(-k:k) :real(8),intent(in),optional
: (0階微分@x=ymin)
MMex_cfdy1_ymin(-k:k) :real(8),intent(in),optional
: (1階微分@x=ymin)
MMex_cfdy0_ymax(-k:k) :real(8),intent(in),optional
: (0階微分@x=ymax)
MMex_cfdy1_ymax(-k:k) :real(8),intent(in),optional
: (1階微分@x=ymax)
 2 次元水路領域
 Fourier 展開 + チェビシェフ−ガラーキン法用モジュール

 初期化サブルーチン

[Source]

    subroutine et_galerkin_Initial(i,j,k,l,xmin,xmax,ymin,ymax, DD,NN,DN,ND,velBC, MM_cfdy0_ymin, MM_cfdy1_ymin, MM_cfdy0_ymax, MM_cfdy1_ymax, MMex_cfdy0_ymin, MMex_cfdy1_ymin, MMex_cfdy0_ymax, MMex_cfdy1_ymax)
      !
      !  2 次元水路領域
      !  Fourier 展開 + チェビシェフ−ガラーキン法用モジュール
      !
      !  初期化サブルーチン
      !
      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 座標範囲

      logical,intent(in),optional :: DD  ! モジュール読み込みスイッチ
      logical,intent(in),optional :: NN  ! モジュール読み込みスイッチ
      logical,intent(in),optional :: DN  ! モジュール読み込みスイッチ
      logical,intent(in),optional :: ND  ! モジュール読み込みスイッチ

      ! at_af_galerkin_MM_module 境界条件係数
      real(8),intent(in),optional :: MM_cfdy0_ymin ! (0階微分@x=ymin)
      real(8),intent(In),optional :: MM_cfdy1_ymin ! (1階微分@x=ymin)
      real(8),intent(in),optional :: MM_cfdy0_ymax ! (0階微分@x=ymax)
      real(8),intent(in),optional :: MM_cfdy1_ymax ! (1階微分@x=ymax)

      ! at_ah_galerkin_MMex_module 境界条件係数
      real(8),intent(in),optional :: MMex_cfdy0_ymin(-k:k) ! (0階微分@x=ymin)
      real(8),intent(in),optional :: MMex_cfdy1_ymin(-k:k) ! (1階微分@x=ymin)
      real(8),intent(in),optional :: MMex_cfdy0_ymax(-k:k) ! (0階微分@x=ymax)
      real(8),intent(in),optional :: MMex_cfdy1_ymax(-k:k) ! (1階微分@x=ymax)

      ! at_aq_galerkin_RRFF_module 速度場境界条件
      character(LEN=2),intent(in),optional :: velBC  ! 境界条件(RR/SS/RS/SR)

      !--------------- 引数処理 -----------------
      im=i 
       jm = j 
       km=k 
       lm=l 
       xl = xmax-xmin

      if ( present(DD) ) Set_DD = DD
      if ( present(NN) ) Set_NN = NN
      if ( present(DN) ) Set_DN = DN
      if ( present(ND) ) Set_ND = ND

      if ( present(MM_cfdy0_ymin) .AND.present(MM_cfdy1_ymin) .AND. present(MM_cfdy0_ymax) .AND.present(MM_cfdy1_ymax) ) Set_MM=.true.

      if ( present(MMex_cfdy0_ymin) .AND.present(MMex_cfdy1_ymin) .AND. present(MMex_cfdy0_ymax) .AND.present(MMex_cfdy1_ymax) ) Set_MMex=.true.

      if ( present(velBC) ) Set_RRFF = .true.

      !--------------- モジュール初期化 -----------------
      call et_Initial(im,jm,km,lm,xmin,xmax,ymin,ymax)
      if ( Set_DD ) call at_ad_galerkin_DD_Initial(jm,lm)
      if ( Set_NN ) call at_av_galerkin_NN_Initial(jm,lm)
      if ( Set_DN ) call at_ap_galerkin_DN_Initial(jm,lm)
      if ( Set_ND ) call at_ab_galerkin_ND_Initial(jm,lm)
      if ( Set_MM ) call at_af_galerkin_MM_Initial (jm,lm, MM_cfdy0_ymax, MM_cfdy1_ymax, MM_cfdy0_ymin, MM_cfdy1_ymin   )
      if ( Set_MMex ) call at_ah_galerkin_MMex_Initial (jm,lm,2*km+1, MMex_cfdy0_ymax, MMex_cfdy1_ymax, MMex_cfdy0_ymin, MMex_cfdy1_ymin   )

      if ( Set_RRFF ) call at_aq_galerkin_RRFF_Initial(jm,lm,velBC)

    end subroutine et_galerkin_initial
et_yx( yx ) result(et_yx)
Function :
et_yx :real(8), dimension(-km:km,0:lm)
: (out) スペクトルデータ
yx :real(8), dimension(0:jm,0:im-1), intent(in)
: (in) 格子点データ

格子データからスペクトルデータへ変換する.

Original external subprogram is et_module#et_yx

Function :
ev_Dx_ev :real(8), dimension(-km:km,2:lm)
ev :real(8), dimension(-km:km,2:lm), intent(in)

入力スペクトルデータに X 微分(∂x)を作用する.

スペクトルデータの X 微分とは, 対応する格子点データに X 微分を 作用させたデータのスペクトル変換のことである.

実際にはスペクトルデータに X 方向波数 k をかけて sin(kx) <-> cos(kx) 成分に入れ換える計算を行っている.

[Source]

    function ev_Dx_ev(ev)
      !
      ! 入力スペクトルデータに X 微分(∂x)を作用する.
      !
      ! スペクトルデータの X 微分とは, 対応する格子点データに X 微分を
      ! 作用させたデータのスペクトル変換のことである.
      !
      ! 実際にはスペクトルデータに X 方向波数 k をかけて
      ! sin(kx) <-> cos(kx) 成分に入れ換える計算を行っている.
      !
      real(8), dimension(-km:km,2:lm)                :: ev_Dx_ev
      real(8), dimension(-km:km,2:lm), intent(in)    :: ev
      integer k

      do k=-km,km
         ev_Dx_ev(k,:)  =  (-2*pi*k/xl)*ev(-k,:)
      enddo
    end function ev_Dx_ev
ev_Dy_ev( av_data ) result(av_Dx_av)
Function :
av_Dx_av(size(av_data,1),ks:km) :real(8)
: (out) 微分ガラーキン
av_data(:,ks:) :real(8), intent(IN)
: (in) ガラーキン係数

チェビシェフ−ガラーキン法 両端ノイマン境界条件

X 微分計算(1 次元)

Original external subprogram is at_av_galerkin_NN#av_Dx_av

ev_et( at_data ) result(av_at)
Function :
av_at(size(at_data,1),ks:km) :real(8)
: (out) ガラーキン係数
at_data(:,0:) :real(8), intent(IN)
: (in) チェビシェフ係数

チェビシェフ−ガラーキン法 両端ノイマン境界条件

チェビシェフ係数 -> ガラーキン係数変換(2次元データ)

Original external subprogram is at_av_galerkin_NN#av_at

ev_ey( ag_data ) result(av_ag)
Function :
av_ag(size(ag_data,1),ks:km) :real(8)
: (out) ガラーキン係数
ag_data(:,0:) :real(8), intent(IN)
: (in) 格子点データ

チェビシェフ−ガラーキン法 両端ノイマン境界条件

格子点データ -> ガラーキン係数変換(2次元データ)

Original external subprogram is at_av_galerkin_NN#av_ag

Function :
ev_yx :real(8), dimension(-km:km,2:lm)
: (out) スペクトルデータ
yx :real(8), dimension(0:jm,0:im-1), intent(in)
: (in) 格子点データ

格子データからガラーキンデータへ変換する.

[Source]

    function ev_yx(yx)
      !
      ! 格子データからガラーキンデータへ変換する.
      !
      real(8), dimension(-km:km,2:lm)              :: ev_yx
      !(out) スペクトルデータ

      real(8), dimension(0:jm,0:im-1), intent(in)  :: yx
      !(in) 格子点データ

      ev_yx = ev_et(et_yx(yx))

    end function ev_yx
ey_eb( ab_data ) result(ag_ab)
Function :
ag_ab(size(ab_data,1),0:im) :real(8)
: (out) 格子点データ
ab_data(:,ks:) :real(8), intent(IN)
: (in) ガラーキン係数

チェビシェフ−ガラーキン法 片端ノイマン片端ディリクレ境界条件

ガラーキン係数 -> 格子点データ変換(2次元データ)

Original external subprogram is at_ab_galerkin_ND#ag_ab

ey_ed( ad_data ) result(ag_ad)
Function :
ag_ad(size(ad_data,1),0:im) :real(8)
: (out) 格子点データ
ad_data(:,ks:) :real(8), intent(IN)
: (in) ガラーキン係数

チェビシェフ−ガラーキン法 両端ディリクレ境界条件

ガラーキン係数 -> 格子点データ変換(2次元データ)

Original external subprogram is at_ad_galerkin_DD#ag_ad

ey_ef( af_data ) result(ag_af)
Function :
ag_af(size(af_data,1),0:im) :real(8)
: (out) 格子点データ
af_data(:,ks:) :real(8), intent(IN)
: (in) ガラーキン係数

チェビシェフ−ガラーキン法 ディリクレ・ノイマン混合境界条件

ガラーキン係数 -> 格子点データ変換(2次元データ)

Original external subprogram is at_af_galerkin_MM#ag_af

ey_eh( ah_data ) result(ag_ah)
Function :
ag_ah(size(ah_data,1),0:im) :real(8)
: (out) 格子点データ
ah_data(:,ks:) :real(8), intent(IN)
: (in) ガラーキン係数

チェビシェフ−ガラーキン法 ディリクレ・ノイマン混合境界条件

ガラーキン係数 -> 格子点データ変換(2次元データ)

Original external subprogram is at_ah_galerkin_MMex#ag_ah

ey_ep( ap_data ) result(ag_ap)
Function :
ag_ap(size(ap_data,1),0:im) :real(8)
: (out) 格子点データ
ap_data(:,ks:) :real(8), intent(IN)
: (in) ガラーキン係数

チェビシェフ−ガラーキン法 片端ディリクレ片端ノイマン境界条件

ガラーキン係数 -> 格子点データ変換(2次元データ)

Original external subprogram is at_ap_galerkin_DN#ag_ap

ey_eq( aq_data ) result(ag_aq)
Function :
ag_aq(size(aq_data,1),0:im) :real(8)
: (out) 格子点データ
aq_data(:,ks:) :real(8), intent(in)
: (in) ガラーキン係数

チェビシェフ−ガラーキン法 非圧縮流体の流線関数・流れポテンシャル用

ガラーキン係数 -> 格子点データ変換(2次元データ)

Original external subprogram is at_aq_galerkin_RRFF#ag_aq

ey_ev( av_data ) result(ag_av)
Function :
ag_av(size(av_data,1),0:im) :real(8)
: (out) 格子点データ
av_data(:,ks:) :real(8), intent(IN)
: (in) ガラーキン係数

チェビシェフ−ガラーキン法 両端ノイマン境界条件

ガラーキン係数 -> 格子点データ変換(2次元データ)

Original external subprogram is at_av_galerkin_NN#ag_av

f_Dy_f( f_data ) result(f_Dx_f)
Function :
f_Dx_f(ks:km) :real(8)
f_data(ks:km) :real(8), intent(IN)

チェビシェフ−ガラーキン法 ディリクレ・ノイマン混合境界条件

X 微分計算(1 次元)

Original external subprogram is at_af_galerkin_MM#f_Dx_f

f_t( t_data ) result(f_t)
Function :
f_t(ks:km) :real(8)
: (out) ガラーキン係数
t_data(0:km) :real(8), intent(IN)
: (in) チェビシェフ係数

チェビシェフ−ガラーキン法 ディリクレ・ノイマン混合境界条件

チェビシェフ係数 -> ガラーキン係数変換(1次元データ)

Original external subprogram is at_af_galerkin_MM#f_t

f_y( g_data ) result(f_g)
Function :
f_g(ks:km) :real(8)
: (out) ガラーキン係数
g_data(0:im) :real(8), intent(IN)
: (in) 格子点データ

チェビシェフ−ガラーキン法 ディリクレ・ノイマン混合境界条件

格子点データ -> ガラーキン係数変換(1次元データ)

Original external subprogram is at_af_galerkin_MM#f_g

p_Dy_p( p_data ) result(p_Dx_p)
Function :
p_Dx_p(ks:km) :real(8)
p_data(ks:km) :real(8), intent(IN)

チェビシェフ−ガラーキン法 片端ディリクレ片端ノイマン境界条件

X 微分計算(1 次元)

Original external subprogram is at_ap_galerkin_DN#p_Dx_p

p_t( t_data ) result(p_t)
Function :
p_t(ks:km) :real(8)
: (out) ガラーキン係数
t_data(0:km) :real(8), intent(IN)
: (in) チェビシェフ係数

チェビシェフ−ガラーキン法 片端ディリクレ片端ノイマン境界条件

チェビシェフ係数 -> ガラーキン係数変換(1次元データ)

Original external subprogram is at_ap_galerkin_DN#p_t

p_y( g_data ) result(p_g)
Function :
p_g(ks:km) :real(8)
: (out) ガラーキン係数
g_data(0:im) :real(8), intent(IN)
: (in) 格子点データ

チェビシェフ−ガラーキン法 片端ディリクレ片端ノイマン境界条件

格子点データ -> ガラーキン係数変換(1次元データ)

Original external subprogram is at_ap_galerkin_DN#p_g

q_Dy_q( q_data ) result(q_Dx_q)
Function :
q_Dx_q(ks:km) :real(8)
q_data(ks:km) :real(8), intent(in)

チェビシェフ−ガラーキン法 非圧縮流体の流線関数・流れポテンシャル用

X 微分計算(1 次元)

Original external subprogram is at_aq_galerkin_RRFF#q_Dx_q

q_t( t_data ) result(q_t)
Function :
q_t(ks:km) :real(8)
: (out) ガラーキン係数
t_data(0:km) :real(8), intent(in)
: (in) チェビシェフ係数

チェビシェフ−ガラーキン法 非圧縮流体の流線関数・流れポテンシャル用

チェビシェフ係数 -> ガラーキン係数変換(1次元データ)

Original external subprogram is at_aq_galerkin_RRFF#q_t

q_y( g_data ) result(q_g)
Function :
q_g(ks:km) :real(8)
: (out) ガラーキン係数
g_data(0:im) :real(8), intent(in)
: (in) 格子点データ

チェビシェフ−ガラーキン法 非圧縮流体の流線関数・流れポテンシャル用

格子点データ -> ガラーキン係数変換(1次元データ)

Original external subprogram is at_aq_galerkin_RRFF#q_g

t_b( b_data ) result(t_b)
Function :
t_b(0:km) :real(8)
: (out) チェビシェフ係数
b_data(ks:km) :real(8), intent(IN)
: (in) ガラーキン係数

チェビシェフ−ガラーキン法 片端ノイマン片端ディリクレ境界条件

ガラーキン係数 -> チェビシェフ係数変換(1次元データ)

Original external subprogram is at_ab_galerkin_ND#t_b

t_d( d_data ) result(t_d)
Function :
t_d(0:km) :real(8)
: (out) チェビシェフ係数
d_data(ks:km) :real(8), intent(IN)
: (in) ガラーキン係数

チェビシェフ−ガラーキン法 両端ディリクレ境界条件

ガラーキン係数 -> チェビシェフ係数変換(1次元データ)

Original external subprogram is at_ad_galerkin_DD#t_d

t_f( f_data ) result(t_f)
Function :
t_f(0:km) :real(8)
: (out) チェビシェフ係数
f_data(ks:km) :real(8), intent(IN)
: (in) ガラーキン係数

チェビシェフ−ガラーキン法 ディリクレ・ノイマン混合境界条件

ガラーキン係数 -> チェビシェフ係数変換(1次元データ)

Original external subprogram is at_af_galerkin_MM#t_f

t_p( p_data ) result(t_p)
Function :
t_p(0:km) :real(8)
: (out) チェビシェフ係数
p_data(ks:km) :real(8), intent(IN)
: (in) ガラーキン係数

チェビシェフ−ガラーキン法 片端ディリクレ片端ノイマン境界条件

ガラーキン係数 -> チェビシェフ係数変換(1次元データ)

Original external subprogram is at_ap_galerkin_DN#t_p

t_q( q_data ) result(t_q)
Function :
t_q(0:km) :real(8)
: (out) チェビシェフ係数
q_data(ks:km) :real(8), intent(in)
: (in) ガラーキン係数

チェビシェフ−ガラーキン法 非圧縮流体の流線関数・流れポテンシャル用

ガラーキン係数 -> チェビシェフ係数変換(1次元データ)

Original external subprogram is at_aq_galerkin_RRFF#t_q

t_v( v_data ) result(t_v)
Function :
t_v(0:km) :real(8)
: (out) チェビシェフ係数
v_data(ks:km) :real(8), intent(IN)
: (in) ガラーキン係数

チェビシェフ−ガラーキン法 両端ノイマン境界条件

ガラーキン係数 -> チェビシェフ係数変換(1次元データ)

Original external subprogram is at_av_galerkin_NN#t_v

v_Dy_v( v_data ) result(v_Dx_v)
Function :
v_Dx_v(ks:km) :real(8)
v_data(ks:km) :real(8), intent(IN)

チェビシェフ−ガラーキン法 両端ノイマン境界条件

X 微分計算(1 次元)

Original external subprogram is at_av_galerkin_NN#v_Dx_v

v_t( t_data ) result(v_t)
Function :
v_t(ks:km) :real(8)
: (out) ガラーキン係数
t_data(0:km) :real(8), intent(IN)
: (in) チェビシェフ係数

チェビシェフ−ガラーキン法 両端ノイマン境界条件

チェビシェフ係数 -> ガラーキン係数変換(1次元データ)

Original external subprogram is at_av_galerkin_NN#v_t

v_y( g_data ) result(v_g)
Function :
v_g(ks:km) :real(8)
: (out) ガラーキン係数
g_data(0:im) :real(8), intent(IN)
: (in) 格子点データ

チェビシェフ−ガラーキン法 両端ノイマン境界条件

格子点データ -> ガラーキン係数変換(1次元データ)

Original external subprogram is at_av_galerkin_NN#v_g

x_AvrY_yx( yx ) result(x_AvrY_yx)
Function :
x_AvrY_yx :real(8), dimension(0:im-1)
: (out) 平均された 1 次元(X)格子点
yx :real(8), dimension(0:jm,0:im-1)
: (in) 2 次元格子点データ

2 次元格子点データの Y 方向平均

実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, y_Y_Weight の総和で割ることで平均している.

Original external subprogram is et_module#x_AvrY_yx

x_IntY_yx( yx ) result(x_IntY_yx)
Function :
x_IntY_yx :real(8), dimension(0:im-1)
: (out) 積分された 1 次元(X)格子点データ
yx :real(8), dimension(0:jm,0:im-1)
: (in) 2 次元格子点データ

Y 方向積分

2 次元格子点データの Y 方向積分

実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している.

Original external subprogram is et_module#x_IntY_yx

y_AvrX_yx( yx ) result(y_AvrX_yx)
Function :
y_AvrX_yx :real(8), dimension(0:jm)
: (out) 平均された 1 次元(Y)格子点
yx :real(8), dimension(0:jm,0:im-1)
: (in) 2 次元格子点データ

2 次元格子点データの X 方向平均

実際には格子点データ各点毎に x_X_Weight をかけた総和を計算し, x_X_Weight の総和で割ることで平均している.

Original external subprogram is et_module#y_AvrX_yx

y_IntX_yx( yx ) result(y_IntX_yx)
Function :
y_IntX_yx :real(8), dimension(0:jm)
: (out) 積分された 1 次元(Y)格子点データ
yx :real(8), dimension(0:jm,0:im-1)
: (in) 2 次元格子点データ

X 方向積分

2 次元格子点データの X 方向積分

実際には格子点データ各点毎に x_X_Weight をかけた総和を計算している.

Original external subprogram is et_module#y_IntX_yx

y_b( b_data ) result(g_b)
Function :
g_b(0:im) :real(8)
: (out) 格子点データ
b_data(ks:km) :real(8), intent(IN)
: (in) ガラーキン係数

チェビシェフ−ガラーキン法 片端ノイマン片端ディリクレ境界条件

ガラーキン係数 -> 格子点データ変換(1次元データ)

Original external subprogram is at_ab_galerkin_ND#g_b

y_d( d_data ) result(g_d)
Function :
g_d(0:im) :real(8)
: (out) 格子点データ
d_data(ks:km) :real(8), intent(IN)
: (in) ガラーキン係数

チェビシェフ−ガラーキン法 両端ディリクレ境界条件

ガラーキン係数 -> 格子点データ変換(1次元データ)

Original external subprogram is at_ad_galerkin_DD#g_d

y_f( f_data ) result(g_f)
Function :
g_f(0:im) :real(8)
: (out) 格子点データ
f_data(ks:km) :real(8), intent(IN)
: (in) ガラーキン係数

チェビシェフ−ガラーキン法 ディリクレ・ノイマン混合境界条件

ガラーキン係数 -> 格子点データ変換(1次元データ)

Original external subprogram is at_af_galerkin_MM#g_f

y_p( p_data ) result(g_p)
Function :
g_p(0:im) :real(8)
: (out) 格子点データ
p_data(ks:km) :real(8), intent(IN)
: (in) ガラーキン係数

チェビシェフ−ガラーキン法 片端ディリクレ片端ノイマン境界条件

ガラーキン係数 -> 格子点データ変換(1次元データ)

Original external subprogram is at_ap_galerkin_DN#g_p

y_q( q_data ) result(g_q)
Function :
g_q(0:im) :real(8)
: (out) 格子点データ
q_data(ks:km) :real(8), intent(in)
: (in) ガラーキン係数

チェビシェフ−ガラーキン法 非圧縮流体の流線関数・流れポテンシャル用

ガラーキン係数 -> 格子点データ変換(1次元データ)

Original external subprogram is at_aq_galerkin_RRFF#g_q

y_v( v_data ) result(g_v)
Function :
g_v(0:im) :real(8)
: (out) 格子点データ
v_data(ks:km) :real(8), intent(IN)
: (in) ガラーキン係数

チェビシェフ−ガラーキン法 両端ノイマン境界条件

ガラーキン係数 -> 格子点データ変換(1次元データ)

Original external subprogram is at_av_galerkin_NN#g_v

yx_X
Variable :
yx_X :real(8), dimension(:,:), allocatable

Original external subprogram is et_module#yx_X

yx_Y
Variable :
yx_Y :real(8), dimension(:,:), allocatable

Original external subprogram is et_module#yx_Y

Function :
yx_eb :real(8), dimension(0:jm,0:im-1)
: (out) 格子点データ
eb :real(8), dimension(-km:km,2:lm), intent(in)
: (in) スペクトルデータ

ガラーキンデータから格子データへ変換する.

[Source]

    function yx_eb(eb)
      !
      ! ガラーキンデータから格子データへ変換する.
      !
      real(8), dimension(0:jm,0:im-1)              :: yx_eb
      !(out) 格子点データ

      real(8), dimension(-km:km,2:lm), intent(in)  :: eb
      !(in) スペクトルデータ

      yx_eb = yx_et(et_eb(eb))

    end function yx_eb
Function :
yx_ed :real(8), dimension(0:jm,0:im-1)
: (out) 格子点データ
ed :real(8), dimension(-km:km,2:lm), intent(in)
: (in) スペクトルデータ

ガラーキンデータから格子データへ変換する.

[Source]

    function yx_ed(ed)
      !
      ! ガラーキンデータから格子データへ変換する.
      !
      real(8), dimension(0:jm,0:im-1)              :: yx_ed
      !(out) 格子点データ

      real(8), dimension(-km:km,2:lm), intent(in)  :: ed
      !(in) スペクトルデータ

      yx_ed = yx_et(et_ed(ed))

    end function yx_ed
Function :
yx_ef :real(8), dimension(0:jm,0:im-1)
: (out) 格子点データ
ef :real(8), dimension(-km:km,2:lm), intent(in)
: (in) スペクトルデータ

ガラーキンデータから格子データへ変換する.

[Source]

    function yx_ef(ef)
      !
      ! ガラーキンデータから格子データへ変換する.
      !
      real(8), dimension(0:jm,0:im-1)              :: yx_ef
      !(out) 格子点データ

      real(8), dimension(-km:km,2:lm), intent(in)  :: ef
      !(in) スペクトルデータ

      yx_ef = yx_et(et_ef(ef))

    end function yx_ef
Function :
yx_eh :real(8), dimension(0:jm,0:im-1)
: (out) 格子点データ
eh :real(8), dimension(-km:km,2:lm), intent(in)
: (in) スペクトルデータ

ガラーキンデータから格子データへ変換する.

[Source]

    function yx_eh(eh)
      !
      ! ガラーキンデータから格子データへ変換する.
      !
      real(8), dimension(0:jm,0:im-1)              :: yx_eh
      !(out) 格子点データ

      real(8), dimension(-km:km,2:lm), intent(in)  :: eh
      !(in) スペクトルデータ

      yx_eh = yx_et(et_eh(eh))

    end function yx_eh
Function :
yx_ep :real(8), dimension(0:jm,0:im-1)
: (out) 格子点データ
ep :real(8), dimension(-km:km,2:lm), intent(in)
: (in) スペクトルデータ

ガラーキンデータから格子データへ変換する.

[Source]

    function yx_ep(ep)
      !
      ! ガラーキンデータから格子データへ変換する.
      !
      real(8), dimension(0:jm,0:im-1)              :: yx_ep
      !(out) 格子点データ

      real(8), dimension(-km:km,2:lm), intent(in)  :: ep
      !(in) スペクトルデータ

      yx_ep = yx_et(et_ep(ep))

    end function yx_ep
Function :
yx_eq :real(8), dimension(0:jm,0:im-1)
: (out) 格子点データ
eq :real(8), dimension(-km:km,4:lm), intent(in)
: (in) スペクトルデータ

ガラーキンデータから格子データへ変換する.

[Source]

    function yx_eq(eq)
      !
      ! ガラーキンデータから格子データへ変換する.
      !
      real(8), dimension(0:jm,0:im-1)              :: yx_eq
      !(out) 格子点データ

      real(8), dimension(-km:km,4:lm), intent(in)  :: eq
      !(in) スペクトルデータ

      yx_eq = yx_et(et_eq(eq))

    end function yx_eq
yx_et( et ) result(yx_et)
Function :
yx_et :real(8), dimension(0:jm,0:im-1)
: (out) 格子点データ
et :real(8), dimension(-km:km,0:lm), intent(in)
: (in) スペクトルデータ

スペクトルデータから格子データへ変換する.

Original external subprogram is et_module#yx_et

Function :
yx_ev :real(8), dimension(0:jm,0:im-1)
: (out) 格子点データ
ev :real(8), dimension(-km:km,2:lm), intent(in)
: (in) スペクトルデータ

ガラーキンデータから格子データへ変換する.

[Source]

    function yx_ev(ev)
      !
      ! ガラーキンデータから格子データへ変換する.
      !
      real(8), dimension(0:jm,0:im-1)              :: yx_ev
      !(out) 格子点データ

      real(8), dimension(-km:km,2:lm), intent(in)  :: ev
      !(in) スペクトルデータ

      yx_ev = yx_et(et_ev(ev))

    end function yx_ev