| Class | esc_module |
| In: |
src/esc_module.f90
|
| IntYX_yx : | real(8)
| ||
| yx : | real(8), dimension(0:jm,0:im-1)
|
————— 積分計算 ——————
function IntYX_yx(yx) ! 全領域積分
real(8), dimension(0:jm,0:im-1) :: yx ! 2 次元格子点
real(8) :: IntYX_yx ! 積分値
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
| ec_Lapla_ec : | real(8), dimension(-km:km,0:lm) |
| ec : | real(8), dimension(-km:km,0:lm), intent(in) |
————— 微分計算 ——————
function ec_Lapla_ec(ec) ! スペクトル COSY に作用する \lapla 演算子
real(8), dimension(-km:km,0:lm) :: ec_Lapla_ec
real(8), dimension(-km:km,0:lm), intent(in) :: ec
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
| es_Jacobian_es_es : | real(8), dimension(-km:km,lm) |
——————- 非線形項計算 ———————-
function es_Jacobian_es_es(es_a,es_b) !スペクトル SINY に作用するヤコビアン
real(8), dimension(-km:km,lm) :: es_Jacobian_es_es
real(8), dimension(-km:km,lm), intent(in) :: es_A,es_B
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
| es_Lapla_es : | real(8), dimension(-km:km,lm) |
| es : | real(8), dimension(-km:km,lm), intent(in) |
————— 微分計算 ——————
function es_Lapla_es(es) ! スペクトル SINY に作用する \lapla 演算子
real(8), dimension(-km:km,lm) :: es_Lapla_es
real(8), dimension(-km:km,lm), intent(in) :: es
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
| i : | integer,intent(in)
| ||
| j : | integer,intent(in)
| ||
| k : | integer,intent(in)
| ||
| l : | integer,intent(in)
| ||
| xmin : | real(8),intent(in)
| ||
| xmax : | real(8),intent(in)
| ||
| ymin : | real(8),intent(in)
| ||
| ymax : | real(8),intent(in)
|
————— 初期化 ——————
subroutine esc_initial(i,j,k,l,xmin,xmax,ymin,ymax)
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 座標範囲
integer :: ii, jj
im = i
jm = j
km = k
lm = l
xl = xmax-xmin
yl = ymax-ymin
allocate(tj(jm*6),ti(im*2))
allocate(wg((jm+1)*im))
allocate(ws((2*km+1)*(lm+1)),wgj((jm+1)*im*3))
allocate(yx_work(0:jm,0:im-1))
allocate(es_work(-km:km,lm),ec_work(-km:km,0:lm))
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)
end subroutine esc_initial
| yx_es : | real(8), dimension(0:jm,0:im-1) |
| es : | real(8), dimension(-km:km,lm), intent(in) |
————— 基本変換 ——————
function yx_es(es) ! スペクトル SIN(Y) -> 台形格子
real(8), dimension(0:jm,0:im-1) :: yx_es
real(8), dimension(-km:km,lm), intent(in) :: es
call c2s2ga(lm,km,jm,im,es,yx_es,wg,itj,tj,iti,ti,1)
end function yx_es