V3FIT
fsym_fft.f
1  SUBROUTINE fext_fft (bout, bs_s, bs_a)
2  USE vmec_main
3  IMPLICIT NONE
4 C-----------------------------------------------
5 C D u m m y A r g u m e n t s
6 C-----------------------------------------------
7  REAL(rprec), DIMENSION(nzeta,ntheta3), INTENT(out) :: bout
8  REAL(rprec), DIMENSION(nzeta,ntheta2), INTENT(in) :: bs_s, bs_a
9 C-----------------------------------------------
10 C L o c a l V a r i a b l e s
11 C-----------------------------------------------
12  INTEGER :: ir, i, kz, kzr
13 C-----------------------------------------------
14 !
15 ! Extends bs from ntheta2 interval to full ntheta3 interval in angle u
16 ! bs_s ~ cos(mu-nv) (symmetric); bs_a ~ sin(mu-nv) (anti-symmetric)
17 ! ntheta2 = pi
18 !
19  bout(:,1:ntheta2) = bs_s(:,1:ntheta2) + bs_a(:,1:ntheta2)
20  DO i = 1+ntheta2, ntheta3
21  ir = ntheta1+2-i !-theta
22  DO kz= 1, nzeta
23 ! kzr = ireflect(kz*ns)/ns !-zeta
24  kzr = nzeta+2-kz
25  IF (kz .eq. 1) kzr = 1
26  bout(kz,i) = bs_s(kzr,ir) - bs_a(kzr,ir)
27  END DO
28  END DO
29 
30  END SUBROUTINE fext_fft
31 
32 
33  SUBROUTINE fsym_fft (bs, bu, bv, bs_s, bu_s, bv_s,
34  1 bs_a, bu_a, bv_a)
35  USE vmec_main
36  IMPLICIT NONE
37 C-----------------------------------------------
38 C D u m m y A r g u m e n t s
39 C-----------------------------------------------
40  REAL(rprec), DIMENSION(nzeta,ntheta3), INTENT(in) :: bs
41  REAL(rprec), DIMENSION(nzeta,ntheta3,0:1), INTENT(in) :: bu, bv
42  REAL(rprec), DIMENSION(nzeta,ntheta2,0:1), INTENT(out) ::
43  1 bu_s, bv_s, bu_a, bv_a
44  REAL(rprec), DIMENSION(nzeta,ntheta2) :: bs_s, bs_a
45 C-----------------------------------------------
46 C L o c a l V a r i a b l e s
47 C-----------------------------------------------
48  INTEGER :: ir, i, kz, kzr
49 C-----------------------------------------------
50 ! CONTRACTS bs,bu,bv FROM FULL nu INTERVAL TO HALF-U INTERVAL
51 ! SO COS,SIN INTEGRALS CAN BE PERFORMED ON HALF-U INTERVAL
52 !
53 ! bs_s(v,u) = .5*( bs(v,u) - bs(-v,-u) ) ! * SIN(mu - nv)
54 ! bs_a(v,u) = .5*( bs(v,u) + bs(-v,-u) ) ! * COS(mu - nv)
55 !
56 ! bu, bv have opposite parity
57 !
58  DO i = 1, ntheta2
59  ir = ntheta1+2-i !-theta
60  IF (i == 1) ir = 1
61  DO kz = 1, nzeta
62 ! kzr = ireflect(ns*kz)/ns !-zeta
63  kzr = nzeta+2-kz
64  IF (kz .eq. 1) kzr = 1
65  bs_a(kz,i) = cp5*(bs(kz,i)+bs(kzr,ir))
66  bs_s(kz,i) = cp5*(bs(kz,i)-bs(kzr,ir))
67  bu_a(kz,i,:) = cp5*(bu(kz,i,:)-bu(kzr,ir,:))
68  bu_s(kz,i,:) = cp5*(bu(kz,i,:)+bu(kzr,ir,:))
69  bv_a(kz,i,:) = cp5*(bv(kz,i,:)-bv(kzr,ir,:))
70  bv_s(kz,i,:) = cp5*(bv(kz,i,:)+bv(kzr,ir,:))
71  END DO
72  END DO
73 
74  END SUBROUTINE fsym_fft