Guest User

Untitled

a guest
Aug 29th, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. PROGRAM fourier
  2.  
  3.   implicit none
  4.  
  5.   INTEGER, PARAMETER ::  n  = 20
  6.   INTEGER, PARAMETER ::  a1 = 8
  7.   INTEGER, PARAMETER ::  a2 = 5
  8.   INTEGER, PARAMETER ::  b1 = 4
  9.   INTEGER, PARAMETER ::  b2 = 2
  10.  
  11.   double precision :: pi= acos(-1.d0)
  12.  
  13.   complex(kind=4),  DIMENSION(n+1) :: usmall
  14.   COMPLEX(kind=4),  dimension(n+1) :: ubig, uinverse
  15.  
  16.   integer, parameter :: isign01 = 1
  17.   integer, parameter :: isign02 = -1
  18.   integer     :: k
  19.  
  20.  
  21.  WRITE(6,*) 'This is fourier_Program'
  22.      
  23.  !discrete function (1)
  24.  DO k=0,n-1
  25.    usmall(k)=cmplx(a1*cos((pi*2*b1*(k))/n)+a2*sin(2*pi*b2*(k)/n), 0)
  26.  end do
  27.  
  28.     !aufgabe a/c
  29.  call slowfourier(usmall, isign01, ubig)
  30.  
  31.   write(*,*)
  32.   write(*,*)
  33.   write(*,*) "Now inverse Transform"
  34.   write(*,*)
  35.  
  36.  !exercise d
  37.  call slowfourier(ubig/n, isign02, uinverse)
  38.  
  39.  
  40.  WRITE(6,*) 'fourier_Program: DONE.'
  41.  
  42.  
  43. END PROGRAM
  44.  
  45.  
  46.  
  47. subroutine slowfourier(usub, isign, blubb)
  48.   IMPLICIT NONE
  49.  
  50.   INTEGER, PARAMETER ::  n1 = 20
  51.   double precision :: pi= acos(-1.d0)
  52.  
  53.   INTEGER :: ncid
  54.  
  55.   INTEGER :: nstep1, k1
  56.   integer, intent(in):: isign
  57.   complex(kind=4),  DIMENSION(n1+1), intent(in) :: usub
  58.   complex(kind=4) :: ufct
  59.   complex(kind=4), dimension(n1+1) :: blubb
  60.   !complex(kind=4) :: ni = cmplx(n,n)
  61.  
  62.  
  63.  
  64.  
  65.  
  66.     do nstep1=1,n1
  67.  
  68.     ufct = cmplx(0,0)
  69.  
  70.     do k1=0, n1-1
  71.       ufct=ufct+ usub(k1)*cmplx(cos(isign*2*pi*k1*(nstep1)/n1), sin(isign*2*pi*k1*(nstep1)/n1))
  72.     end do
  73.  
  74.     !need this for inverse
  75.     blubb(nstep1)= ufct
  76.    
  77.    ! write output
  78.     write(*,*) "n=", nstep1
  79.     write(*,*) "ufct=(Re,Im)= ", ufct
  80.     write(*,FMT="(A15,2(F8.5))") "ufct/N= ", ufct/n1
  81.    
  82.    end do
  83.  
  84.  
  85. end subroutine
Add Comment
Please, Sign In to add comment