1 MODULE angle_constraints
2 USE vmec_main,
ONLY: ns, mpol, ntor, dp, mpol1, lthreed, lasym
3 USE vmec_params,
ONLY: signgs, ntmax, rcc, rss, zsc, zcs, rsc, rcs, zss, zcc
4 USE precon2d,
ONLY: ictrl_prec2d
6 INTEGER,
PARAMETER :: pexp=4, m0=0, m1=1, m2=2, m3=3
7 LOGICAL,
PARAMETER :: lorigin=.false.
8 INTEGER :: mrho, m, istat
9 REAL(dp),
PARAMETER :: p5=0.5_dp, zero=0
10 REAL(dp),
ALLOCATABLE :: t1m(:), t2m(:), cos_HB(:), sin_HB(:)
11 REAL(dp),
ALLOCATABLE :: rz_array0(:,:,:), xtempa(:)
12 REAL(dp),
DIMENSION(:,:),
ALLOCATABLE :: arhod, arhom, brhod, brhom
14 brd2, brm2, bzd2, bzm2, brhod2, brhom2
15 REAL(dp),
DIMENSION(:),
ALLOCATABLE :: crhod, sin2u, cos2u, sfact
21 SUBROUTINE init_multipliers
27 IF (
ALLOCATED(t1m))
RETURN
34 ALLOCATE(t1m(0:mpol), t2m(0:mpol), cos_hb(0:mpol1), sin_hb(0:mpol1
35 IF (istat .NE. 0) stop
'Allocation error in init_multipliers!'
40 t1m(m0) = 0; t2m(m0) = 0
60 cos_hb(m0) = 1; sin_hb(m0) = 0
63 dnorm = sqrt(t1m(m+1)**2 + t2m(m-1)**2)
64 IF (dnorm .EQ. zero) cycle
65 cos_hb(m) = t1m(m+1)/dnorm
66 sin_hb(m) = t2m(m-1)/dnorm
69 IF (mrho .NE. mpol1)
THEN
70 cos_hb(mpol1) = 0; sin_hb(mpol1) = 1
76 END SUBROUTINE init_multipliers
78 SUBROUTINE free_multipliers
79 IF (
ALLOCATED(t1m))
DEALLOCATE (t1m, t2m, cos_hb, sin_hb)
80 IF (
ALLOCATED(rz_array0))
DEALLOCATE (rz_array0)
81 IF (
ALLOCATED(xtempa))
DEALLOCATE (xtempa)
82 IF (
ALLOCATED(arhod))
DEALLOCATE(arhod, arhom, brhod, brhom, crhod
83 ard2, arm2, azd2, azm2, arhod2, arhom2
84 brd2, brm2, bzd2, bzm2, brhod2, brhom2
85 IF (
ALLOCATED(cos2u))
DEALLOCATE(cos2u, sin2u)
86 IF (
ALLOCATED(sfact))
DEALLOCATE(sfact)
88 END SUBROUTINE free_multipliers
90 SUBROUTINE store_init_array(rzl_array)
91 USE vmec_main,
ONLY: neqs2, nznt, nzeta, cosmui, sinmui, cosmu, sinmu, &
92 nzeta, ntheta2, ntheta3, hs
93 REAL(dp),
DIMENSION(ns*(1+ntor),0:mpol1,3*ntmax),
INTENT(inout) ::
94 INTEGER :: nsp1, l, js
96 IF (
ALLOCATED(rz_array0))
DEALLOCATE (rz_array0)
97 ALLOCATE(rz_array0(ns*(1+ntor),0:mpol1,2*ntmax))
98 rz_array0 = rzl_array(:,:,1:2*ntmax)
99 rzl_array(:,:,1:2*ntmax) = 0
101 CALL init_multipliers
102 CALL get_rep_mismatch(rz_array0, rzl_array)
104 IF (
ALLOCATED(xtempa))
DEALLOCATE (xtempa)
105 ALLOCATE (xtempa(neqs2))
108 IF (
ALLOCATED(arhod))
DEALLOCATE(arhod, arhom, brhod, brhom, crhod
109 ard2, arm2, azd2, azm2, arhod2, arhom2
110 brd2, brm2, bzd2, bzm2, brhod2, brhom2
111 ALLOCATE(arhod(nsp1,2),arhom(nsp1,2),brhod(nsp1,2),brhom(nsp1,2),
112 ard2(nsp1,2), arm2(nsp1,2), arhod2(nsp1,2), arhom2(nsp1,2
113 azd2(nsp1,2), azm2(nsp1,2),
114 brd2(nsp1,2), brm2(nsp1,2), brhod2(nsp1,2), brhom2(nsp1,2
115 bzd2(nsp1,2), bzm2(nsp1,2), crhod(nsp1))
116 IF (
ALLOCATED(cos2u))
DEALLOCATE(cos2u, sin2u)
117 ALLOCATE (cos2u(nznt), sin2u(nznt))
119 cos2u(l:nznt:nzeta) = cosmui(:,m2)
120 sin2u(l:nznt:nzeta) = sinmui(:,m2)
123 IF (
ALLOCATED(sfact))
DEALLOCATE(sfact)
126 sfact(js) = hs*(js-1)
129 END SUBROUTINE store_init_array
131 SUBROUTINE getrz (rz_array)
135 REAL(dp),
DIMENSION(ns*(1+ntor),0:mpol1,2*ntmax),
INTENT(inout) ::
136 REAL(dp),
DIMENSION(:,:),
ALLOCATABLE :: rhocc, rhoss, rhocs, rhosc
137 REAL(dp),
DIMENSION(:),
ALLOCATABLE :: r0c, r0s, z0c, z0s
138 INTEGER :: nsnt, mrho1, istat
160 rz_array(2:nsnt:ns,m2,1:ntmax) = sqp5*rz_array(3:nsnt:ns,m2,1:ntmax
161 IF (mpol1 .GE. m3)
THEN
162 rz_array(2:nsnt:ns,m1:m3:2,1:ntmax) = p5*rz_array(3:nsnt:ns,m1
163 rz_array(2:nsnt:ns,m3+1:,1:ntmax) = 0
167 ALLOCATE (rhocc(nsnt,0:mpol1+1), rhoss(nsnt,0:mpol1+1),
168 r0c(nsnt), z0s(nsnt),stat=istat)
169 IF (istat .NE. 0) stop
'Allocation Error #1 in GETRZ'
170 rhocc(:,0:mrho) = rz_array(:,0:mrho,rcc)
171 r0c = rz_array(:,m0,zsc+ntmax)
172 rhocc(:,mrho1) = 0; rhocc(:,mpol1+1) = 0
175 rhoss(:,1:mrho) = rz_array(:,1:mrho,rss)
177 rhoss(:,mrho1) = 0; rhoss(:,0) = 0
178 z0s = rz_array(:,m0,zcs+ntmax)
181 modes:
DO m = 0, mpol1
183 rz_array(:,m0,rcc) = r0c + t2m(m0)*rhocc(:,m1)
184 rz_array(:,m0,zsc+ntmax) = 0
186 rz_array(:,m0,zcs+ntmax) = z0s - t2m(m0)*rhoss(:,m1)*signgs
187 rz_array(:,m0,rss) = 0
190 rz_array(:,m,rcc) = (t1m(m)*rhocc(:,m-1) + t2m(m)*rhocc(:
191 rz_array(:,m,zsc+ntmax) =-(t1m(m)*rhocc(:,m-1) - t2m(m)*rhocc(:
193 rz_array(:,m,rss) = (t1m(m)*rhoss(:,m-1) + t2m(m)*rhoss
194 rz_array(:,m,zcs+ntmax) = (t1m(m)*rhoss(:,m-1) - t2m(m)*rhoss
199 DEALLOCATE (rhocc, rhoss, r0c, z0s)
201 IF (.NOT.lasym)
GOTO 1002
203 ALLOCATE (rhosc(nsnt,0:mrho1), rhocs(nsnt,0:mrho1),
204 r0s(nsnt), z0c(nsnt), stat=istat)
205 IF (istat .NE. 0) stop
'Allocation Error #2 in GETRZ'
207 rhosc(:,0:mrho) = rz_array(:,0:mrho,rsc)
209 z0c = rz_array(:,m0,zcc+ntmax)
211 rhocs(:,0:mrho) = rz_array(:,0:mrho,rcs)
212 rhocs(:,mrho1) = 0; rhocs(:,0) = 0
213 r0s = rz_array(:,m0,zss+ntmax)
216 modea:
DO m = 0, mpol1
218 rz_array(:,m0,zcc+ntmax) = z0c - t2m(m0)*rhosc(:,m1)*signgs
219 rz_array(:,m0,rsc) = 0
221 rz_array(:,m0,rcs) = r0s + t2m(m0)*rhocs(:,m1)
222 rz_array(:,m0,zss+ntmax) = 0
225 rz_array(:,m,rsc) = (t1m(m)*rhosc(:,m-1) + t2m(m)*rhosc(:
226 rz_array(:,m,zcc+ntmax) = (t1m(m)*rhosc(:,m-1) - t2m(m)*rhosc(:
228 rz_array(:,m,rcs) = (t1m(m)*rhocs(:,m-1) + t2m(m)*rhocs
229 rz_array(:,m,zss+ntmax) =-(t1m(m)*rhocs(:,m-1) - t2m(m)*rhocs
234 DEALLOCATE (rhosc, rhocs, r0s, z0c)
239 IF (ictrl_prec2d .NE. 3) rz_array = rz_array + rz_array0
243 SUBROUTINE getfrho (frho_array)
244 USE vmec_main,
ONLY: iter2, fnorm, hs
245 REAL(dp),
DIMENSION(ns*(1+ntor),0:mpol1,2*ntmax),
INTENT(inout) ::
247 REAL(dp),
DIMENSION(:,:),
ALLOCATABLE :: frcc, frss, fzcs, fzsc,
249 INTEGER :: nsnt, mrho1, istat
257 ALLOCATE (frcc(nsnt,0:mrho1), frss(nsnt,0:mrho1),
258 fzsc(nsnt,0:mrho1), fzcs(nsnt,0:mrho1), stat=istat)
259 IF (istat .NE. 0) stop
'Allocation error #1 in getfrho!'
261 frcc(:,0:mrho) = frho_array(:,0:mrho,rcc); frcc(:,mrho1)=0
262 frho_array(:,:,rcc)=0
264 fzsc(:,0:mrho) = frho_array(:,0:mrho,zsc+ntmax); fzsc(:,mrho1) =
265 frho_array(:,:,zsc+ntmax)=0
268 frss(:,0:mrho) = frho_array(:,0:mrho,rss); frss(:,mrho1) = 0
269 frho_array(:,:,rss)=0
270 fzcs(:,0:mrho) = frho_array(:,0:mrho,zcs+ntmax); fzcs(:,mrho1)
271 frho_array(:,:,zcs+ntmax)=0
274 modes:
DO m = 0, mrho
276 frho_array(:,m0,zsc+ntmax) = frcc(:,m0)
277 frho_array(:,m0,rcc) = cos_hb(m0)*(frcc(:,m1) - signgs*fzsc
278 IF (.NOT.lthreed) cycle
279 frho_array(:,m0,zcs+ntmax) = fzcs(:,m0)
281 frho_array(:,m,rcc) = cos_hb(m)*(frcc(:,m+1) - signgs*fzsc
282 + sin_hb(m)*(frcc(:,m-1) + signgs*fzsc
283 IF (.NOT.lthreed) cycle
284 frho_array(:,m,rss) = cos_hb(m)*(frss(:,m+1) + signgs*fzcs
285 + sin_hb(m)*(frss(:,m-1) - signgs*fzcs
289 DEALLOCATE (frcc, frss, fzsc, fzcs)
291 IF (any(frho_array(:,m0,rss) .NE. zero)) stop
'FRHO(m0,rss) != 0'
294 IF (.NOT. lasym)
GOTO 1000
296 ALLOCATE (frsc(nsnt,0:mrho1), frcs(nsnt,0:mrho1), &
297 fzcc(nsnt,0:mrho1), fzss(nsnt,0:mrho1), stat=istat)
298 IF (istat .NE. 0) stop
'Allocation error #2 in getfrho!'
300 frsc(:,0:mrho) = frho_array(:,0:mrho,rsc); frsc(:,mrho1) = 0
301 frho_array(:,:,rsc) = 0
302 fzcc(:,0:mrho) = frho_array(:,0:mrho,zcc+ntmax); fzcc(:,mrho1) =
303 frho_array(:,:,zcc+ntmax) = 0
305 frcs(:,0:mrho) = frho_array(:,0:mrho,rcs); frcs(:,mrho1) = 0
306 frho_array(:,:,rcs)=0
307 fzss(:,0:mrho) = frho_array(:,0:mrho,zss+ntmax); fzss(:,mrho1)
308 frho_array(:,:,zss+ntmax)=0
311 modea:
DO m = 0, mrho
313 frho_array(:,m0,zcc+ntmax) = fzcc(:,m0)
314 IF (.NOT.lthreed) cycle
315 frho_array(:,m0,zss+ntmax) = frcs(:,m0)
316 frho_array(:,m0,rcs) =cos_hb(m0)*(frcs(:,m1) - signgs*fzss
318 frho_array(:,m,rsc) = cos_hb(m)*(frsc(:,m+1) + signgs*fzcc
319 + sin_hb(m)*(frsc(:,m-1) - signgs*fzcc
320 IF (.NOT.lthreed) cycle
321 frho_array(:,m,rcs) = cos_hb(m)*(frcs(:,m+1) - signgs*fzss
322 + sin_hb(m)*(frcs(:,m-1) + signgs*fzss
326 DEALLOCATE (frsc, frcs, fzcc, fzss)
329 IF (any(frho_array(:,m0,rsc) .NE. zero)) stop
'FRHO(m=0,rsc) != 0'
336 frho_array(2:nsnt:ns,m1:,1:ntmax) = 0
340 frho_array(:,m1,1:ntmax) = 0
343 END SUBROUTINE getfrho
346 SUBROUTINE scalfor_rho(gcr, gcz)
353 REAL(dp),
DIMENSION(ns,0:ntor,0:mpol1,ntmax),
INTENT(inout) :: &
358 REAL(dp),
PARAMETER :: edge_pedestal=0.05_dp
359 INTEGER :: m , mp, n, js, jmax, jmin4(0:mnsize-1)
360 REAL(dp),
DIMENSION(:,:,:),
ALLOCATABLE :: arho, brho, drho, &
362 REAL(dp),
DIMENSION(:,:),
ALLOCATABLE :: acen, bcen, dcen
363 REAL(dp),
DIMENSION(:,:,:),
ALLOCATABLE :: gcen
364 REAL(dp) :: tar, taz, tc, tc1
367 IF (ivac .lt. 1) jmax = ns1
369 ALLOCATE (acen(ns,0:ntor), bcen(ns,0:ntor), dcen(ns,0:ntor),
375 gcen(:,:,1) = gcz(:,:,m0,zsc)
376 IF (lasym) gcen(:,:,3) = gcz(:,:,m0,zcc)
378 gcen(:,:,2) = gcz(:,:,m0,zcs)
379 IF (lasym) gcen(:,:,4) = gcz(:,:,m0,zss)
382 IF (sum(gcz*gcz) .NE. sum(gcen*gcen)) stop
'ERROR #1 IN SCALFOR_RHO'
384 CALL scalaxis(arm, ard, crd, acen, bcen, dcen, jmax, gcen(:,:,1),
385 IF (lasym)
CALL scalaxis(azm, azd, crd, acen, bcen, dcen, jmax, gcen
387 CALL scalaxis(azm, azd, crd, acen, bcen, dcen, jmax, gcen(:,:,2
388 IF (lasym)
CALL scalaxis(arm, ard, crd, acen, bcen, dcen, jmax,
395 gcz(:,:,m0,zsc) = gcen(:,:,1)
396 IF (lasym) gcz(:,:,m0,zcc) = gcen(:,:,3)
398 gcz(:,:,m0,zcs) = gcen(:,:,2)
399 IF (lasym) gcz(:,:,m0,zss) = gcen(:,:,4)
405 ALLOCATE (arho(ns,0:ntor,0:mpol1), brho(ns,0:ntor,0:mpol1),
406 drho(ns,0:ntor,0:mpol1), arho2(ns,0:ntor,0:mpol1),
407 brho2(ns,0:ntor,0:mpol1),drho2(ns,0:ntor,0:mpol1))
413 arho(js,n,m) = -(arhom(js+1,mp) + brhom(js+1,mp)*m**2)
414 brho(js,n,m) = -(arhom(js,mp) + brhom(js,mp) *m**2)
415 drho(js,n,m) = -(arhod(js,mp) + brhod(js,mp) *m**2
416 + crhod(js)*(n*nfp)**2)
417 arho2(js,n,m)= -p5*(arhom2(js+1,mp)+ brhom2(js+1,mp)*m**2
418 brho2(js,n,m)= -p5*(arhom2(js,mp) + brhom2(js,mp) *m**2
419 drho2(js,n,m)= -p5*(arhod2(js,mp) + brhod2(js,mp) *m**2
424 CALL avg_rho(arho, arho2)
425 CALL avg_rho(brho, brho2)
426 CALL avg_rho(drho, drho2)
428 IF (jmax .ge. ns)
THEN
434 drho(ns,:,:) = (1+edge_pedestal)*drho(ns,:,:)
439 CALL tridslv (arho,drho,brho,gcr(:,:,:,rcc),jmin4,jmax,
441 IF (lthreed)
CALL tridslv (arho,drho,brho,gcr(:,:,:,rss),
442 jmin4,jmax,mnsize-1,ns,1)
444 CALL tridslv (arho,drho,brho,gcr(:,:,:,rsc),jmin4,jmax,
446 IF (lthreed)
CALL tridslv (arho,drho,brho,gcr(:,:,:,rcs),
447 jmin4,jmax,mnsize-1,ns,1)
450 DEALLOCATE (arho, brho, drho, arho2, brho2, drho2, gcen)
452 END SUBROUTINE scalfor_rho
454 SUBROUTINE scalaxis(axm, axd, cxd, acen, bcen, dcen, jmax, gcen, iflag)
457 REAL(dp),
PARAMETER :: edge_pedestal=0.15_dp, fac=0.25_dp
459 REAL(dp),
INTENT(IN),
DIMENSION(ns+1,2) :: axm, axd
460 REAL(dp),
INTENT(IN),
DIMENSION(ns+1) :: cxd
461 REAL(dp),
DIMENSION(ns,0:ntor) :: acen, bcen, dcen
462 REAL(dp),
INTENT(INOUT) :: gcen(ns,0:ntor)
464 INTEGER,
INTENT(IN) :: jmax, iflag
465 INTEGER :: mp, n, js, mnsize0, jmin4(0:mnsize-1)
470 acen(js,n) = -axm(js+1,mp)
471 bcen(js,n) = -axm(js,mp)
472 dcen(js,n) = -(axd(js,mp)+cxd(js)*(n*nfp)**2)
476 IF (jmax .ge. ns)
THEN
482 dcen(ns,:) = (1+edge_pedestal)*dcen(ns,:)
489 IF (iflag .eq. 1)
THEN
493 mult_fac = min(fac, fac*hs*15)
494 dcen(ns,0) = dcen(ns,0)*(1-mult_fac)/(1+edge_pedestal)
502 IF (iresidue.GE.0 .AND. iresidue.LT.3) jmin4(0)=2
504 CALL tridslv(acen,dcen,bcen,gcen,jmin4,jmax,mnsize0-1,ns,1)
506 END SUBROUTINE scalaxis
508 SUBROUTINE avg_rho(ax, ax2)
511 REAL(dp),
INTENT(inout),
DIMENSION(ns*(1+ntor), 0:mpol1) :: ax, ax2
512 REAL(dp),
ALLOCATABLE :: ax1(:,:)
515 ALLOCATE (ax1(ns*(1+ntor),0:mpol1))
517 ax1(:,m0) = cos_hb(m0)*t1m(m1)*(ax(:,m1)+ax2(:,m1))
519 ax1(:,m) = cos_hb(m)*(t1m(m+1)*ax(:,m+1)+t2m(m-1)*ax2(:,m-1))
520 + sin_hb(m)*(t2m(m-1)*ax(:,m-1)+t1m(m+1)*ax2(:,m+1))
523 ax1(:,mpol1) = sin_hb(mpol1)*t2m(mpol1-1)*ax(:,mpol1-1)
524 + cos_hb(mpol1)*t2m(mpol1-1)*ax2(:,mpol1-1)
529 END SUBROUTINE avg_rho
531 SUBROUTINE precondn_rho
532 USE vmec_main,
ONLY: ard, arm, brd, brm, azd, azm, bzd, bzm, crd
533 USE fbal,
ONLY: rzu_fac, rru_fac, frcc_fac, fzsc_fac
534 REAL(dp),
PARAMETER :: one=1
542 arhod2 = ard2-azd2; brhod2 = (brd2-bzd2)
543 arhom2 = arm2-azm2; brhom2 = (brm2-bzm2)
545 rzu_fac = (rzu_fac+rru_fac); rru_fac=rzu_fac
546 frcc_fac(2:ns-1) = one/rzu_fac(2:ns-1)
547 fzsc_fac(2:ns-1) = -frcc_fac(2:ns-1)
549 END SUBROUTINE precondn_rho
551 SUBROUTINE get_rep_mismatch(rz0_array, rho_array)
552 USE vmec_main,
ONLY: irst, hs
554 REAL(dp),
PARAMETER :: p5=0.5_dp, p25=p5*p5
555 REAL(dp),
DIMENSION(ns*(1+ntor),0:mpol1,2*ntmax),
INTENT(in) :: rz0_array
556 REAL(dp),
DIMENSION(ns*(1+ntor),0:mpol1,2*ntmax),
INTENT(out) :: rho_array
557 INTEGER :: m, nsnt, mrho1, js, n, ntc
558 REAL(dp) :: match, delta, t1(ns*(1+ntor)), t2(ns*(1+ntor)), &
559 temp1(ns*(1+ntor)), temp2(ns*(1+ntor)), es
563 nsnt =
SIZE(rz0_array,1)
564 mrho1 = max(mrho+1,mpol1)
570 rho_array(:,m0,zsc+ntmax) = rz0_array(:,m0,rcc)
572 rho_array(:,m0,zcs+ntmax) = rz0_array(:,m0,zcs+ntmax)
576 IF (m .LT. mpol1-1)
THEN
577 t1 = (rz0_array(:,m+1,rcc) - signgs*rz0_array(:,m+1,zsc+ntmax
581 t2 = (rz0_array(:,m-1,rcc) + signgs*rz0_array(:,m-1,zsc+ntmax
583 ELSE IF (m .GT. 1)
THEN
584 t2 = (rz0_array(:,m-1,rcc) + signgs*rz0_array(:,m-1,zsc+ntmax
587 rho_array(:,m,rcc) = p25*(t1 + t2)
588 temp1 = temp1 + (t1 - t2)**2
589 temp2 = temp2 + (t1 + t2)**2
591 IF (.NOT.lthreed) cycle
593 IF (m .LT. mpol1-1)
THEN
594 t1 = (rz0_array(:,m+1,rss) + signgs*rz0_array(:,m+1,zcs+ntmax
598 t2 = (rz0_array(:,m-1,rss) - signgs*rz0_array(:,m-1,zcs+ntmax
601 t2 = (rz0_array(:,m-1,rss) - rz0_array(:,m-1,rcs+ntmax))/t2m
604 rho_array(:,m,rss) = p25*(t1 + t2)
605 temp1 = temp1 + (t1 - t2)**2
606 temp2 = temp2 + (t1 + t2)**2
609 rho_array(:,m0,zsc+ntmax) = rho_array(:,m0,zsc+ntmax) - t2m(m0)*rho_array
611 rho_array(:,m0,zcs+ntmax) = rho_array(:,m0,zcs+ntmax) + t2m(m0)
617 IF (.NOT.lasym)
GOTO 1000
619 rho_array(:,m0,zcc+ntmax) = rz0_array(:,m0,zcc+ntmax)
621 rho_array(:,m0,zss+ntmax) = rz0_array(:,m0,rcs)
625 IF (m .LT. mpol1-1)
THEN
626 t1 = (rz0_array(:,m+1,rsc) + signgs*rz0_array(:,m+1,zcc+ntmax
630 t2 = (rz0_array(:,m-1,rsc) - signgs*rz0_array(:,m-1,zcc+ntmax
633 t2 = (rz0_array(:,m-1,rsc) - signgs*rz0_array(:,m-1,zcc+ntmax
636 rho_array(:,m,rsc) = p25*(t1 + t2)
637 temp1 = temp1 + (t1 - t2)**2
638 temp2 = temp2 + (t1 + t2)**2
640 IF (.not.lthreed) cycle
642 IF (m .LT. mpol1-1)
THEN
643 t1 = (rz0_array(:,m+1,rcs) - signgs*rz0_array(:,m+1,zss+ntmax
647 t2 = (rz0_array(:,m-1,rcs) + signgs*rz0_array(:,m-1,zss+ntmax
650 t2 = (rz0_array(:,m-1,rcs) + signgs*rz0_array(:,m-1,zss+ntmax
653 rho_array(:,m,rcs) = p25*(t1 + t2)
654 temp1 = temp1 + (t1 - t2)**2
655 temp2 = temp2 + (t1 + t2)**2
658 rho_array(:,m0,zcc+ntmax) = rho_array(:,m0,zcc+ntmax) + t2m(m0)*rho_array
660 rho_array(:,m0,zss+ntmax) = rho_array(:,m0,zss+ntmax) - t2m(m0)
665 IF (irst .EQ. 1)
GOTO 2000
672 IF (mod(m,2) .EQ. 0)
THEN
673 rho_array(ntc, m, 1:ntmax) = sqrt(es)*rho_array(ns*(1+ntor
675 rho_array(ntc, m, 1:ntmax) = es*rho_array(ns*(1+ntor),
683 WRITE (*,
'(a)')
' Quasi-polar representation mismatch vs radius'
685 delta = sum(temp1(js:nsnt:ns))
686 match = sum(temp2(js:nsnt:ns))
687 IF (match .NE. 0._dp)
WRITE (*,
'(1x,i4,1p,e10.2)')js,delta/match
697 END SUBROUTINE get_rep_mismatch
699 END MODULE angle_constraints