Overview

There are variables in the input namelist associated with the coil-surface separation,

  • limiter_surf : CHARACTER(100), default 'none'. Specify the file name for the limiter surface, if 'none', then using the plasma boundary.
  • weight_cssep : DOUBLE PRECISION, default 0.0. Weight for the coil-surface separation, generally the larger the more emphasized, if zero, turned off.
  • cssep_factor : DOUBLE PRECISION, default 4.0. The exponential index in the formula. The higher the more stiff. Recommended to use cssep_factor $\geq 2.0$, otherwise the function will compress the coils.

Here are some basic studies using a simple rotating ellipse (R=3.0, a=0.4, b=0.2) with 16 modular coils.

Without coil-surface separation

For the rotating ellipse, initialized with circular coils, turn on weight_bnorm=1 and weight_ttlen=1E-4 (target_length = 5.0). Optimize with CG for 20 iterations.

 -----------COIL DIAGNOSTICS----------------------------------
diagnos :      Bnormal ; Bmn harmonic ;    tor. flux ;  coil length ;     c-s sep. ; 
        :  2.72675E-04 ;  0.00000E+00 ;  0.00000E+00 ;  3.12202E-01 ;  0.00000E+00 ; 
        : Maximum curvature of all the coils is  :  9.600003813602693E-01 ; at coil   1
        : Average length of the coils is         :  8.950953876643659E+00
        : The minimum coil-coil distance is      :  6.444957270149416E-01
        : The minimum coil-plasma distance is    :  8.387641095333912E-01 ; at coil  16
        : Average relative absolute Bn error is  :  3.094201085935241E-03
findaxis: Finding axis at phi =  0.00000E+00 with (R,Z) = (  3.01142E+00, 4.96719E-07 ).
In [20]:
original = hdf5('focus_limiter.h5')
coils_ori = read_coils('limiter.coils')

plt.figure()
plot_plasma_boundary('ellipse.boundary')
plot_focus_poincare(original)

fig = mlab.figure(size=[800,800])
plot_hdf5_surface(original, 'Bmod')
plot_coils(coils_ori, 'real', color=(0.5,0.5,0.5))
fig
Read  93  objects in <HDF5 file "focus_limiter.h5" (mode r)>
FOCUS version : v0.10.00
Read 16 coils in limiter.coils.
read 4 Fourier harmonics for plasma boundary and 0 for Bn distribution in ellipse.boundary.
Out[20]:
PNG image

Use r=0.3 limiter surface, weight_cssep = 4.5E-4, cssep_factor=1

 -----------COIL DIAGNOSTICS----------------------------------
diagnos :      Bnormal ; Bmn harmonic ;    tor. flux ;  coil length ;     c-s sep. ; 
        :  2.40886E-03 ;  0.00000E+00 ;  0.00000E+00 ;  1.14543E-01 ;  8.47694E+01 ; 
        : Maximum curvature of all the coils is  :  1.067298448756655E+00 ; at coil  15
        : Average length of the coils is         :  7.393134245040679E+00
        : The minimum coil-coil distance is      :  7.396835699629960E-01
        : The minimum coil-plasma distance is    :  6.725623414227534E-01 ; at coil   1
        : Average relative absolute Bn error is  :  1.030121125597613E-02
