1 SUBROUTINE boozer(thgrd, ztgrd, bmod, rad, zee, xmb, xnb,
2 1 bmncb, rmncb, zmnsb, pmnsb, gmncb,
3 2 bmnsb, rmnsb, zmncb, pmncb, gmnsb,
4 3 scl, uboz, vboz, xjac,
5 4 cosmm, sinmm, cosnn, sinnn, mnmax, nznt, mboz, nboz, nfp,
12 USE booz_params,
ONLY: lasym_b, lrfp_b, hiota
17 INTEGER :: mnmax, nznt, mboz, nboz, nfp, nu2, nv
18 REAL(rprec),
DIMENSION(nznt),
INTENT(in) ::
19 1 thgrd, ztgrd, bmod, rad, zee, uboz, vboz, xjac
20 REAL(rprec),
DIMENSION(mnmax),
INTENT(in) ::
22 REAL(rprec),
DIMENSION(nznt,0:mboz),
INTENT(out) ::
24 REAL(rprec),
DIMENSION(nznt,0:nboz),
INTENT(out) ::
26 REAL(rprec),
DIMENSION(mnmax),
INTENT(out) ::
27 1 bmncb, rmncb, zmnsb, pmnsb, gmncb
28 REAL(rprec),
DIMENSION(mnmax),
INTENT(out) ::
29 1 bmnsb, rmnsb, zmncb, pmncb, gmnsb
30 REAL(rprec),
INTENT(in) :: jacfac
36 REAL(rprec),
PARAMETER :: one=1, zero=0, p5=0.5_dp
40 INTEGER :: mn, m, n, imax, i
41 REAL(rprec),
ALLOCATABLE,
DIMENSION(:) :: cost, sint, uang,
49 ALLOCATE (cost(nznt), sint(nznt), uang(nznt),
50 1 vang(nznt), bbjac(nznt), stat=i)
51 IF (i .ne. 0) stop
'Allocation error in boozer!'
55 CALL trigfunc (uang, vang, cosmm, sinmm, cosnn, sinnn,
58 IF (.not.lasym_b)
THEN
63 cosmm(1:nv,m) = p5*cosmm(1:nv,m)
64 cosmm(i:imax,m) = p5*cosmm(i:imax,m)
65 sinmm(1:nv,m) = p5*sinmm(1:nv,m)
66 sinmm(i:imax,m) = p5*sinmm(i:imax,m)
73 bbjac = jacfac/(bmod*bmod)
78 bbjac = bbjac/hiota(js)
83 n = nint(abs(xnb(mn)))/nfp
84 sgn = sign(one,xnb(mn))
85 cost = (cosmm(:,m)*cosnn(:,n)
86 1 + sinmm(:,m)*sinnn(:,n)*sgn)*xjac
87 sint = (sinmm(:,m)*cosnn(:,n)
88 1 - cosmm(:,m)*sinnn(:,n)*sgn)*xjac
90 bmncb(mn) = dot_product(bmod,cost)
91 rmncb(mn) = dot_product(rad, cost)
92 zmnsb(mn) = dot_product(zee, sint)
93 pmnsb(mn) =-dot_product(vboz,sint)
94 gmncb(mn) = dot_product(bbjac, cost)
96 IF (.not.lasym_b) cycle
98 bmnsb(mn) = dot_product(bmod,sint)
99 rmnsb(mn) = dot_product(rad ,sint)
100 zmncb(mn) = dot_product(zee, cost)
101 pmncb(mn) =-dot_product(vboz,cost)
102 gmnsb(mn) = dot_product(bbjac, sint)
106 DEALLOCATE (cost, sint, uang, vang, bbjac, stat=i)
114 IF (.not.lasym_b)
RETURN
122 END SUBROUTINE boozer