V3FIT
fftrig.f90
1  SUBROUTINE fftrig_g (trigs, n, mode)
2  USE stel_kinds
3  IMPLICIT NONE
4 !-----------------------------------------------
5 ! D u m m y A r g u m e n t s
6 !-----------------------------------------------
7  INTEGER n, mode
8  REAL(rprec), DIMENSION(*) :: trigs
9 #if !defined(CRAY) || defined(LONESTAR) || defined(MCURIE)
10 !-----------------------------------------------
11 ! L o c a l P a r a m e t e r s
12 !-----------------------------------------------
13  REAL(rprec), PARAMETER :: one = 1, two = 2, p5 = 0.5_dp
14 !-----------------------------------------------
15 ! L o c a l V a r i a b l e s
16 !-----------------------------------------------
17  INTEGER :: imode, nn, l, i, nh, la
18  REAL(rprec) :: pi, del, angle
19 !-----------------------------------------------
20  pi=two*asin(one)
21  imode=iabs(mode)
22  nn=n
23  IF (imode.gt.1.and.imode.lt.6) nn=n/2
24  del=(pi+pi)/nn
25  l=nn+nn
26  DO 10 i=1,l,2
27  angle=(p5*del)*(i-1)
28  trigs(i)=cos(angle)
29  trigs(i+1)=sin(angle)
30  10 CONTINUE
31  IF (imode.eq.1) RETURN
32  IF (imode.eq.8) RETURN
33  del=del/2
34  nh=(nn+1)/2
35  l=nh+nh
36  la=nn+nn
37  DO 20 i=1,l,2
38  angle=(i-1)*(del/2)
39  trigs(la+i)=cos(angle)
40  trigs(la+i+1)=sin(angle)
41  20 CONTINUE
42  IF (imode.le.3) RETURN
43  del=del/2
44  la=la+nn
45  IF (mode.eq.5) GOTO 40
46  DO 30 i=2,nn
47  angle=(i-1)*del
48  trigs(la+i)=two*sin(angle)
49  30 CONTINUE
50  RETURN
51  40 CONTINUE
52  del=del/2
53  DO 50 i=2,n
54  angle = (i-1)*del
55  trigs(la+i)=sin(angle)
56  50 CONTINUE
57 #else
58  CALL fftrig (trigs, n, mode)
59 #endif
60  END SUBROUTINE fftrig_g