diff --git a/Sources/General/bcovar.f b/Sources/General/bcovar.f index 9d18858..526776b 100644 --- a/Sources/General/bcovar.f +++ b/Sources/General/bcovar.f @@ -447,9 +447,9 @@ SUBROUTINE bcovar_par(lu, lv, tpxc, ier_flag) 1 ABS(azd(js,1)/aznorm))*tcon_mul*(32*hs)**2 END DO tcon(ns) = p5*tcon(ns - 1) - IF (lasym) THEN - tcon = p5*tcon - END IF +! IF (lasym) THEN +! tcon = p5*tcon +! END IF #endif ENDIF @@ -878,7 +878,7 @@ SUBROUTINE bcovar (lu, lv) & ABS(azd(js,1)/aznorm))*tcon_mul*(32*hs)**2 END DO tcon(ns) = p5*tcon(ns-1) - IF (lasym) tcon = p5*tcon + !IF (lasym) tcon = p5*tcon #endif ENDIF diff --git a/Sources/Initialization_Cleanup/fixaray.f b/Sources/Initialization_Cleanup/fixaray.f index 8215aef..2fb3df8 100644 --- a/Sources/Initialization_Cleanup/fixaray.f +++ b/Sources/Initialization_Cleanup/fixaray.f @@ -1,6 +1,6 @@ SUBROUTINE fixaray USE vmec_main, p5 => cp5 - USE vmec_params, ONLY: jmin2, mscale, nscale, + USE vmec_params, ONLY: jmin2, mscale, nscale, & mnyq, nnyq, signgs #ifdef _HBANGLE USE angle_constraints, ONLY: init_multipliers @@ -15,7 +15,7 @@ SUBROUTINE fixaray C----------------------------------------------- INTEGER :: i, m, j, n, mn, mn1, nmin0, istat1, istat2 INTEGER :: mnyq0, nnyq0 - REAL(dp) :: argi, arg, argj, dnorm, tfixon, tfixoff + REAL(dp) :: argi, arg, argj, dnorm, dnorm3, tfixon, tfixoff C----------------------------------------------- ! ! INDEX OF LOCAL VARIABLES @@ -27,11 +27,11 @@ SUBROUTINE fixaray ! ! COMPUTE TRIGONOMETRIC FUNCTION ARRAYS ! NOTE: ARRAYS ALLOCATED HERE ARE GLOBAL AND ARE DEALLOCATED IN FILEOUT -! NOTE: NEED 2 X NYQUIST FOR FAST HESSIAN CALCULATIONS +! NOTE: NEED 2 X NYQUIST FOR FAST HESSIAN CALCULATIONS ! mnyq0 = ntheta1/2 nnyq0 = nzeta/2 - + mnyq = MAX(0, 2*mnyq0, 2*mpol1) nnyq = MAX(0, 2*nnyq0, 2*ntor) @@ -56,12 +56,48 @@ SUBROUTINE fixaray STOP 'allocation error in fixaray: istat2' END IF - dnorm = one/(nzeta*(ntheta2 - 1)) - IF (lasym) THEN - dnorm = one/(nzeta*ntheta3) !Fix, SPH012314 - END IF - - mscale(0) = 1; nscale(0) = 1 + ! dnorm is the normalization factor for Fourier integrals + ! on the reduced poloidal interval [0, pi]. + ! + ! All forward Fourier transforms in VMEC are performed as follows: + ! 1. Decompose the function to be transformed into + ! an even-parity contribution and an odd-parity contribution (symforce). + ! 2. Fourier-transform the two definite-parity contributions + ! separately over the reduced poloidal interval [0, pi] (tomnsp*). + ! + ! Inverse Fourier transforms are performed as follows: + ! 1. Inverse-Fourier-transform the even-parity and odd-parity + ! contributions separately (totzsp*) + ! into the reduced poloidal interval [0, pi]. + ! 2. Combine the definite-parity contributions into + ! the full poloidal interval [0, 2 pi[ (symrzl). + ! + ! In the symmetric case, only contributions with that parity + ! which a given quantity has under the assumption of symmetry, + ! are transformed. This allows to skip the sym* routines + ! in the symmetric case. + dnorm = one/(nzeta*(ntheta2 - 1)) + + ! dnorm3 is the normalization factor for the surface-averaging integrals. + ! These integrals are always performed in realspace + ! and thus, they need to adapt to the number of poloidal grid points. + ! In the asymmetric case, there are ntheta1 grid points spanning [0, 2 pi[. + ! In the symmetric case, there are ntheta2 grid points spanning [0, pi]. + ! + ! In the asymmetric case, the integral is performed + ! over the full period of the poloidal interval. + ! Thus, the trapezoidal rule applied here does not need + ! the factors of 1/2 at the endpoints. + ! In the symmetric case, the integral is performed + ! over the reduced poloidal interval, which is not a periodic domain anymore. + ! Thus, the factors 1/2 have to be taken into account at the endpoints. + if (lasym) then + dnorm3 = one/(nzeta*ntheta1) + else + dnorm3 = one/(nzeta*(ntheta2 - 1)) + end if + + mscale(0) = 1; nscale(0) = 1 ! mscale(0) = osqrt2; nscale(0) = osqrt2 !versions < 6.9, incorrectly used osqrt2 mscale(1:mnyq) = mscale(0)/osqrt2 @@ -75,17 +111,36 @@ SUBROUTINE fixaray argi = twopi*(i - 1)/ntheta1 DO m = 0, mnyq arg = argi*m - cosmu(i,m) = COS(arg)*mscale(m) - sinmu(i,m) = SIN(arg)*mscale(m) + +! Special case the Pi angle. + IF (i .eq. ntheta2) THEN + IF (MOD(m, 2) .eq. 0) THEN + cosmu(i,m) = mscale(m) + ELSE + cosmu(i,m) = -mscale(m) + END IF + sinmu(i,m) = 0 + ELSE IF (i .gt. ntheta2) THEN +! Force symmetry for angles indices over ntheta2 + cosmu(i,m) = cosmu(2*ntheta2 - i,m) + sinmu(i,m) = -sinmu(2*ntheta2 - i,m) + ELSE + cosmu(i,m) = COS(arg)*mscale(m) + sinmu(i,m) = SIN(arg)*mscale(m) + END IF + cosmui(i,m) = dnorm*cosmu(i,m) - cosmui3(i,m) = cosmui(i,m) !Use this if integration over FULL 1,ntheta3 interval sinmui(i,m) = dnorm*sinmu(i,m) IF (i.EQ.1 .OR. i.EQ.ntheta2) THEN cosmui(i,m) = cosmui(i,m)/2 END IF - IF (ntheta2 .EQ. ntheta3) THEN - cosmui3(i,m) = cosmui(i,m) - END IF + + ! Use this if integration over FULL 1,ntheta3 interval + cosmui3(i,m) = dnorm3*cosmu(i,m) + if (.not.lasym .and. (i.EQ.1 .OR. i.EQ.ntheta2)) then + cosmui3(i,m) = cosmui3(i,m)/2 + end if + cosmum(i,m) = cosmu(i,m)*(m) sinmum(i,m) = -sinmu(i,m)*(m) cosmumi(i,m) = cosmui(i,m)*(m) @@ -97,7 +152,7 @@ SUBROUTINE fixaray DO j = 1, nzeta argj = twopi*(j - 1)/nzeta DO n = 0, nnyq - arg = argj*(n) + arg = argj*n cosnv(j,n) = COS(arg)*nscale(n) sinnv(j,n) = SIN(arg)*nscale(n) cosnvn(j,n) = cosnv(j,n)*(n*nfp) diff --git a/Sources/Input_Output/jxbforce.f b/Sources/Input_Output/jxbforce.f index 30105c2..ee5f6f0 100644 --- a/Sources/Input_Output/jxbforce.f +++ b/Sources/Input_Output/jxbforce.f @@ -1,23 +1,23 @@ SUBROUTINE jxbforce(bsupu, bsupv, bsubu, bsubv, bsubs, bsubsu, - 1 bsubsv, gsqrt, bsq, itheta, izeta, brho, sigma_an, ier_flag + 1 bsubsv, gsqrt, bsq, itheta, izeta, brho, sigma_an, ier_flag #ifdef _ANIMEC 2 ,pp1, pp2, ppar, onembc #endif 3 ) USE safe_open_mod USE vmec_main - USE vmec_params, ONLY: mscale, nscale, signgs, mnyq, nnyq, + USE vmec_params, ONLY: mscale, nscale, signgs, mnyq, nnyq, 1 successful_term_flag USE realspace, ONLY: shalf, wint, guu, guv, gvv, r1, ru, rv, 1 zu , zv , phip #ifdef _ANIMEC - 2 ,pp3 + 2 ,pp3 USE fbal, ONLY: bimax_ppargrad #endif #ifdef NETCDF USE ezcdf #endif - USE xstuff, ONLY: xc + USE xstuff, ONLY: xc USE parallel_include_module IMPLICIT NONE !----------------------------------------------- @@ -55,7 +55,7 @@ SUBROUTINE jxbforce(bsupu, bsupv, bsubu, bsubv, bsubs, bsubsu, ! L o c a l V a r i a b l e s !----------------------------------------------- INTEGER lk, lz, lt, k, m, js, j, n, injxbout, mparity, nznt1 - INTEGER :: njxbout = jxbout0, nmin, info + INTEGER :: njxbout = jxbout0, nmin, info INTEGER, PARAMETER :: ns_skip = 1, nu_skip = 1, nv_skip = 1 REAL(rprec), DIMENSION(:,:), ALLOCATABLE :: 1 bdotk, bsubuv, bsubvu @@ -64,14 +64,14 @@ SUBROUTINE jxbforce(bsupu, bsupv, bsubu, bsubv, bsubs, bsubsu, 1 bsubs3, bsubv3, bsubu3, jxb_gradp, jcrossb, sqrtg3, 2 bsupv3, bsupu3, jsups3, jsupv3, jsupu3, jdotb_sqrtg REAL(rprec), POINTER :: bs1(:), bu1(:,:), bv1(:,:) - REAL(rprec), DIMENSION(:), ALLOCATABLE :: kperpu, kperpv, + REAL(rprec), DIMENSION(:), ALLOCATABLE :: kperpu, kperpv, 2 sqgb2, sqrtg, kp2, jxb, jxb2, bsupu1, bsupv1, bsubu1, bsubv1, 3 avforce, aminfor, amaxfor, toroidal_angle, phin, pprim, pprime REAL(rprec), DIMENSION(:,:), ALLOCATABLE :: bsubua, bsubva REAL(rprec) :: 1 bsubsmn1, bsubsmn2, bsubvmn1, bsubvmn2, bsubumn1, bsubumn2, 1 bsubsmn3, bsubsmn4, bsubvmn3, bsubvmn4, bsubumn3, bsubumn4, - 2 dnorm1, tcos1, tcos2, tsini1, tsini2, tcosi1, tcosi2, + 2 dnorm1, tcos1, tcos2, tsini1, tsini2, tcosi1, tcosi2, 3 tcosm1, tcosm2, tcosn1, tcosn2, tsinm1, tsinm2, tsin1, tsin2, 4 tsinn1, tsinn2, tjnorm, ovp, pnorm, brho00(ns) REAL(rprec), DIMENSION(:,:), ALLOCATABLE :: @@ -177,10 +177,10 @@ SUBROUTINE jxbforce(bsupu, bsupv, bsubu, bsubv, bsubs, bsubsu, nznt1 = nzeta*ntheta2 ALLOCATE (avforce(ns),aminfor(ns),amaxfor(ns)) ALLOCATE (bdotk(ns,nznt), bsubuv(ns,nznt), - 1 bsubvu(ns,nznt), kperpu(nznt), kperpv(nznt), + 1 bsubvu(ns,nznt), kperpu(nznt), kperpv(nznt), 2 sqgb2(nznt), brhomn(0:mnyq,-nnyq:nnyq,0:1),kp2(nznt), - 3 jxb(nznt), jxb2(nznt), bsupu1(nznt), - 3 bsubua(nznt1,0:1), bsubva(nznt1,0:1), + 3 jxb(nznt), jxb2(nznt), bsupu1(nznt), + 3 bsubua(nznt1,0:1), bsubva(nznt1,0:1), 4 bsupv1(nznt), bsubu1(nznt), bsubv1(nznt), 5 bsubsmn(ns,0:mnyq,-nnyq:nnyq,0:1), 6 bsubs_s(nznt), bsubs_a(nznt), sqrtg(nznt), @@ -198,7 +198,7 @@ SUBROUTINE jxbforce(bsupu, bsupv, bsubu, bsubv, bsubs, bsubsu, ! ! Put bsubs on full mesh ! - IF (js.gt.1 .and. js.lt.ns) THEN + IF (js.gt.1 .and. js.lt.ns) THEN bsubs(js,:) = p5*(bsubs(js,:) + bsubs(js+1,:)) END IF @@ -209,7 +209,7 @@ SUBROUTINE jxbforce(bsupu, bsupv, bsubu, bsubv, bsubs, bsubsu, ! _s: symmetric in u,v _a: antisymmetric in u,v on half (ntheta2) interval IF (lasym) THEN bs1=>bsubs(js,:); bu1=>bsubu(js,:,:); bv1=>bsubv(js,:,:) - CALL fsym_fft (bs1, bu1, bv1, bsubs_s, bsubu_s, bsubv_s, + CALL fsym_fft (bs1, bu1, bv1, bsubs_s, bsubu_s, bsubv_s, 1 bsubs_a, bsubu_a, bsubv_a) ELSE bsubs_s(:) = bsubs(js,:) @@ -230,7 +230,7 @@ SUBROUTINE jxbforce(bsupu, bsupv, bsubu, bsubv, bsubs, bsubsu, IF (n.eq.nnyq .and. n.ne.0) dnorm1 = p5*dnorm1 bsubsmn1 = 0; bsubsmn2 = 0 IF (lasym) THEN - dnorm1 = 2*dnorm1 !SPH012314 in FixAray + !dnorm1 = 2*dnorm1 !SPH012314 in FixAray bsubsmn3 = 0; bsubsmn4 = 0 END IF bsubumn1 = 0; bsubumn2 = 0; bsubvmn1 = 0; bsubvmn2 = 0 @@ -269,7 +269,7 @@ SUBROUTINE jxbforce(bsupu, bsupv, bsubu, bsubv, bsubs, bsubsu, ! ! FOURIER INVERSE TRANSFORM ! Compute on u-v grid (must add symmetric, antisymmetric parts for lasym=T) -! +! DO k = 1, nzeta lk = k DO j = 1, ntheta2 @@ -288,10 +288,10 @@ SUBROUTINE jxbforce(bsupu, bsupv, bsubu, bsubv, bsubs, bsubsu, tcosn2 = cosmu(j,m)*cosnvn(k,n) bsubsv(js,lk,0) = bsubsv(js,lk,0) + 1 tcosn1*bsubsmn1 + tcosn2*bsubsmn2 - bsubvu(js,lk) = bsubvu(js,lk) + + bsubvu(js,lk) = bsubvu(js,lk) + 1 sinmum(j,m)*cosnv(k,n)*bsubvmn1 + 2 cosmum(j,m)*sinnv(k,n)*bsubvmn2 - bsubuv(js,lk) = bsubuv(js,lk) + + bsubuv(js,lk) = bsubuv(js,lk) + 1 cosmu(j,m)*sinnvn(k,n)*bsubumn1 + 2 sinmu(j,m)*cosnvn(k,n)*bsubumn2 @@ -311,10 +311,10 @@ SUBROUTINE jxbforce(bsupu, bsupv, bsubu, bsubv, bsubs, bsubsu, tsinn2 = sinmu(j,m)*cosnvn(k,n) bsubsv(js,lk,1) = bsubsv(js,lk,1) + 1 tsinn1*bsubsmn3 + tsinn2*bsubsmn4 - bsubvu(js,lk) = bsubvu(js,lk) + + bsubvu(js,lk) = bsubvu(js,lk) + 1 cosmum(j,m)*cosnv(k,n)*bsubvmn3 + 2 sinmum(j,m)*sinnv(k,n)*bsubvmn4 - bsubuv(js,lk) = bsubuv(js,lk) + + bsubuv(js,lk) = bsubuv(js,lk) + 1 sinmu(j,m)*sinnvn(k,n)*bsubumn3 + 2 cosmu(j,m)*cosnvn(k,n)*bsubumn4 END IF @@ -332,7 +332,7 @@ SUBROUTINE jxbforce(bsupu, bsupv, bsubu, bsubv, bsubs, bsubsu, bsubsmn(js,m,n,0) = bsubsmn1 IF (n .gt. 0) bsubsmn(js,m,-n,0) = bsubsmn2 - + IF (.not.lasym) CYCLE bsubsmn(js,m,n,1) = bsubsmn3 @@ -359,12 +359,12 @@ SUBROUTINE jxbforce(bsupu, bsupv, bsubu, bsubv, bsubs, bsubsu, IF (lasym) CALL fsym_invfft (bsubsu, bsubsv) #ifdef _ANIMEC - CALL bimax_ppargrad(pp1, pp2, gsqrt, ppar, onembc, pres, + CALL bimax_ppargrad(pp1, pp2, gsqrt, ppar, onembc, pres, 1 phot,tpotb) #endif ! SKIPS Bsubs Correction - uses Bsubs from metric elements - IF (.not.lbsubs) GOTO 1500 + IF (.not.lbsubs) GOTO 1500 ! ! Compute corrected Bsubs coefficients (brhomn) (impacts currents) @@ -403,7 +403,7 @@ SUBROUTINE jxbforce(bsupu, bsupv, bsubu, bsubv, bsubs, bsubsu, ELSE IF (lprint) THEN WRITE (33, *) ' JS = ', js IF (lasym) THEN - WRITE (33, '(a)') + WRITE (33, '(a)') 1 ' M N BSUBS(old) BSUBS(new)' // 2 ' BSUBS(old) BSUBS(new)' ELSE @@ -468,7 +468,7 @@ SUBROUTINE jxbforce(bsupu, bsupv, bsubu, bsubv, bsubs, bsubsu, tcosn2 = cosmu(j,m)*cosnvn(k,n) bsubsv(js,lk,0) = bsubsv(js,lk,0) + 1 tcosn1*bsubsmn1 + tcosn2*bsubsmn2 - + IF (lasym) THEN tcos1 = cosmu(j,m)*cosnv(k,n) tcos2 = sinmu(j,m)*sinnv(k,n) @@ -484,7 +484,7 @@ SUBROUTINE jxbforce(bsupu, bsupv, bsubu, bsubv, bsubs, bsubsu, 1 tsinn1*bsubsmn3 + tsinn2*bsubsmn4 END IF - + lk = lk + nzeta END DO @@ -546,7 +546,7 @@ SUBROUTINE jxbforce(bsupu, bsupv, bsubu, bsubv, bsubs, bsubsu, ! Itheta = sqrt(g) * Ksupu ! Izeta = sqrt(g) * Ksupv ! Ksupx = K dot grad(x) x=(u,v) -! jxb = (K X B) dot (grad-u X grad-v) sqrt(g) +! jxb = (K X B) dot (grad-u X grad-v) sqrt(g) ! bdotk = sigma*sqrt(g)*K dot B ! kperpx = (B X gradp) dot grad(x) / |B|**2 x=(u,v) ! sqgb2 = sigma*sqrt(g)*|B|**2 @@ -562,20 +562,20 @@ SUBROUTINE jxbforce(bsupu, bsupv, bsubu, bsubv, bsubs, bsubsu, ! #ifdef NETCDF ALLOCATE( - 1 bsubs3(ns,nzeta,ntheta3), bsubv3(ns,nzeta,ntheta3), - 2 bsubu3(ns,nzeta,ntheta3), jxb_gradp(ns,nzeta,ntheta3), - 3 jcrossb(ns,nzeta,ntheta3), bsupv3(ns,nzeta,ntheta3), - 4 bsupu3(ns,nzeta,ntheta3), jsups3(ns,nzeta,ntheta3), + 1 bsubs3(ns,nzeta,ntheta3), bsubv3(ns,nzeta,ntheta3), + 2 bsubu3(ns,nzeta,ntheta3), jxb_gradp(ns,nzeta,ntheta3), + 3 jcrossb(ns,nzeta,ntheta3), bsupv3(ns,nzeta,ntheta3), + 4 bsupu3(ns,nzeta,ntheta3), jsups3(ns,nzeta,ntheta3), 5 jsupv3(ns,nzeta,ntheta3), jsupu3(ns,nzeta,ntheta3), - 6 jdotb_sqrtg(ns,nzeta,ntheta3), sqrtg3(ns,nzeta,ntheta3), + 6 jdotb_sqrtg(ns,nzeta,ntheta3), sqrtg3(ns,nzeta,ntheta3), 7 phin(ns), toroidal_angle(nzeta), stat=j) bsubs3=0; bsubv3=0; bsubu3=0; jxb_gradp=0 jcrossb=0 ; bsupv3=0; bsupu3=0; jsups3=0 jsupv3=0; jsupu3=0; phin=0; phin(ns)=1 - jdotb_sqrtg=0; sqrtg3=0 + jdotb_sqrtg=0; sqrtg3=0 #endif - + ALLOCATE (pprime(nznt), pprim(ns),stat=j) pprim=0 @@ -606,12 +606,12 @@ SUBROUTINE jxbforce(bsupu, bsupv, bsubu, bsubv, bsubs, bsubsu, 3 * (bsq(js ,:nznt)-pres(js )) #endif ! TAKE THIS OUT: MAY BE POORLY CONVERGED AT THIS POINT.... -! IF (ANY(sqgb2(:nznt)*signgs .le. zero)) +! IF (ANY(sqgb2(:nznt)*signgs .le. zero)) ! 1 STOP ' SQGB2 <= 0 in JXBFORCE' pprime(:) = ohs*(pres(js+1)-pres(js))/mu0 !dp/ds here #ifdef _ANIMEC !WAC Last two lines of 'pprime' contain the hot particle parallel pressure - 1 + ohs*((pres(js+1)*phot(js+1) - pres(js)*phot(js))*pp2(js,:nznt) + 1 + ohs*((pres(js+1)*phot(js+1) - pres(js)*phot(js))*pp2(js,:nznt) 2 + (tpotb(js+1) - tpotb(js) ) *pp1(js,:nznt)) 3 / mu0 #endif @@ -654,7 +654,7 @@ SUBROUTINE jxbforce(bsupu, bsupv, bsubu, bsubv, bsubs, bsubsu, 1 / sigma_an(js,:nznt)) bdotb(js) = dnorm1*tjnorm*SUM(sqgb2(:nznt)*wint(2:nrzt:ns) 1 / sigma_an(js,:nznt)) - + bdotgradv(js) = p5*dnorm1*tjnorm*(phip(js) + phip(js+1)) jpar2(js) = dnorm1*tjnorm* 1 SUM(bdotk(js,:nznt)**2*wint(2:nrzt:ns) @@ -671,14 +671,14 @@ SUBROUTINE jxbforce(bsupu, bsupv, bsubu, bsubv, bsubs, bsubsu, lk = lz + nzeta*(lt-1) C lu (js,lz,lt ) = lt jsupu3 (js,lz,lt) = ovp*itheta(js,lk) - jsupv3 (js,lz,lt) = ovp*izeta(js,lk) + jsupv3 (js,lz,lt) = ovp*izeta(js,lk) jsups3 (js,lz,lt) = ovp*(bsubuv(js,lk) 1 - bsubvu(js,lk))/mu0 bsupu3 (js,lz,lt) = bsupu1(lk) bsupv3 (js,lz,lt) = bsupv1(lk) jcrossb (js,lz,lt) = jxb(lk) jxb_gradp (js,lz,lt) = (jxb(lk) - pprime(lk)) - jdotb_sqrtg (js,lz,lt) = ovp*bdotk(js,lk) + jdotb_sqrtg (js,lz,lt) = ovp*bdotk(js,lk) sqrtg3(js,lz,lt) = sqrtg(lk)*ovp bsubu3(js,lz,lt) = bsubu(js,lk,0) bsubv3(js,lz,lt) = bsubv(js,lk,0) @@ -687,7 +687,7 @@ SUBROUTINE jxbforce(bsupu, bsupv, bsubu, bsubv, bsubs, bsubsu, END DO #else WRITE (njxbout, 200) phi(js), avforce(js), jdotb(js), - 1 bdotgradv(js), pprime(1), one/ovp, + 1 bdotgradv(js), pprime(1), one/ovp, 2 (twopi**2)*tjnorm*SUM(itheta(js,:)*wint(js:nrzt:ns)), 3 (twopi**2)*tjnorm*SUM(izeta (js,:)*wint(js:nrzt:ns)), 4 amaxfor(js), aminfor(js) @@ -731,7 +731,7 @@ SUBROUTINE jxbforce(bsupu, bsupv, bsubu, bsubv, bsubs, bsubsu, CALL cdf_define(njxbout,vn_toroidal_grid_points,nzeta) CALL cdf_define(njxbout,vn_avforce,avforce) CALL cdf_define(njxbout,vn_jdotb,jdotb) - + CALL cdf_define(njxbout,vn_sqg_bdotk,jdotb_sqrtg) CALL cdf_define(njxbout,vn_sqrtg,sqrtg3) @@ -777,12 +777,12 @@ SUBROUTINE jxbforce(bsupu, bsupv, bsubu, bsubv, bsubs, bsubsu, CALL cdf_write(njxbout,vn_bsubu,bsubu3) CALL cdf_write(njxbout,vn_bsubv,bsubv3) CALL cdf_write(njxbout,vn_bsubs,bsubs3) - + CALL cdf_close(njxbout) DEALLOCATE( - 1 bsubs3, bsubv3, bsubu3, jxb_gradp, jcrossb, bsupv3, - 2 bsupu3, jsups3, jsupv3, jsupu3, jdotb_sqrtg, phin, + 1 bsubs3, bsubv3, bsubu3, jxb_gradp, jcrossb, bsupv3, + 2 bsupu3, jsups3, jsupv3, jsupu3, jdotb_sqrtg, phin, 3 toroidal_angle, sqrtg3, stat=j) #else @@ -804,9 +804,9 @@ SUBROUTINE jxbforce(bsupu, bsupv, bsubu, bsubv, bsubs, bsubsu, #endif END IF - - DEALLOCATE (kperpu, kperpv, sqgb2, sqrtg, kp2, brhomn, bsubsmn, - 1 jxb, jxb2, bsupu1, bsupv1, bsubu1, bsubv1, avforce, aminfor, + + DEALLOCATE (kperpu, kperpv, sqgb2, sqrtg, kp2, brhomn, bsubsmn, + 1 jxb, jxb2, bsupu1, bsupv1, bsubu1, bsubv1, avforce, aminfor, 2 amaxfor, pprim, stat=j) ! ! COMPUTE MERCIER CRITERION diff --git a/Sources/Input_Output/wrout.f b/Sources/Input_Output/wrout.f index 83265e7..f8a517c 100644 --- a/Sources/Input_Output/wrout.f +++ b/Sources/Input_Output/wrout.f @@ -901,7 +901,7 @@ SUBROUTINE wrout(bsq, gsqrt, bsubu, bsubv, bsubs, bsupv, bsupu, !SPH: FIXED THIS 03-05-07 TO CALL symmetrization routine IF (lasym) THEN !Changed integration norm in fixaray, SPH012314 - tmult = 2*tmult +! tmult = 2*tmult bsubs(1,:) = 0 CALL symoutput (bsq, gsqrt, bsubu, bsubv, bsupu, 1 bsupv, bsubs, diff --git a/Testing/tests/CMakeLists.txt b/Testing/tests/CMakeLists.txt index 562d44d..4e58db3 100644 --- a/Testing/tests/CMakeLists.txt +++ b/Testing/tests/CMakeLists.txt @@ -1,3 +1,4 @@ add_subdirectory (fixed_boundary_test) add_subdirectory (free_boundary_test) add_subdirectory (niter_test) +add_subdirectory (lasym_test) diff --git a/Testing/tests/free_boundary_test/CMakeLists.txt b/Testing/tests/free_boundary_test/CMakeLists.txt index ffed664..3aa22c5 100644 --- a/Testing/tests/free_boundary_test/CMakeLists.txt +++ b/Testing/tests/free_boundary_test/CMakeLists.txt @@ -19,7 +19,7 @@ add_test (NAME vmec_free_boundary_parallel_test # Check woutfile to ensure that values match. add_test (NAME vmec_free_boundary_check_aspect_test - COMMAND $/xwout_diff -wout_file1=wout_test_serial.vmec.nc -wout_file2=wout_test_parallel.vmec.nc -quantity=aspect -tol=5.0E-14) + COMMAND $/xwout_diff -wout_file1=wout_test_serial.vmec.nc -wout_file2=wout_test_parallel.vmec.nc -quantity=aspect -tol=5.8E-14) add_test (NAME vmec_free_boundary_check_b0_test COMMAND $/xwout_diff -wout_file1=wout_test_serial.vmec.nc -wout_file2=wout_test_parallel.vmec.nc -quantity=b0 -tol=7.3E-15) add_test (NAME vmec_free_boundary_check_bdotb_test @@ -29,7 +29,7 @@ add_test (NAME vmec_free_boundary_check_bdotgradv_test add_test (NAME vmec_free_boundary_check_beta_vol_test COMMAND $/xwout_diff -wout_file1=wout_test_serial.vmec.nc -wout_file2=wout_test_parallel.vmec.nc -quantity=beta_vol -tol=1.6E-16) add_test (NAME vmec_free_boundary_check_betapol_test - COMMAND $/xwout_diff -wout_file1=wout_test_serial.vmec.nc -wout_file2=wout_test_parallel.vmec.nc -quantity=betapol -tol=5.0E-15) + COMMAND $/xwout_diff -wout_file1=wout_test_serial.vmec.nc -wout_file2=wout_test_parallel.vmec.nc -quantity=betapol -tol=5.4E-15) add_test (NAME vmec_free_boundary_check_betator_test COMMAND $/xwout_diff -wout_file1=wout_test_serial.vmec.nc -wout_file2=wout_test_parallel.vmec.nc -quantity=betator -tol=2.0E-17) add_test (NAME vmec_free_boundary_check_betatotal_test @@ -63,9 +63,9 @@ add_test (NAME vmec_free_boundary_check_currvmnc_test add_test (NAME vmec_free_boundary_check_DCurr_test COMMAND $/xwout_diff -wout_file1=wout_test_serial.vmec.nc -wout_file2=wout_test_parallel.vmec.nc -quantity=DCurr -tol=1.9E-9) add_test (NAME vmec_free_boundary_check_DGeod_test - COMMAND $/xwout_diff -wout_file1=wout_test_serial.vmec.nc -wout_file2=wout_test_parallel.vmec.nc -quantity=DGeod -tol=1.2E-9) + COMMAND $/xwout_diff -wout_file1=wout_test_serial.vmec.nc -wout_file2=wout_test_parallel.vmec.nc -quantity=DGeod -tol=2.6E-9) add_test (NAME vmec_free_boundary_check_DMerc_test - COMMAND $/xwout_diff -wout_file1=wout_test_serial.vmec.nc -wout_file2=wout_test_parallel.vmec.nc -quantity=DMerc -tol=1.9E-9) + COMMAND $/xwout_diff -wout_file1=wout_test_serial.vmec.nc -wout_file2=wout_test_parallel.vmec.nc -quantity=DMerc -tol=2.0E-9) add_test (NAME vmec_free_boundary_check_DShear_test COMMAND $/xwout_diff -wout_file1=wout_test_serial.vmec.nc -wout_file2=wout_test_parallel.vmec.nc -quantity=DShear -tol=6.1E-10) add_test (NAME vmec_free_boundary_check_DWell_test @@ -87,7 +87,7 @@ add_test (NAME vmec_free_boundary_check_iotaf_test add_test (NAME vmec_free_boundary_check_jcuru_test COMMAND $/xwout_diff -wout_file1=wout_test_serial.vmec.nc -wout_file2=wout_test_parallel.vmec.nc -quantity=jcuru -tol=3.8E-7) add_test (NAME vmec_free_boundary_check_jcurv_test - COMMAND $/xwout_diff -wout_file1=wout_test_serial.vmec.nc -wout_file2=wout_test_parallel.vmec.nc -quantity=jcurv -tol=1.2E-9) + COMMAND $/xwout_diff -wout_file1=wout_test_serial.vmec.nc -wout_file2=wout_test_parallel.vmec.nc -quantity=jcurv -tol=2.0E-9) add_test (NAME vmec_free_boundary_check_jdotb_test COMMAND $/xwout_diff -wout_file1=wout_test_serial.vmec.nc -wout_file2=wout_test_parallel.vmec.nc -quantity=jdotb -tol=1.5E-6) add_test (NAME vmec_free_boundary_check_lmns_test diff --git a/Testing/tests/lasym_test/CMakeLists.txt b/Testing/tests/lasym_test/CMakeLists.txt new file mode 100644 index 0000000..a8a955e --- /dev/null +++ b/Testing/tests/lasym_test/CMakeLists.txt @@ -0,0 +1,133 @@ +# Copy input file from the source to the build directory. +configure_file (${CMAKE_CURRENT_SOURCE_DIR}/input.test_sym.vmec + ${CMAKE_CURRENT_BINARY_DIR}/input.test_sym.vmec + COPYONLY) +configure_file (${CMAKE_CURRENT_SOURCE_DIR}/input.test_asym.vmec + ${CMAKE_CURRENT_BINARY_DIR}/input.test_asym.vmec + COPYONLY) + +# Test Fixed boundary equilibrium. +add_test (NAME vmec_sym_test + COMMAND $ $ $ $/xvmec input.test_sym.vmec) +add_test (NAME vmec_asym_test + COMMAND $ $ $ $/xvmec input.test_asym.vmec) + +# Check woutfile to ensure that values match. +add_test (NAME vmec_asym_check_aspect_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=aspect -tol=5.0E-16) +add_test (NAME vmec_asym_check_b0_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=b0 -tol=2.0E-15) +add_test (NAME vmec_asym_check_bdotb_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=bdotb -tol=3.0E-15) +add_test (NAME vmec_asym_check_bdotgradv_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=bdotgradv -tol=2.0E-14) +add_test (NAME vmec_asym_check_beta_vol_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=beta_vol -tol=8.0E-16) +add_test (NAME vmec_asym_check_betapol_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=betapol -tol=9.0E-14) +add_test (NAME vmec_asym_check_betator_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=betator -tol=2.0E-17) +add_test (NAME vmec_asym_check_betatotal_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=betatotal -tol=2.0E-17) +add_test (NAME vmec_asym_check_betaxis_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=betaxis -tol=2.0E-16) +add_test (NAME vmec_asym_check_bmnc_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=bmnc -tol=9.0E-15) +add_test (NAME vmec_asym_check_bsubsmns_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=bsubsmns -tol=2.0E-15) +add_test (NAME vmec_asym_check_bsubumnc_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=bsubumnc -tol=2.0E-15) +add_test (NAME vmec_asym_check_bsubvmnc_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=bsubvmnc -tol=6.0E-15) +add_test (NAME vmec_asym_check_bsupumnc_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=bsupumnc -tol=2.0E-14) +add_test (NAME vmec_asym_check_bsupvmnc_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=bsupvmnc -tol=2.0E-14) +add_test (NAME vmec_asym_check_buco_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=buco -tol=4.0E-18) +add_test (NAME vmec_asym_check_bvco_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=bvco -tol=4.0E-15) +add_test (NAME vmec_asym_check_chi_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=chi -tol=4.2E-17) +add_test (NAME vmec_asym_check_chipf_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=chipf -tol=8.0E-16) +add_test (NAME vmec_asym_check_currumnc_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=currumnc -tol=2.0E-7) +add_test (NAME vmec_asym_check_currvmnc_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=currvmnc -tol=4.0E-8) +add_test (NAME vmec_asym_check_DCurr_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=DCurr -tol=5.0E-11) +add_test (NAME vmec_asym_check_DGeod_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=DGeod -tol=8.0E-12) +add_test (NAME vmec_asym_check_DMerc_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=DMerc -tol=3.0E-11) +add_test (NAME vmec_asym_check_DShear_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=DShear -tol=3.0E-11) +add_test (NAME vmec_asym_check_DWell_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=DWell -tol=1.0E-20) +add_test (NAME vmec_asym_check_fsql_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=fsql -tol=1.0E-20) +add_test (NAME vmec_asym_check_fsqr_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=fsqr -tol=1.0E-20) +add_test (NAME vmec_asym_check_fsqt_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=fsqt -tol=5.0E-19) +add_test (NAME vmec_asym_check_fsqz_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=fsqz -tol=1.0E-20) +add_test (NAME vmec_asym_check_gmnc_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=gmnc -tol=3.0E-15) +add_test (NAME vmec_asym_check_IonLarmor_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=IonLarmor -tol=6.0E-15) +add_test (NAME vmec_asym_check_iotaf_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=iotaf -tol=2.0E-14) +add_test (NAME vmec_asym_check_jcuru_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=jcuru -tol=2.0E-7) +add_test (NAME vmec_asym_check_jcurv_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=jcurv -tol=6.0E-11) +add_test (NAME vmec_asym_check_jdotb_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=jdotb -tol=7.0E-8) +add_test (NAME vmec_asym_check_lmns_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=lmns -tol=2.0E-13) +add_test (NAME vmec_asym_check_mnmax_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=mnmax -tol=1.0E-20) +add_test (NAME vmec_asym_check_mnmax_nyq_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=mnmax_nyq -tol=1.0E-20) +add_test (NAME vmec_asym_check_phipf_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=phipf -tol=1.0E-20) +add_test (NAME vmec_asym_check_phips_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=phips -tol=1.0E-20) +add_test (NAME vmec_asym_check_pres_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=pres -tol=1.0E-20) +add_test (NAME vmec_asym_check_presf_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=presf -tol=1.0E-20) +add_test (NAME vmec_asym_check_q_factor_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=q_factor -tol=2.0E-13) +add_test (NAME vmec_asym_check_rbtor_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=rbtor -tol=3.0E-15) +add_test (NAME vmec_asym_check_rbtor0_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=rbtor0 -tol=6.0E-16) +add_test (NAME vmec_asym_check_rmnc_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=rmnc -tol=3.0E-15) +add_test (NAME vmec_asym_check_specw_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=specw -tol=3.0E-16) +add_test (NAME vmec_asym_check_volavgB_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=volavgB -tol=2.0E-16) +add_test (NAME vmec_asym_check_volume_p_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=volume_p -tol=3.0E-16) +add_test (NAME vmec_asym_check_vp_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=vp -tol=9.0E-16) +add_test (NAME vmec_asym_check_wb_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=wb -tol=5.0E-19) +add_test (NAME vmec_asym_check_wdot_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=wdot -tol=3.0E-16) +add_test (NAME vmec_asym_check_wp_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=wp -tol=1.0E-20) +add_test (NAME vmec_asym_check_xm_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=xm -tol=1.0E-20) +add_test (NAME vmec_asym_check_xm_nyq_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=xm_nyq -tol=1.0E-20) +add_test (NAME vmec_asym_check_xn_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=xn -tol=1.0E-20) +add_test (NAME vmec_asym_check_xn_nyq_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=xn_nyq -tol=1.0E-20) +add_test (NAME vmec_asym_check_zmns_test + COMMAND $/xwout_diff -wout_file1=wout_test_sym.vmec.nc -wout_file2=wout_test_asym.vmec.nc -quantity=zmns -tol=2.0E-15) diff --git a/Testing/tests/lasym_test/input.test_asym.vmec b/Testing/tests/lasym_test/input.test_asym.vmec new file mode 100644 index 0000000..006ffbc --- /dev/null +++ b/Testing/tests/lasym_test/input.test_asym.vmec @@ -0,0 +1,45 @@ +&INDATA + +! VMEC execution parameters. +LFORBAL = F, +LFREEB = F, +DELT = 1.0, +TCON0 = 2.0, +NFP = 1, +NS_ARRAY = 15, +FTOL_ARRAY = 1.0E-20, +NITER = 25000, +NSTEP = 200, +NTOR = 0, +MPOL = 5, +NZETA = 1, +NVACSKIP = 9, +LASYM = T, + +! Fitting parameters. +GAMMA = 0.0, +PHIEDGE = -0.05, +BLOAT = 1.0, + +! Initial Position. +RAXIS(0) = 0.75, +ZAXIS(0) = 0.0, +RBC(0,0) = 0.75, +RBC(0,1) = 0.25, +ZBS(0,0) = 0.0, +ZBS(0,1) = 0.25, + +! Plasma current parameters. +NCURR = 1, +CURTOR = 40000.0, +AC = 1.0, 5.0, 10.0 +PCURR_TYPE = 'two_power', + +! Plasma pressure parameters. +SPRES_PED = 1.0, +PRES_SCALE = 400.0, +am_aux_s = 0.0, 0.5, 1.0 +am_aux_f = 1.0, 1.0, 1.0 +pmass_type = 'line_segment', +/ +&END diff --git a/Testing/tests/lasym_test/input.test_sym.vmec b/Testing/tests/lasym_test/input.test_sym.vmec new file mode 100644 index 0000000..265d523 --- /dev/null +++ b/Testing/tests/lasym_test/input.test_sym.vmec @@ -0,0 +1,45 @@ +&INDATA + +! VMEC execution parameters. +LFORBAL = F, +LFREEB = F, +DELT = 1.0, +TCON0 = 2.0, +NFP = 1, +NS_ARRAY = 15, +FTOL_ARRAY = 1.0E-20, +NITER = 25000, +NSTEP = 200, +NTOR = 0, +MPOL = 5, +NZETA = 1, +NVACSKIP = 9, +LASYM = F, + +! Fitting parameters. +GAMMA = 0.0, +PHIEDGE = -0.05, +BLOAT = 1.0, + +! Initial Position. +RAXIS(0) = 0.75, +ZAXIS(0) = 0.0, +RBC(0,0) = 0.75, +RBC(0,1) = 0.25, +ZBS(0,0) = 0.0, +ZBS(0,1) = 0.25, + +! Plasma current parameters. +NCURR = 1, +CURTOR = 40000.0, +AC = 1.0, 5.0, 10.0 +PCURR_TYPE = 'two_power', + +! Plasma pressure parameters. +SPRES_PED = 1.0, +PRES_SCALE = 400.0, +am_aux_s = 0.0, 0.5, 1.0 +am_aux_f = 1.0, 1.0, 1.0 +pmass_type = 'line_segment', +/ +&END