| Class | ee_module |
| In: |
src/ee_module.f90
|
| IntYX_yx : | real(8)
| ||
| yx : | real(8), dimension(0:jm-1,0:im-1)
|
————— 積分計算 ——————
function IntYX_yx(yx) ! 全領域積分
real(8), dimension(0:jm-1,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-1
IntYX_yx = IntYX_yx + yx(j,i) * y_Y_Weight(j) * x_X_Weight(i)
enddo
enddo
end function IntYX_yx
| ee_JacobianZ_ee : | real(8), dimension(-lm:lm,-km:km) |
————— 微分計算 ——————
function ee_JacobianZ_ee(ee_zeta) ! スペクトルに作用するヤコビアン J(psi,zeta)
real(8), dimension(-lm:lm,-km:km) :: ee_JacobianZ_ee
real(8), dimension(-lm:lm,-km:km), intent(in) :: ee_Zeta
integer k,l
call n2ajbs(lm,km,jm,im,ee_Zeta,ee_tmp,ee_work,yx_work3,itj,tj,iti,ti)
do k=-km,km
do l=-lm,lm
ee_JacobianZ_ee(l,k) = (2*pi/xl)*(2*pi/yl)/((2*pi/xl)**2+(2*pi/yl)**2) * ee_tmp(l,k)
enddo
enddo
!!$ ee_tmp=ee_lapla_inv(zeta)
!!$ gv=yx_ee(ee_dx_ee(ee_tmp))
gu=yx_ee(ee_dy_ee(ee_tmp))
!!$ suv=ee_yx(gu*gv)
suuvv=ee_yx(gv**2-gu**2)
!!$ ee_jacz_ee = ee_dx_ee(ee_dx_ee(suv)) - ee_dy_ee(ee_dy_ee(suv))
!!$ - ee_dx_ee(ee_dy_ee(suuvv))
end function ee_JacobianZ_ee
| ee_Lapla_ee : | real(8), dimension(-lm:lm,-km:km) |
| ee : | real(8), dimension(-lm:lm,-km:km), intent(in) |
————— 微分計算 ——————
function ee_Lapla_ee(ee) ! スペクトルに作用する Laplacian 演算子
real(8), dimension(-lm:lm,-km:km) :: ee_Lapla_ee
real(8), dimension(-lm:lm,-km:km), intent(in) :: ee
integer k,l
do k=-km,km
do l=-lm,lm
ee_Lapla_ee(l,k) = -((2*pi*k/xl)**2+(2*pi*l/yl)**2)*ee(l,k)
enddo
enddo
end function ee_Lapla_ee
| 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 ee_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*2),ti(im*2))
allocate(yx_work(jm*im),ee_work((2*km+1)*(2*lm+1)),yx_work3(jm*im*3))
allocate(yx_tmp(0:jm-1,0:im-1),yx_tmp1(0:jm-1,0:im-1))
allocate(ee_tmp(-lm:lm,-km:km))
call n2init(jm,im,itj,tj,iti,ti)
allocate(x_X(0:im-1), x_X_Weight(0:im-1))
allocate(y_Y(0:jm-1), y_Y_Weight(0:jm-1))
allocate(yx_X(0:jm-1,0:im-1), yx_Y(0:jm-1,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-1
y_Y(jj) = ymin + yl/jm*jj
enddo
y_Y_Weight = yl/jm
yx_X = spread(x_X,1,jm)
yx_Y = spread(y_Y,2,im)
end subroutine ee_initial
| yx_ee : | real(8), dimension(0:jm-1,0:im-1) |
| ee : | real(8), dimension(-lm:lm,-km:km), intent(in) |
————— 基本変換 ——————
function yx_ee(ee) ! スペクトル -> 格子
real(8), dimension(0:jm-1,0:im-1) :: yx_ee
real(8), dimension(-lm:lm,-km:km), intent(in) :: ee
call n2s2ga(lm,km,jm,im,ee,yx_ee,yx_work,itj,tj,iti,ti)
end function yx_ee