1 SUBROUTINE boozer_coords(jrad)
12 INTEGER :: nparity, istat1, nv2_b, i1, nrep
13 INTEGER,
SAVE :: jsurf = 0
14 REAL(rprec) :: bmodv(4), bmodb(4), err(4), jacfac
15 REAL(rprec) :: u_b(4), v_b(4), piu, piv
16 REAL(rprec),
DIMENSION(:),
ALLOCATABLE ::
17 1 r1, z1, rodd, zodd, r12, z12, p1, q1, xjac,
18 1 lt, lz, lam, wt, wz, wp
19 REAL(rprec),
DIMENSION(:,:),
ALLOCATABLE ::
20 1 cosmm, sinmm, cosnn, sinnn
35 IF (jsurf .eq. 0)
THEN
40 CALL setup_booz (ntorsum, ns, mnmax, ohs, xmb, xnb,
41 1 sfull, scl, mboz, nboz, mnboz, nu2_b, nu_boz,
42 2 nv_boz, nfp, lasym_b)
56 CALL foranl (nu3_b, nv_boz, nfp, nunv, lasym_b)
58 IF (lscreen)
WRITE(6, 50) mboz-1, -nboz, nboz, nu_boz, nv_boz
59 50
FORMAT(
' 0 <= mboz <= ',i4,3x,i4,
' <= nboz <= ',i4,/,
60 1
' nu_boz = ',i5,
' nv_boz = ',i5,//,
61 1 13x,
'OUTBOARD (u=0)',14x,
'JS',10x,
'INBOARD (u=pi)'
62 2 /,77(
'-')/,
' v |B|vmec |B|booz Error',13x,
63 3
'|B|vmec |B|booz Error'/)
71 ALLOCATE (r12(nunv), z12(nunv), r1(nunv), rodd(nunv), z1(nunv),
72 1 zodd(nunv), lt(nunv), lz(nunv), p1(nunv), q1(nunv),
73 2 xjac(nunv), stat=istat1 )
74 IF (istat1 .ne. 0) stop
'Allocation error #1 in boozer_coords'
83 CALL transpmn (pmns, bsubumnc(1,jrad), bsubvmnc(1,jrad),
84 1 pmnc, bsubumns(1,jrad), bsubvmns(1,jrad),
85 2 xm_nyq, xn_nyq, gpsi, ipsi, mnmax_nyq, jrad,
94 ALLOCATE (lam(nunv), wt(nunv), wz(nunv), wp(nunv), stat=istat1)
95 IF (istat1 .ne. 0) stop
'Allocation error #2 in boozer_coords'
101 CALL vcoords_rz (rmnc, zmns, lmns, rmns, zmnc, lmnc, xm, xn,
102 1 ntorsum, ns, jrad, mnmax, r1, z1, lt, lz, lam, sfull,
103 2 nparity, nunv, nfp, lasym_b)
106 CALL vcoords_rz (rmnc, zmns, lmns, rmns, zmnc, lmnc, xm, xn,
107 1 ntorsum, ns, jrad, mnmax, rodd, zodd, lt, lz, lam, sfull,
108 2 nparity, nunv, nfp, lasym_b)
112 CALL vcoords_w (bmodmnc(1,jrad), bmodmns(1,jrad), pmns, pmnc,
113 1 xm_nyq, xn_nyq, jrad, mnmax_nyq, bmod_b, wt,
114 2 wz, wp, nunv, nfp, lasym_b)
120 CALL harfun (jacfac, hiota, gpsi, ipsi, jrad, nunv,
121 1 lt, lz, lam, wt, wz, wp, p1, q1, xjac)
122 DEALLOCATE (lam, wt, wz, wp, stat=istat1)
123 IF (istat1 .ne. 0) stop
'Deallocation error in boozer_coords'
129 CALL booz_rzhalf(r1, z1, rodd, zodd, r12, z12, ohs,
135 bmodv(1) = bmod_b(1,1)
136 bmodv(2) = bmod_b(1,nu2_b)
137 bmodv(3) = bmod_b(nv2_b,1)
138 bmodv(4) = bmod_b(nv2_b,nu2_b)
140 DEALLOCATE (r1, rodd, z1, zodd, lt, lz, stat=istat1)
141 IF (istat1 .ne. 0) stop
'Deallocation error in boozer_coords'
146 ALLOCATE (cosmm(nunv,0:mboz), sinmm(nunv,0:mboz),
147 1 cosnn(nunv,0:nboz), sinnn(nunv,0:nboz), stat=istat1)
148 IF (istat1 .ne. 0) stop
'Deallocation error in boozer_coords'
151 CALL boozer (thgrd, ztgrd, bmod_b, r12, z12, xmb, xnb,
152 1 bmncb(1,jsurf), rmncb(1,jsurf), zmnsb(1,jsurf),
153 2 pmnsb(1,jsurf), gmncb(1,jsurf), bmnsb(1,jsurf),
154 3 rmnsb(1,jsurf), zmncb(1,jsurf), pmncb(1,jsurf),
155 4 gmnsb(1,jsurf), scl, p1, q1, xjac,
156 5 cosmm, sinmm, cosnn, sinnn, mnboz, nunv, mboz, nboz,
157 6 nfp, nu2_b, nv_boz, jacfac, jrad)
163 u_b(1) = p1(1); v_b(1) = q1(1)
164 u_b(3) = p1(nv2_b); v_b(3) = piv+q1(nv2_b)
165 i1 = 1+nv_boz*(nu2_b-1)
167 u_b(2) = piu+p1(i1); v_b(2) = q1(i1)
168 i1 = nv2_b+nv_boz*(nu2_b-1)
169 u_b(4) = piu+p1(i1); v_b(4) = piv+q1(i1)
171 DEALLOCATE (p1, q1, xjac, stat=istat1)
172 IF (istat1 .ne. 0) stop
'Deallocation error in boozer_coords'
178 CALL modbooz(bmncb(1,jsurf), bmnsb(1,jsurf),
179 1 bmodb, xmb, xnb, u_b, v_b, cosmm, sinmm, cosnn, sinnn,
180 2 mnboz, mboz, nboz, nfp, lasym_b)
182 err = abs(bmodb - bmodv)/max(bmodb,bmodv)
183 IF (lscreen)
WRITE(6,100)
184 1 bmodv(1),bmodb(1),err(1),jrad,bmodv(2),bmodb(2),err(2),
185 2 bmodv(3),bmodb(3),err(3),bmodv(4),bmodb(4),err(4)
186 100
FORMAT(
' 0 ',1p,3e11.3,i5,2x,3e11.3,/
' pi ',2(3e11.3,7x) )
189 ALLOCATE (r1(nunv), rodd(nunv), z1(nunv), zodd(nunv),
191 IF (istat1 .ne. 0) stop
'Allocation error #3 in boozer_coords'
193 CALL vcoords_rzb (rmncb, zmnsb, rmnsb, zmncb, xmb, xnb,
194 1 cosmm, sinmm, cosnn, sinnn, mboz, nboz,
195 2 mnboz, jsurf, ns, r1, z1, nunv, nfp, lasym_b)
198 CALL booz_rzhalf(r1, z1, rodd, zodd, r12, z12, ohs,
201 DEALLOCATE (cosmm, sinmm, cosnn, sinnn,
202 1 r1, rodd, z1, zodd, r12, z12, stat=istat1)
203 IF (istat1 .ne. 0) stop
'Deallocation error in boozer_coords'
205 END SUBROUTINE boozer_coords