-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcofdxdy.f90
executable file
·75 lines (65 loc) · 2.35 KB
/
cofdxdy.f90
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
subroutine cofdxdy (fk, fk_dxdy)
!---------------------------------------------------------------
! Calculation of d/dx in the Fourier-space ==> -kx^2
! for the first index
! Scaling included
! Ck = Ak + i Bk with Ak= Fk(2k,l) and Bk= Fk(2k+1,l)
! for k=0, KX-1 and all l=0,NY-1
!---------------------------------------------------------------
use share_vars
implicit none
integer kx, kx_max, ky, ky_max
real (kind=pr), dimension (0:nx-1, 0:ny-1), intent (in) :: fk
real (kind=pr), dimension (0:nx-1, 0:ny-1), intent (out) :: fk_dxdy
real (kind=pr) :: fac, scale
scale = (2.0*pi/xl) * (2.0*pi/yl)
kx_max = (nx/2-1)
ky_max = (ny/2-1)
!$omp parallel do private(kx,ky)
do ky = 0, ky_max
do kx = 0, kx_max
fac = - real(kx) * real (ky) * scale
fk_dxdy (2*kx, 2*ky) = fac * fk (2*kx+1, 2*ky+1)
fk_dxdy (2*kx+1, 2*ky) = - fac * fk (2*kx, 2*ky+1)
fk_dxdy (2*kx, 2*ky+1) = - fac * fk (2*kx+1, 2*ky)
fk_dxdy (2*kx+1, 2*ky+1) = fac * fk (2*kx, 2*ky)
end do
end do
!$omp end parallel do
end subroutine
!subroutine cofdxdy_big (fk, fk_dxdy)
!!---------------------------------------------------------------
!! Calculation of d/dx in the Fourier-space ==> -kx^2
!! for the first index
!! Scaling included
!! Ck = Ak + i Bk with Ak= Fk(2k,l) and Bk= Fk(2k+1,l)
!! for k=0, KX-1 and all l=0,NY-1
!!---------------------------------------------------------------
! use share_vars
! implicit none
! integer kx, kx_max, ky, ky_max,nx_tmp,ny_tmp
! real (kind=pr), dimension (0:up*nxs-1, 0:up*nys-1), intent (in) :: fk
! real (kind=pr), dimension (0:up*nxs-1, 0:up*nys-1), intent (out) :: fk_dxdy
! real (kind=pr) :: fac, scale
! scale = (2.0*pi/xl) * (2.0*pi/yl)
! ! LAZY!
! nx_tmp = nx
! ny_tmp = ny
! nx=up*nxs
! ny=up*nys
! kx_max = (nx/2-1)
! ky_max = (ny/2-1)
! !$omp parallel do private(kx,ky)
! do ky = 0, ky_max
! do kx = 0, kx_max
! fac = - real(kx) * real (ky) * scale
! fk_dxdy (2*kx, 2*ky) = fac * fk (2*kx+1, 2*ky+1)
! fk_dxdy (2*kx+1, 2*ky) = - fac * fk (2*kx, 2*ky+1)
! fk_dxdy (2*kx, 2*ky+1) = - fac * fk (2*kx+1, 2*ky)
! fk_dxdy (2*kx+1, 2*ky+1) = fac * fk (2*kx, 2*ky)
! end do
! end do
! !$omp end parallel do
! nx=nx_tmp
! ny=ny_tmp
!end subroutine