Class et_galerkin_module
In: src/et_galerkin_module.f90

2 次元水路領域 Fourier 展開 + チェビシェフ−ガラーキン法用モジュール

Methods

b_Dx_b   b_g   b_t   d_Dx_d   d_g   d_t   eb_Dx_eb   eb_eg   eb_et   ed_Dx_ed   ed_eg   ed_et   ef_Dx_ef   ef_eg   ef_et   eg_eb   eg_ed   eg_ef   eg_eh   eg_ep   eg_eq   eg_ev   eh_Dx_eh   eh_eg   eh_et   ep_Dx_ep   ep_eg   ep_et   eq_Dx_eq   eq_Vor2Strm_et   eq_eg   eq_et   et_Dx_et   et_Dy_et   et_Jacobian_et_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_eg   ev_et   f_Dx_f   f_g   f_t   g_b   g_d   g_f   g_p   g_q   g_v   p_Dx_p   p_g   p_t   q_Dx_q   q_g   q_t   t_b   t_d   t_f   t_p   t_q   t_v   v_Dx_v   v_g   v_t   yx_X   yx_Y   yx_et  

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_RRSS

Public Instance methods

b_Dx_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_g( 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

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

d_Dx_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_g( 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

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

eb_Dx_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_eg( 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

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

ed_Dx_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_eg( 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

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

ef_Dx_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_eg( 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

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

eg_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

eg_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

eg_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

eg_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

eg_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

eg_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_RRSS#ag_aq

eg_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

eh_Dx_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_eg( 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

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

ep_Dx_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_eg( 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

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

eq_Dx_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_RRSS#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_RRSS ) call MessageNotify('E','eq_Vor2Strm_et', 'at_aq_galerkin_RRSS_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_eg( 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_RRSS#aq_ag

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_RRSS#aq_at

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_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_RRSS#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_cfdx0_xmin :real(8),intent(in),optional
: (0階微分@x=xmin)
MM_cfdx1_xmin :real(8),intent(In),optional
: (1階微分@x=xmin)
MM_cfdx0_xmax :real(8),intent(in),optional
: (0階微分@x=xmax)
MM_cfdx1_xmax :real(8),intent(in),optional
: (1階微分@x=xmax)
MMex_cfdx0_xmin(-k:k) :real(8),intent(in),optional
: (0階微分@x=xmin)
MMex_cfdx1_xmin(-k:k) :real(8),intent(in),optional
: (1階微分@x=xmin)
MMex_cfdx0_xmax(-k:k) :real(8),intent(in),optional
: (0階微分@x=xmax)
MMex_cfdx1_xmax(-k:k) :real(8),intent(in),optional
: (1階微分@x=xmax)
 2 次元水路領域
 Fourier 展開 + チェビシェフ−ガラーキン法用モジュール

 初期化サブルーチン

[Source]

    subroutine et_galerkin_Initial(i,j,k,l,xmin,xmax,ymin,ymax, DD,NN,DN,ND,velBC, MM_cfdx0_xmin, MM_cfdx1_xmin, MM_cfdx0_xmax, MM_cfdx1_xmax, MMex_cfdx0_xmin, MMex_cfdx1_xmin, MMex_cfdx0_xmax, MMex_cfdx1_xmax)
      !
      !  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_cfdx0_xmin ! (0階微分@x=xmin)
      real(8),intent(In),optional :: MM_cfdx1_xmin ! (1階微分@x=xmin)
      real(8),intent(in),optional :: MM_cfdx0_xmax ! (0階微分@x=xmax)
      real(8),intent(in),optional :: MM_cfdx1_xmax ! (1階微分@x=xmax)

      ! at_ah_galerkin_MMex_module 境界条件係数
      real(8),intent(in),optional :: MMex_cfdx0_xmin(-k:k) ! (0階微分@x=xmin)
      real(8),intent(in),optional :: MMex_cfdx1_xmin(-k:k) ! (1階微分@x=xmin)
      real(8),intent(in),optional :: MMex_cfdx0_xmax(-k:k) ! (0階微分@x=xmax)
      real(8),intent(in),optional :: MMex_cfdx1_xmax(-k:k) ! (1階微分@x=xmax)

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

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

      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_cfdx0_xmin) .AND.present(MM_cfdx1_xmin) .AND. present(MM_cfdx0_xmax) .AND.present(MM_cfdx1_xmax) ) Set_MM=.true.

      if ( present(MMex_cfdx0_xmin) .AND.present(MMex_cfdx1_xmin) .AND. present(MMex_cfdx0_xmax) .AND.present(MMex_cfdx1_xmax) ) Set_MMex=.true.

      if ( present(velBC) ) Set_RRSS = .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_cfdx0_xmax, MM_cfdx1_xmax, MM_cfdx0_xmin, MM_cfdx1_xmin   )
      if ( Set_MMex ) call at_ah_galerkin_MMex_Initial (jm,lm,2*km+1, MMex_cfdx0_xmax, MMex_cfdx1_xmax, MMex_cfdx0_xmin, MMex_cfdx1_xmin   )

      if ( Set_RRSS ) call at_aq_galerkin_RRSS_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

ev_Dx_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_eg( 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

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

f_Dx_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_g( 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

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

g_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

g_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

g_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

g_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

g_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_RRSS#g_q

g_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

p_Dx_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_g( 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

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

q_Dx_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_RRSS#q_Dx_q

q_g( 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_RRSS#q_g

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_RRSS#q_t

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_RRSS#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_Dx_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_g( 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

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

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

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

[Validate]