| Class | esc_module |
| In: |
libsrc/esc_module/esc_module.f90
|
| Authors: | Shin-ichi Takehiro, Youhei SASAKI |
| Version: | $Id: esc_module.f90 618 2013-09-25 17:59:07Z uwabami $ |
| Copyright&License: | See COPYRIGHT |
spml/esc_module モジュールは 2 次元チャネル領域での流体運動を スペクトル法により数値計算するための Fortran90 関数を提供する.
内部で ISPACK/C2PACK の Fortran77 サブルーチンを呼んでいる. スペクトルデータおよび格子点データの格納方法については ISPACK/C2PACK のマニュアルを参照されたい.
| es_,ec_ : | スペクトルデータ(Y 方向 SIN 展開, COS 展開) |
| yx_ : | 2 次元格子点データ |
| x_ : | X 方向 1 次元格子点データ |
| y_ : | Y 方向 1 次元格子点データ |
| _es : | スペクトルデータ(Y 方向 SIN 型) |
| _ec : | スペクトルデータ(Y 方向 COS 型) |
| _es_es : | 2 つのスペクトルデータ |
| _es_ec : | 2 つのスペクトルデータ |
| _yx : | 2 次元格子点データ, |
| _x : | X 方向 1 次元格子点データ |
| _y : | Y 方向 1 次元格子点データ |
* 変数の種類と次元は real(8), dimension(0:jm,0:im-1). * im, jm はそれぞれ X, Y 座標の格子点数であり, サブルーチン esc_Initial にてあらかじめ設定しておく. * 第 1 次元が Y 座標の格子点位置番号, 第 2 次元が X 座標の格子点位置番号 である (X, Y の順ではない)ことに注意.
| esc_initial : | スペクトル変換の格子点数, 波数, 領域の大きさの設定 |
| x_X, y_Y : | 格子点座標(X,Y座標)を格納した 1 次元配列 |
| x_X_Weight, y_Y_Weight : | 重み座標を格納した 1 次元配列 |
| yx_X, yx_Y : | 格子点データの XY 座標(X,Y)(格子点データ型 2 次元配列) |
| yx_es, yx_ec : | スペクトルデータから格子データへの変換 |
| es_yx, ec_yx : | 格子データからスペクトルデータへの変換 |
| es_Lapla_es, ec_Lapla_ec : | スペクトルデータにラプラシアンを作用させる |
| es_LaplaInv_es, ec_LaplaInv_ec : | スペクトルデータに ラプラシアンの逆変換を作用させる |
| es_Dx_es, ec_Dx_ec : | スペクトルデータに X 微分を作用させる |
| ec_Dy_es, es_Dy_ec : | スペクトルデータに Y 微分を作用させる |
| es_Jacobian_es_es, ec_Jacobian_es_ec : | 2 つのスペクトルデータから ヤコビアンを計算する |
| 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 方向積分および平均 |
| Function : | |||
| AvrX_x : | real(DP)
| ||
| x : | real(DP), dimension(0:im-1)
|
X 方向平均
1 次元(X)格子点データの X 方向平均
function AvrX_x(x) ! X 方向平均
!
! 1 次元(X)格子点データの X 方向平均
!
real(DP), dimension(0:im-1) :: x
!(in) 1 次元(X)格子点データ
real(DP) :: AvrX_x
!(out) 平均値
AvrX_x = IntX_x(x)/sum(x_X_weight)
end function AvrX_x
| Function : | |||
| AvrYX_yx : | real(DP)
| ||
| yx : | real(DP), dimension(0:jm,0:im-1)
|
全領域平均
2 次元格子点データの全領域平均
function AvrYX_yx(yx) ! 全領域平均
!
! 2 次元格子点データの全領域平均
!
real(DP), dimension(0:jm,0:im-1) :: yx
!(in) 2 次元格子点データ
real(DP) :: AvrYX_yx
!(out) 平均値
AvrYX_yx = IntYX_yx(yx)/(sum(x_X_weight)*sum(y_Y_weight))
end function AvrYX_yx
| Function : | |||
| AvrY_y : | real(DP)
| ||
| y : | real(DP), dimension(0:jm)
|
Y 方向平均
1 次元(Y)格子点データの Y 方向平均
function AvrY_y(y) ! Y 方向平均
!
! 1 次元(Y)格子点データの Y 方向平均
!
real(DP), dimension(0:jm) :: y
!(in) 1 次元(Y)格子点データ
real(DP) :: AvrY_y
! 平均値
AvrY_y = IntY_y(y)/sum(y_Y_weight)
end function AvrY_y
| Function : | |||
| IntX_x : | real(DP)
| ||
| x : | real(DP), dimension(0:im-1)
|
X 方向積分
1 次元(X)格子点データの X 方向積分
function IntX_x(x) ! X 方向積分
!
! 1 次元(X)格子点データの X 方向積分
!
real(DP), dimension(0:im-1) :: x
!(in) 1 次元(X)格子点データ
real(DP) :: IntX_x
!(out) 積分値
IntX_x = sum(x*x_X_Weight)
end function IntX_x
| Function : | |||
| IntYX_yx : | real(DP)
| ||
| yx : | real(DP), dimension(0:jm,0:im-1)
|
2 次元格子点データの全領域積分および平均.
function IntYX_yx(yx)
!
! 2 次元格子点データの全領域積分および平均.
!
real(DP), dimension(0:jm,0:im-1) :: yx
!(in) 2 次元格子点データ
real(DP) :: IntYX_yx
!(out) 積分値
integer :: i, j
IntYX_yx = 0.0d0
do i=0,im-1
do j=0,jm
IntYX_yx = IntYX_yx + yx(j,i) * y_Y_Weight(j) * x_X_Weight(i)
enddo
enddo
end function IntYX_yx
| Function : | |||
| IntY_y : | real(DP)
| ||
| y : | real(DP), dimension(0:jm)
|
Y 方向積分
1 次元(Y)格子点データの Y 方向積分
function IntY_y(y) ! Y 方向積分
!
! 1 次元(Y)格子点データの Y 方向積分
!
real(DP), dimension(0:jm) :: y
!(in) 1 次元(Y)格子点データ
real(DP) :: IntY_y
!(out) 積分値
IntY_y = sum(y*y_Y_Weight)
end function IntY_y
| Function : | |||
| ec_Dx_ec : | real(DP), dimension(-km:km,0:lm)
| ||
| ec : | real(DP), dimension(-km:km,0:lm), intent(in)
|
COS(Y)型入力スペクトルデータに X 微分(∂x)を作用する.
スペクトルデータの X 微分とは, 対応する格子点データに X 微分を 作用させたデータのスペクトル変換のことである.
実際にはスペクトルデータに X 方向波数 k をかけて sin(kx) <-> cos(kx) 成分に入れ換える計算を行っている.
function ec_Dx_ec(ec)
!
! COS(Y)型入力スペクトルデータに X 微分(∂x)を作用する.
!
! スペクトルデータの X 微分とは, 対応する格子点データに X 微分を
! 作用させたデータのスペクトル変換のことである.
!
! 実際にはスペクトルデータに X 方向波数 k をかけて
! sin(kx) <-> cos(kx) 成分に入れ換える計算を行っている.
!
real(DP), dimension(-km:km,0:lm) :: ec_Dx_ec
!(out) スペクトルデータの X 微分
real(DP), dimension(-km:km,0:lm), intent(in) :: ec
!(in) COS(Y)型入力スペクトルデータ
integer k,l
do l=0,lm
do k=-km,km
ec_Dx_ec(k,l) = (-2*pi*k/xl)*ec(-k,l)
enddo
enddo
end function ec_Dx_ec
| Function : | |||
| ec_Dy_es : | real(DP), dimension(-km:km,0:lm)
| ||
| es : | real(DP), dimension(-km:km,lm), intent(in)
|
スペクトル SINY に作用する y 微分演算子
SIN(Y)型入力スペクトルデータに Y 微分(∂y)を作用する.
スペクトルデータの X 微分とは, 対応する格子点データに Y 微分を 作用させたデータのスペクトル変換のことである.
実際にはスペクトルデータに X 方向波数 l をかけている.
function ec_Dy_es(es) ! スペクトル SINY に作用する y 微分演算子
!
! SIN(Y)型入力スペクトルデータに Y 微分(∂y)を作用する.
!
! スペクトルデータの X 微分とは, 対応する格子点データに Y 微分を
! 作用させたデータのスペクトル変換のことである.
!
! 実際にはスペクトルデータに X 方向波数 l をかけている.
!
real(DP), dimension(-km:km,0:lm) :: ec_Dy_es
!(out) スペクトルデータの Y 微分, COS(Y)型.
real(DP), dimension(-km:km,lm), intent(in) :: es
!(in) SIN(Y)型入力スペクトルデータ
integer k,l
do k=-km,km
ec_Dy_es(k,0) = 0.0
enddo
do l=1,lm
do k=-km,km
ec_Dy_es(k,l) = (pi*l/yl)*es(k,l)
enddo
enddo
end function ec_Dy_es
| Function : | |||
| ec_Jacobian_es_ec : | real(DP), dimension(-km:km,0:lm)
| ||
| es : | real(DP), dimension(-km:km,lm), intent(in)
| ||
| ec : | real(DP), dimension(-km:km,0:lm), intent(in)
|
スペクトル COS(Y) に作用するヤコビアン
2 つのスペクトルデータからヤコビアン
J(A,B)=(∂xA)(∂yB)-(∂yA)(∂xB)
を計算する.
2 つのスペクトルデータのヤコビアンとは, 対応する 2 つの
格子点データのヤコビアンのスペクトル変換のことである.
function ec_Jacobian_es_ec(es,ec) ! スペクトル COS(Y) に作用するヤコビアン
!
! 2 つのスペクトルデータからヤコビアン
!
! J(A,B)=(∂xA)(∂yB)-(∂yA)(∂xB)
!
! を計算する.
!
! 2 つのスペクトルデータのヤコビアンとは, 対応する 2 つの
! 格子点データのヤコビアンのスペクトル変換のことである.
!
real(DP), dimension(-km:km,0:lm) :: ec_Jacobian_es_ec
!(out) 2 つのスペクトルデータのヤコビアン
real(DP), dimension(-km:km,lm), intent(in) :: es
!(in) 1つ目の SIN(Y)型入力スペクトルデータ
real(DP), dimension(-km:km,0:lm), intent(in) :: ec
!(in) 2つ目の COS(Y)型入力スペクトルデータ
real(DP) :: ws((2*km+1)*(lm+1))
real(DP) :: wgj((jm+1)*im*3)
real(DP) :: ec_work(-km:km,0:lm)
! 作業領域
integer k,l
call c2ajcc(lm,km,jm,im,es,ec,ec_work,ws,wgj,itj,tj,iti,ti)
do l=0,lm
do k=-km,km
ec_Jacobian_es_ec(k,l) = (2*pi/xl)*(pi/yl)*ec_work(k,l)
enddo
enddo
end function ec_Jacobian_es_ec
| Function : | |||
| ec_LaplaInv_ec : | real(DP), dimension(-km:km,0:lm)
| ||
| ec : | real(DP), dimension(-km:km,0:lm), intent(in)
|
スペクトル COSY に作用する逆 lapla 演算子
入力スペクトルデータに逆ラプラシアン(∂xx+∂yy)**(-1)を作用する.
スペクトルデータの逆ラプラシアンとは, 対応する格子点データに 逆ラプラシアンを作用させたデータのスペクトル変換のことである.
実際にはスペクトルデータに全波数 (k**2 + l**2) で割る 計算を行っている.
function ec_LaplaInv_ec(ec) ! スペクトル COSY に作用する逆 \lapla 演算子
!
! 入力スペクトルデータに逆ラプラシアン(∂xx+∂yy)**(-1)を作用する.
!
! スペクトルデータの逆ラプラシアンとは, 対応する格子点データに
! 逆ラプラシアンを作用させたデータのスペクトル変換のことである.
!
! 実際にはスペクトルデータに全波数 (k**2 + l**2) で割る
! 計算を行っている.
!
real(DP), dimension(-km:km,0:lm) :: ec_LaplaInv_ec
!(out) スペクトルデータの逆ラプラシアン
real(DP), dimension(-km:km,0:lm), intent(in) :: ec
!(in) SIN(Y)型スペクトルデータ
integer k,l
if ( abs(ec(0,0)) >= epsilon(0.0D0) ) then
call MessageNotify('W','ec_LaplaInv_ec', '0-0 component of input data is not zero.')
call MessageNotify('W','ec_LaplaInv_ec', '0-0 component of output set to zero.')
endif
do l=1,lm
do k=-km,km
ec_LaplaInv_ec(k,l) = -ec(k,l)/((2*pi*k/xl)**2+(pi*l/yl)**2)
enddo
enddo
do k=1,km
ec_LaplaInv_ec(k,0) = -ec(k,0)/(2*pi*k/xl)**2
ec_LaplaInv_ec(-k,0) = -ec(-k,0)/(2*pi*k/xl)**2
enddo
ec_LaplaInv_ec(0,0) = 0.0
end function ec_LaplaInv_ec
| Function : | |||
| ec_Lapla_ec : | real(DP), dimension(-km:km,0:lm)
| ||
| ec : | real(DP), dimension(-km:km,0:lm), intent(in)
|
COS(Y)型入力スペクトルデータにラプラシアン(∂xx+∂yy)を作用する.
スペクトルデータのラプラシアンとは, 対応する格子点データに ラプラシアンを作用させたデータのスペクトル変換のことである.
実際にはスペクトルデータに全波数 (k**2 + l**2) をかける 計算を行っている.
function ec_Lapla_ec(ec)
!
! COS(Y)型入力スペクトルデータにラプラシアン(∂xx+∂yy)を作用する.
!
! スペクトルデータのラプラシアンとは, 対応する格子点データに
! ラプラシアンを作用させたデータのスペクトル変換のことである.
!
! 実際にはスペクトルデータに全波数 (k**2 + l**2) をかける
! 計算を行っている.
!
real(DP), dimension(-km:km,0:lm) :: ec_Lapla_ec
!(out) スペクトルデータのラプラシアン
real(DP), dimension(-km:km,0:lm), intent(in) :: ec
!(in) COS(Y)型入力スペクトルデータ
integer k,l
do l=0,lm
do k=-km,km
ec_Lapla_ec(k,l) = -((2*pi*k/xl)**2+(pi*l/yl)**2)*ec(k,l)
enddo
enddo
end function ec_Lapla_ec
| Function : | |||
| ec_yx : | real(DP), dimension(-km:km,0:lm)
| ||
| yx : | real(DP), dimension(0:jm,0:im-1), intent(in)
|
格子データから COS(Y)型スペクトルデータへ変換する.
function ec_yx(yx)
!
! 格子データから COS(Y)型スペクトルデータへ変換する.
!
real(DP), dimension(-km:km,0:lm) :: ec_yx
!(in) COS(Y)型スペクトルデータ
real(DP), dimension(0:jm,0:im-1), intent(in) :: yx
!(out) 格子点データ
real(DP) :: wg((jm+1)*im)
real(DP) :: yx_work(0:jm,0:im-1)
! 作業領域
yx_work = yx
call c2g2sa(lm,km,jm,im,yx_work,ec_yx,wg,itj,tj,iti,ti,2)
end function ec_yx
| Function : | |||
| es_Dx_es : | real(DP), dimension(-km:km,lm)
| ||
| es : | real(DP), dimension(-km:km,lm), intent(in)
|
SIN(Y)型入力スペクトルデータに X 微分(∂x)を作用する.
スペクトルデータの X 微分とは, 対応する格子点データに X 微分を 作用させたデータのスペクトル変換のことである.
実際にはスペクトルデータに X 方向波数 k をかけて sin(kx) <-> cos(kx) 成分に入れ換える計算を行っている.
function es_Dx_es(es)
!
! SIN(Y)型入力スペクトルデータに X 微分(∂x)を作用する.
!
! スペクトルデータの X 微分とは, 対応する格子点データに X 微分を
! 作用させたデータのスペクトル変換のことである.
!
! 実際にはスペクトルデータに X 方向波数 k をかけて
! sin(kx) <-> cos(kx) 成分に入れ換える計算を行っている.
!
real(DP), dimension(-km:km,lm) :: es_Dx_es
!(out) スペクトルデータの X 微分
real(DP), dimension(-km:km,lm), intent(in) :: es
!(in) SIN(Y)型入力スペクトルデータ
integer k,l
do l=1,lm
do k=-km,km
es_Dx_es(k,l) = (-2*pi*k/xl)*es(-k,l)
enddo
enddo
end function es_Dx_es
| Function : | |||
| es_Dy_ec : | real(DP), dimension(-km:km,lm)
| ||
| ec : | real(DP), dimension(-km:km,0:lm), intent(in)
|
スペクトル COSY に作用する y 微分演算子
COS(Y)型入力スペクトルデータに Y 微分(∂y)を作用する.
スペクトルデータの X 微分とは, 対応する格子点データに Y 微分を 作用させたデータのスペクトル変換のことである.
実際にはスペクトルデータに X 方向波数 l をかけている.
function es_Dy_ec(ec) ! スペクトル COSY に作用する y 微分演算子
!
! COS(Y)型入力スペクトルデータに Y 微分(∂y)を作用する.
!
! スペクトルデータの X 微分とは, 対応する格子点データに Y 微分を
! 作用させたデータのスペクトル変換のことである.
!
! 実際にはスペクトルデータに X 方向波数 l をかけている.
!
real(DP), dimension(-km:km,lm) :: es_Dy_ec
!(out) スペクトルデータの Y 微分, SIN(Y)型.
real(DP), dimension(-km:km,0:lm), intent(in) :: ec
!(in) COS(Y)型入力スペクトルデータ
integer k,l
do l=1,lm
do k=-km,km
es_Dy_ec(k,l) = -(pi*l/yl)*ec(k,l)
enddo
enddo
end function es_Dy_ec
| Function : | |||
| es_Jacobian_es_es : | real(DP), dimension(-km:km,lm)
|
スペクトル SINY に作用するヤコビアン
2 つのスペクトルデータからヤコビアン
J(A,B)=(∂xA)(∂yB)-(∂yA)(∂xB)
を計算する.
2 つのスペクトルデータのヤコビアンとは, 対応する 2 つの
格子点データのヤコビアンのスペクトル変換のことである.
function es_Jacobian_es_es(es_a,es_b) !スペクトル SINY に作用するヤコビアン
!
! 2 つのスペクトルデータからヤコビアン
!
! J(A,B)=(∂xA)(∂yB)-(∂yA)(∂xB)
!
! を計算する.
!
! 2 つのスペクトルデータのヤコビアンとは, 対応する 2 つの
! 格子点データのヤコビアンのスペクトル変換のことである.
!
real(DP), dimension(-km:km,lm) :: es_Jacobian_es_es
!(out) 2 つのスペクトルデータのヤコビアン
real(DP), dimension(-km:km,lm), intent(in) :: es_A,es_B
!(in) 2つの SIN(Y)型入力スペクトルデータ
real(DP) :: ws((2*km+1)*(lm+1))
real(DP) :: wgj((jm+1)*im*3)
real(DP) :: es_work(-km:km,lm)
! 作業領域
integer k,l
call c2ajcb(lm,km,jm,im,es_A,es_B,es_work,ws,wgj,itj,tj,iti,ti)
do l=1,lm
do k=-km,km
es_Jacobian_es_es(k,l) = (2*pi/xl)*(pi/yl)*es_work(k,l)
enddo
enddo
end function es_Jacobian_es_es
| Function : | |||
| es_LaplaInv_es : | real(DP), dimension(-km:km,lm)
| ||
| es : | real(DP), dimension(-km:km,lm), intent(in)
|
スペクトル SINY に作用する逆 lapla 演算子
入力スペクトルデータに逆ラプラシアン(∂xx+∂yy)**(-1)を作用する.
スペクトルデータの逆ラプラシアンとは, 対応する格子点データに 逆ラプラシアンを作用させたデータのスペクトル変換のことである.
実際にはスペクトルデータに全波数 (k**2 + l**2) で割る 計算を行っている.
function es_LaplaInv_es(es) ! スペクトル SINY に作用する逆 \lapla 演算子
!
! 入力スペクトルデータに逆ラプラシアン(∂xx+∂yy)**(-1)を作用する.
!
! スペクトルデータの逆ラプラシアンとは, 対応する格子点データに
! 逆ラプラシアンを作用させたデータのスペクトル変換のことである.
!
! 実際にはスペクトルデータに全波数 (k**2 + l**2) で割る
! 計算を行っている.
!
real(DP), dimension(-km:km,lm) :: es_LaplaInv_es
!(out) スペクトルデータの逆ラプラシアン
real(DP), dimension(-km:km,lm), intent(in) :: es
!(in) SIN(Y)型スペクトルデータ
integer k,l
do l=1,lm
do k=-km,km
es_LaplaInv_es(k,l) = -es(k,l)/((2*pi*k/xl)**2+(pi*l/yl)**2)
enddo
enddo
end function es_LaplaInv_es
| Function : | |||
| es_Lapla_es : | real(DP), dimension(-km:km,lm)
| ||
| es : | real(DP), dimension(-km:km,lm), intent(in)
|
SIN(Y)型入力スペクトルデータにラプラシアン(∂xx+∂yy)を作用する.
スペクトルデータのラプラシアンとは, 対応する格子点データに ラプラシアンを作用させたデータのスペクトル変換のことである.
実際にはスペクトルデータに全波数 (k**2 + l**2) をかける 計算を行っている.
function es_Lapla_es(es)
!
! SIN(Y)型入力スペクトルデータにラプラシアン(∂xx+∂yy)を作用する.
!
! スペクトルデータのラプラシアンとは, 対応する格子点データに
! ラプラシアンを作用させたデータのスペクトル変換のことである.
!
! 実際にはスペクトルデータに全波数 (k**2 + l**2) をかける
! 計算を行っている.
!
real(DP), dimension(-km:km,lm) :: es_Lapla_es
!(out) スペクトルデータのラプラシアン
real(DP), dimension(-km:km,lm), intent(in) :: es
!(in) SIN(Y)型入力スペクトルデータ
integer k,l
do l=1,lm
do k=-km,km
es_Lapla_es(k,l) = -((2*pi*k/xl)**2+(pi*l/yl)**2)*es(k,l)
enddo
enddo
end function es_Lapla_es
| Function : | |||
| es_yx : | real(DP), dimension(-km:km,lm)
| ||
| yx : | real(DP), dimension(0:jm,0:im-1), intent(in)
|
格子データから SIN(Y)型スペクトルデータへ変換する.
function es_yx(yx)
!
! 格子データから SIN(Y)型スペクトルデータへ変換する.
!
real(DP), dimension(-km:km,lm) :: es_yx
!(out) SIN(Y)型スペクトルデータ
real(DP), dimension(0:jm,0:im-1), intent(in) :: yx
!(in) 格子点データ
real(DP) :: wg((jm+1)*im)
real(DP) :: yx_work(0:jm,0:im-1)
! 作業領域
yx_work = yx
call c2g2sa(lm,km,jm,im,yx_work,es_yx,wg,itj,tj,iti,ti,1)
end function es_yx
| Subroutine : | |||
| i : | integer,intent(in)
| ||
| j : | integer,intent(in)
| ||
| k : | integer,intent(in)
| ||
| l : | integer,intent(in)
| ||
| xmin : | real(DP),intent(in)
| ||
| xmax : | real(DP),intent(in)
| ||
| ymin : | real(DP),intent(in)
| ||
| ymax : | real(DP),intent(in)
|
スペクトル変換の格子点数, 波数, 領域の大きさを設定する.
他の関数を呼ぶ前に, 最初にこのサブルーチンを呼んで 初期設定をしなければならない.
subroutine esc_Initial(i,j,k,l,xmin,xmax,ymin,ymax)
!
! スペクトル変換の格子点数, 波数, 領域の大きさを設定する.
!
! 他の関数を呼ぶ前に, 最初にこのサブルーチンを呼んで
! 初期設定をしなければならない.
!
integer,intent(in) :: i !(in) 格子点数(X)
integer,intent(in) :: j !(in) 格子点数(Y)
integer,intent(in) :: k !(in) 切断波数(X)
integer,intent(in) :: l !(in) 切断波数(Y)
real(DP),intent(in) :: xmin, xmax !(in) X 座標範囲
real(DP),intent(in) :: ymin, ymax !(in) Y 座標範囲
integer :: ii, jj
im = i
jm = j
km = k
lm = l
xl = xmax-xmin
yl = ymax-ymin
allocate(tj(jm*6),ti(im*2))
call c2init(jm,im,itj,tj,iti,ti)
allocate(x_X(0:im-1), x_X_Weight(0:im-1))
allocate(y_Y(0:jm), y_Y_Weight(0:jm))
allocate(yx_X(0:jm,0:im-1), yx_Y(0:jm,0:im-1))
do ii=0,im-1
x_X(ii) = xmin + xl/im*ii
enddo
x_X_Weight = xl/im
do jj=0,jm
y_Y(jj) = ymin + yl/jm*jj
enddo
y_Y_Weight(0) = yl/(2*jm)
y_Y_Weight(1:jm-1) = yl/jm
y_Y_Weight(jm) = yl/(2*jm)
yx_X = spread(x_X,1,jm+1)
yx_Y = spread(y_Y,2,im)
call MessageNotify('M','esc_initial', 'esc_module (2009/07/30) is initialized')
end subroutine esc_Initial
| Function : | |||
| x_AvrY_yx : | real(DP), dimension(0:im-1)
| ||
| yx : | real(DP), dimension(0:jm,0:im-1)
|
Y 方向平均
2 次元格子点データの Y 方向平均
function x_AvrY_yx(yx) ! Y 方向平均
!
! 2 次元格子点データの Y 方向平均
!
real(DP), dimension(0:jm,0:im-1) :: yx
!(in) 2 次元格子点データ
real(DP), dimension(0:im-1) :: x_AvrY_yx
!(out) Y 方向に平均された 1 次元(X)格子点データ
x_AvrY_yx = x_IntY_yx(yx)/sum(y_Y_weight)
end function x_AvrY_yx
| Function : | |||
| x_IntY_yx : | real(DP), dimension(0:im-1)
| ||
| yx : | real(DP), dimension(0:jm,0:im-1)
|
2 次元格子点データの Y 方向積分
function x_IntY_yx(yx)
!
! 2 次元格子点データの Y 方向積分
!
real(DP), dimension(0:jm,0:im-1) :: yx
!(in) 2 次元格子点データ
real(DP), dimension(0:im-1) :: x_IntY_yx
!(out) Y 方向に積分された 1 次元(X)格子点データ
integer :: j
x_IntY_yx = 0.0d0
do j=0,jm
x_IntY_yx(:) = x_IntY_yx(:) + yx(j,:) * y_Y_Weight(j)
enddo
end function x_IntY_yx
| Variable : | |||
| x_X_Weight : | real(DP), dimension(:), allocatable
|
| Function : | |||
| y_AvrX_yx : | real(DP), dimension(0:jm)
| ||
| yx : | real(DP), dimension(0:jm,0:im-1)
|
X 方向平均
1 次元(X)格子点データの X 方向平均
function y_AvrX_yx(yx) ! X 方向平均
!
! 1 次元(X)格子点データの X 方向平均
!
real(DP), dimension(0:jm,0:im-1) :: yx
!(in) 2 次元格子点データ
real(DP), dimension(0:jm) :: y_AvrX_yx
!(out) X 方向に平均された 1 次元(Y)格子点データ
y_AvrX_yx = y_IntX_yx(yx)/sum(x_X_weight)
end function y_AvrX_yx
| Function : | |||
| y_IntX_yx : | real(DP), dimension(0:jm)
| ||
| yx : | real(DP), dimension(0:jm,0:im-1)
|
X 方向積分
1 次元(X)格子点データの X 方向積分
function y_IntX_yx(yx) ! X 方向積分
!
! 1 次元(X)格子点データの X 方向積分
!
real(DP), dimension(0:jm,0:im-1) :: yx
!(in) 2 次元格子点データ
real(DP), dimension(0:jm) :: y_IntX_yx
!(out) X 方向に積分された 1 次元(Y)格子点データ
integer :: i
y_IntX_yx = 0.0d0
do i=0,im-1
y_IntX_yx(:) = y_IntX_yx(:) + yx(:,i) * x_X_Weight(i)
enddo
end function y_IntX_yx
| Variable : | |||
| y_Y_Weight : | real(DP), dimension(:), allocatable
|
| Function : | |||
| yx_ec : | real(DP), dimension(0:jm,0:im-1)
| ||
| ec : | real(DP), dimension(-km:km,0:lm), intent(in)
|
COS(Y)型スペクトルデータから格子データへ変換する.
function yx_ec(ec)
!
! COS(Y)型スペクトルデータから格子データへ変換する.
!
real(DP), dimension(0:jm,0:im-1) :: yx_ec
!(out) 格子点データ
real(DP), dimension(-km:km,0:lm), intent(in) :: ec
!(in) COS(Y)型スペクトルデータ
real(DP) :: wg((jm+1)*im)
! 作業領域
call c2s2ga(lm,km,jm,im,ec,yx_ec,wg,itj,tj,iti,ti,2)
end function yx_ec
| Function : | |||
| yx_es : | real(DP), dimension(0:jm,0:im-1)
| ||
| es : | real(DP), dimension(-km:km,lm), intent(in)
|
SIN(Y)型スペクトルデータから格子データへ変換する.
function yx_es(es)
!
! SIN(Y)型スペクトルデータから格子データへ変換する.
!
real(DP), dimension(0:jm,0:im-1) :: yx_es
!(out) 格子点データ
real(DP), dimension(-km:km,lm), intent(in) :: es
!(in) SIN(Y)型スペクトルデータ
real(DP) :: wg((jm+1)*im)
! 作業領域
call c2s2ga(lm,km,jm,im,es,yx_es,wg,itj,tj,iti,ti,1)
end function yx_es