V3FIT
All Classes Namespaces Files Functions Variables Enumerations Macros Pages
magnetic_fluxes.f
1  FUNCTION torflux_deriv (x)
2  USE stel_kinds
3  USE vmec_main, ONLY: zero
4  USE vmec_input, ONLY: lrfp, tf => aphi
5 C-----------------------------------------------
6 C D u m m y A r g u m e n t s
7 C-----------------------------------------------
8  REAL(rprec), INTENT(IN) :: x
9  REAL(rprec) :: torflux_deriv
10  REAL(rprec), EXTERNAL :: polflux_deriv, piota
11  INTEGER :: i
12 C-----------------------------------------------
13 ! x: radial flux variable (=TOROIDAL FLUX ONLY IF APHI=1)
14 
15  IF (lrfp) THEN
16 ! RFP/TOKAMAK
17  IF (piota(x) .eq. zero) stop 'piota(x) = 0!'
18  torflux_deriv = polflux_deriv(x)/piota(x)
19 
20  ELSE
21 ! TOKAMAK/STELLARATOR (default is tf(1) = 1)
22  torflux_deriv = 0
23  DO i = ubound(tf,1), lbound(tf,1), -1
24  torflux_deriv = x*torflux_deriv + i*tf(i)
25  END DO
26 ! torflux_deriv = 1
27  END IF
28 
29  END FUNCTION torflux_deriv
30 
31  FUNCTION polflux_deriv (x)
32  USE stel_kinds
33  USE vmec_input, ONLY: lrfp
34 C-----------------------------------------------
35 C D u m m y A r g u m e n t s
36 C-----------------------------------------------
37  REAL(rprec), INTENT(IN) :: x
38  REAL(rprec) :: tf, polflux_deriv
39  REAL(rprec), EXTERNAL :: torflux, torflux_deriv, piota
40 C-----------------------------------------------
41 ! x: radial flux variable (=TOROIDAL FLUX ONLY IF APHI=1)
42 ! polflux_deriv == d(chi)/dx = iota(TF(x)) * torflux_deriv(x)
43 
44  IF (lrfp) THEN
45 ! RFP/TOKAMAK
46  polflux_deriv = 1
47 
48  ELSE
49 ! TOKAMAK/STELLARATOR: dchi/ds = iota * dphi/ds
50 ! piota is assumed to be a function of the TF(x) on input
51  tf = torflux(x)
52  tf = min(tf, 1.0_dp)
53  polflux_deriv = piota(tf)*torflux_deriv(x)
54 ! polflux_deriv = piota(x)*torflux_deriv(x)
55  END IF
56 
57  END FUNCTION polflux_deriv
58 
59  FUNCTION torflux (x)
60  USE stel_kinds
61 C-----------------------------------------------
62 C D u m m y A r g u m e n t s
63 C-----------------------------------------------
64  REAL(rprec), INTENT(IN) :: x
65  REAL(rprec) :: torflux, h, xi
66  REAL(rprec), EXTERNAL :: torflux_deriv
67  INTEGER :: i
68 C-----------------------------------------------
69 ! x: radial flux variable (=TOROIDAL FLUX ONLY IF APHI=1)
70  h = 1.e-2_dp*x
71  torflux = 0
72  DO i=1,101
73  xi = (i-1)*h
74  torflux = torflux + torflux_deriv(xi)
75  END DO
76  torflux = torflux-0.5_dp*(torflux_deriv(0._dp)+torflux_deriv(x))
77  torflux = h*torflux
78 
79  END FUNCTION torflux
80 
81  FUNCTION polflux (x)
82  USE stel_kinds
83 ! USE vmec_input, ONLY: af => achi
84 C-----------------------------------------------
85 C D u m m y A r g u m e n t s
86 C-----------------------------------------------
87  REAL(rprec), INTENT(IN) :: x
88  REAL(rprec) :: polflux, h, xi
89  REAL(rprec), EXTERNAL :: polflux_deriv
90  INTEGER :: i
91 C-----------------------------------------------
92  h = 1.e-2_dp*x
93  polflux = 0
94  DO i=1,101
95  xi = (i-1)*h
96  polflux = polflux + polflux_deriv(xi)
97  END DO
98  polflux = polflux-0.5_dp*(polflux_deriv(0._dp)+polflux_deriv(x))
99  polflux = h*polflux
100 
101  END FUNCTION polflux
102 
103 ! function piota moved to a separate file, piota.f. J Hanson, 2010-03-16