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

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

ajout code NS3D

File size: 1.8 KB
Line 
1! Transformee de Fourier complexe-reelle multiple
2
3program tjmcsfftm
4
5  implicit none
6
7  integer, parameter :: m = 1
8  integer, parameter :: n = 8
9  complex, dimension(0:n/2,0:m-1) :: x, xx
10  real, dimension(0:n/2,0:m-1,2) :: rx
11  equivalence ( x, rx )
12  real, dimension(0:n-1,0:m-1) :: y
13
14  ! Pour stocker les cosinus et les sinus
15  integer, parameter :: ntable = 100+2*n
16  real, dimension(0:ntable-1) :: table
17
18  ! En fait, les routines jm n'ont besoin que de 2*n*m
19  integer, parameter :: nwork = (2*n+4)*m
20  real, dimension(0:nwork-1) :: work
21
22  integer :: isign
23  real :: scale
24  integer :: isys
25  integer :: i, j, k
26  real :: twopi
27  complex :: s
28
29  ! On prepare le tableau d'entree sans forcer a 0 les termes necessaires
30  call random_number( rx )
31  xx = x
32
33  scale = 1.
34  isys = 0
35
36  isign = 0
37  call csfftm(isign,n,m,scale,x,n/2+1,y,n,table,work,isys)
38  isign = 1
39  print *,'jmcsfftm ',n,m,isign,scale
40  call csfftm(isign,n,m,scale,x,n/2+1,y,n,table,work,isys)
41
42  ! On imprime le tableau de sortie
43  open(10,file='temp1',status='unknown',form='formatted')
44  write(10,'(e25.12)') y
45  close(10)
46
47  ! Ce qu'il faut trouver
48  open(11,file='temp2',status='unknown',form='formatted')
49  twopi = 2 * acos(real(-1))
50  ! On reprepare le tableau d'entree en forcant a 0 les termes necessaires
51  x = xx
52  x(0,:) = cmplx( real( x(0,:) ), 0 )
53  if ( mod( n, 2 ) == 0 ) x(n/2,:) = cmplx( real( x(n/2,:) ), 0 )
54  ! Et on calcule
55  do j = 0,m-1
56    do i = 0,n-1
57      s = 0
58      do k = 0,n/2
59        s = s+cmplx(cos(twopi*i*k/real(n)),isign*sin(twopi*i*k/real(n)))*x(k,j)
60      end do
61      do k = n/2+1,n-1
62        s = s+cmplx(cos(twopi*i*k/real(n)),isign*sin(twopi*i*k/real(n)))* &
63        & conjg(x(n-k,j))
64      end do
65      write(11,'(2e25.12)') real(s*scale)
66    end do
67  end do
68  close(11)
69
70end program tjmcsfftm
Note: See TracBrowser for help on using the repository browser.