findaxis: Finding axis at phi =  0.00000E+00 with (R,Z) = (  3.00985E+00,-5.13002E-07
In [30]:
plasma_001 = hdf5('focus_limiter.h5')
coils_p001 = read_coils('limiter.coils')

plt.figure()
plot_plasma_boundary('ellipse.boundary')
plot_focus_poincare(plasma_001)

fig = mlab.figure(size=[800,800])
plot_hdf5_surface(plasma_001, 'Bmod')
plot_coils(coils_ori, 'real', color=(0.5,0.5,0.5))
plot_coils(coils_p001, 'real')
fig
Read  93  objects in <HDF5 file "focus_limiter.h5" (mode r)>
FOCUS version : v0.10.00
Read 16 coils in limiter.coils.
read 4 Fourier harmonics for plasma boundary and 0 for Bn distribution in ellipse.boundary.
Out[30]:
PNG image

Use r=0.3 limiter surface, weight_cssep = 4.5E-4, cssep_factor=2

 -----------COIL DIAGNOSTICS----------------------------------
diagnos :      Bnormal ; Bmn harmonic ;    tor. flux ;  coil length ;     c-s sep. ; 
        :  2.81821E-04 ;  0.00000E+00 ;  0.00000E+00 ;  3.06865E-01 ;  3.89463E+01 ; 
        : Maximum curvature of all the coils is  :  9.140296781157982E-01 ; at coil   1
        : Average length of the coils is         :  8.917045951521997E+00
        : The minimum coil-coil distance is      :  6.463554850644817E-01
        : The minimum coil-plasma distance is    :  8.305443528301367E-01 ; at coil   1
        : Average relative absolute Bn error is  :  3.198617114515609E-03
findaxis: Finding axis at phi =  0.00000E+00 with (R,Z) = (  3.01228E+00,-1.57642E-07 ).
In [28]:
plasma_005 = hdf5('focus_limiter.h5')
coils_p005 = read_coils('limiter.coils')

plt.figure()
plot_plasma_boundary('ellipse.boundary')
plot_focus_poincare(plasma_005)

fig = mlab.figure(size=[800,800])
plot_hdf5_surface(plasma_005, 'Bmod')
plot_coils(coils_ori, 'real', color=(0.5,0.5,0.5))
plot_coils(coils_p005, 'real')
fig
Read  93  objects in <HDF5 file "focus_limiter.h5" (mode r)>
FOCUS version : v0.10.00
Read 16 coils in limiter.coils.
read 4 Fourier harmonics for plasma boundary and 0 for Bn distribution in ellipse.boundary.
Out[28]:
PNG image

Use r=0.3 limiter surface, weight_cssep = 4.5E-3, cssep_factor=2

 -----------COIL DIAGNOSTICS----------------------------------
diagnos :      Bnormal ; Bmn harmonic ;    tor. flux ;  coil length ;     c-s sep. ; 
        :  9.44831E-04 ;  0.00000E+00 ;  0.00000E+00 ;  3.10755E-01 ;  3.86087E+01 ; 
        : Maximum curvature of all the coils is  :  8.491652076969817E-01 ; at coil   3
        : Average length of the coils is         :  8.941794764356937E+00
        : The minimum coil-coil distance is      :  6.731266495089485E-01
        : The minimum coil-plasma distance is    :  8.063569541916477E-01 ; at coil   1
        : Average relative absolute Bn error is  :  5.775115250122436E-03
findaxis: Finding axis at phi =  0.00000E+00 with (R,Z) = (  3.00572E+00, 1.54811E-06 ).
In [29]:
plasma_004 = hdf5('focus_limiter.h5')
coils_p004 = read_coils('limiter.coils')

plt.figure()
plot_plasma_boundary('ellipse.boundary')
plot_focus_poincare(plasma_004)

fig = mlab.figure(size=[800,800])
plot_hdf5_surface(plasma_005, 'Bmod')
plot_coils(coils_ori, 'real', color=(0.5,0.5,0.5))
plot_coils(coils_p004, 'real')
fig
Read  93  objects in <HDF5 file "focus_limiter.h5" (mode r)>
FOCUS version : v0.10.00
Read 16 coils in limiter.coils.
read 4 Fourier harmonics for plasma boundary and 0 for Bn distribution in ellipse.boundary.
Out[29]:
PNG image

Use r=0.3 limiter surface, weight_cssep = 4.5E-4, cssep_factor=4

 -----------COIL DIAGNOSTICS----------------------------------
diagnos :      Bnormal ; Bmn harmonic ;    tor. flux ;  coil length ;     c-s sep. ; 
        :  2.64044E-05 ;  0.00000E+00 ;  0.00000E+00 ;  9.35567E-01 ;  7.52174E+00 ; 
        : Maximum curvature of all the coils is  :  7.925916263845185E-01 ; at coil   2
        : Average length of the coils is         :  1.183940868491258E+01
        : The minimum coil-coil distance is      :  3.779430861593034E-01
        : The minimum coil-plasma distance is    :  1.230939381628111E+00 ; at coil   1
        : Average relative absolute Bn error is  :  9.562508717885739E-04
findaxis: Finding axis at phi =  0.00000E+00 with (R,Z) = (  3.00530E+00, 6.35230E-08 ).
In [27]:
plasma_005_q4 = hdf5('focus_limiter.h5')
coils_p005_q4 = read_coils('limiter.coils')

plt.figure()
plot_plasma_boundary('ellipse.boundary')
plot_focus_poincare(plasma_005_q4)

fig = mlab.figure(size=[800,800])
plot_hdf5_surface(plasma_005_q4, 'Bmod')
plot_coils(coils_ori, 'real', color=(0.5,0.5,0.5))
plot_coils(coils_p005_q4, 'real')
fig
Read  93  objects in <HDF5 file "focus_limiter.h5" (mode r)>
FOCUS version : v0.10.00
Read 16 coils in limiter.coils.
read 4 Fourier harmonics for plasma boundary and 0 for Bn distribution in ellipse.boundary.
Out[27]:
PNG image

Use r=0.5 limiter surface, weight_cssep = 4.5E-4, cssep_factor=4

 -----------COIL DIAGNOSTICS----------------------------------
diagnos :      Bnormal ; Bmn harmonic ;    tor. flux ;  coil length ;     c-s sep. ; 
        :  4.33171E-05 ;  0.00000E+00 ;  0.00000E+00 ;  1.29380E+00 ;  1.13408E+01 ; 
        : Maximum curvature of all the coils is  :  7.153194582707387E-01 ; at coil   1
        : Average length of the coils is         :  1.304298679204274E+01
        : The minimum coil-coil distance is      :  2.446381067565838E-01
        : The minimum coil-plasma distance is    :  1.470690205805498E+00 ; at coil  16
        : Average relative absolute Bn error is  :  1.203976745333288E-03
findaxis: Finding axis at phi =  0.00000E+00 with (R,Z) = (  3.00498E+00,-1.29908E-07 ).
In [26]:
plasma_010_q4 = hdf5('focus_limiter.h5')
coils_p010_q4 = read_coils('limiter.coils')

plt.figure()
plot_plasma_boundary('ellipse.boundary')
plot_focus_poincare(plasma_010_q4)

fig = mlab.figure(size=[800,800])
plot_hdf5_surface(plasma_010_q4, 'Bmod')
plot_coils(coils_ori, 'real', color=(0.5,0.5,0.5))
plot_coils(coils_p010_q4, 'real')
fig
Read  93  objects in <HDF5 file "focus_limiter.h5" (mode r)>
FOCUS version : v0.10.00
Read 16 coils in limiter.coils.
read 4 Fourier harmonics for plasma boundary and 0 for Bn distribution in ellipse.boundary.
Out[26]:
PNG image

Summary

Here is the summary.

No. limiter surface radius weight_cssep cssep_factor Bnorm Ave. length
1 N/A 0 N/A 2.72675E-04 8.950953876643659E+00
2 0.3 4.5E-4 1 2.40886E-03 7.393134245040679E+00
3 0.3 4.5E-4 2 2.81821E-04 8.917045951521997E+00
4 0.3 4.5E-3 2 9.44831E-04 8.941794764356937E+00
5 0.3 4.5E-4 4 2.64044E-05 1.183940868491258E+01
6 0.5 4.5E-4 4 4.33171E-05 1.304298679204274E+01

Some observations:

  • The coil-surface separation is working, but make sure the coils are all outside the limiter surface and use an appropriate weight (might need some trials).
  • By increasing the weight_cssep, cssep_factor and limiter surface, the coils are getting further (longer)
  • Increasing cssep_factor is more significant than increasing the weight.
  • When cssep_factor is small, it actually has effect of compressing the coils, due to the $dl$ in the numerator (check surfsep.pdf).