source: trunk/NS3D_JMC/JMFFT-8.0/test/tjmscfft3d.f90 @ 12

Last change on this file since 12 was 12, checked in by xlvlod, 17 years ago

ajout code NS3D

File size: 2.0 KB
Line 
1! Transformee de Fourier reelle-complexe 3d
2
3program tjmscfft3d
4
5  implicit none
6
7  integer, parameter :: n = 8
8  integer, parameter :: m = 16
9  integer, parameter :: l = 4
10  real, dimension(0:n-1,0:m-1,0:l-1) :: x, xx
11  complex, dimension(0:n/2,0:m-1,0:l-1) :: y
12
13  integer, parameter :: ntable = 100+2*(n+m+l)
14  real, dimension(0:ntable-1) :: table
15
16  ! Les routines jm ont besoin de 2*2*(n/2+1)*m*l. D'ou tronconnage.
17  integer, parameter :: nwork = 512*max(n,m,l)
18  real, dimension(0:nwork-1) :: work
19
20  integer :: isign
21  real :: scale
22  integer :: isys
23  integer :: i, j, k
24  integer :: iz, j1, k1
25  real :: twopi
26  complex :: s
27
28  twopi = 2 * acos(real(-1))
29
30  ! On prepare le tableau d'entree
31  call random_number( x )
32  xx = x
33
34  isys = 0
35  scale = 1./real(n)
36
37  isign = 0
38  call scfft3d(isign,n,m,l,scale,x,n,m,y,n/2+1,m,table,work,isys)
39  isign = 1
40  print *,'jmscfft3d ',n,m,l,isign,scale
41  call scfft3d(isign,n,m,l,scale,x,n,m,y,n/2+1,m,table,work,isys)
42
43  ! On imprime le tableau de sortie
44  open(10,file='temp1',status='unknown',form='formatted')
45  write(10,'(2e25.12)') y
46
47  ! Ce qu'il faut trouver
48  open(11,file='temp2',status='unknown',form='formatted')
49  ! On reprepare le tableau d'entree
50  x = xx
51  ! Et on calcule
52  do k = 0,l-1
53    do j = 0,m-1
54      do i = 0,n/2
55        s = 0
56        do k1 = 0,l-1
57          do j1 = 0,m-1
58            do iz = 0,n-1
59               s = s + cmplx( &
60               &               cos(twopi*i*iz/real(n)), &
61               &         isign*sin(twopi*i*iz/real(n))) &
62               &   *   cmplx( &
63               &               cos(twopi*j*j1/real(m)), &
64               &         isign*sin(twopi*j*j1/real(m))) &
65               &   *   cmplx( &
66               &               cos(twopi*k*k1/real(l)), &
67               &         isign*sin(twopi*k*k1/real(l))) &
68               &   * x(iz,j1,k1)
69            end do
70          end do
71        end do
72        write(11,'(2e25.12)') s*scale
73      end do
74    end do
75  end do
76
77end program tjmscfft3d
Note: See TracBrowser for help on using the repository browser.