torus_solver.gui_vtk

class torus_solver.gui_vtk.CutGUIConfig(R0=3.0, a=0.3, n_theta=32, n_phi=32, theta_cut=3.141592653589793, sigma_s=1.0, V_cut_default=1.0, V_cut_slider_max=5.0, sigma_theta=0.25, sigma_phi=0.25, cg_tol=1e-08, cg_maxiter=800, n_electrodes_max=32, current_default_A=1000.0, current_slider_max_A=3000.0, biot_savart_eps=1e-08, n_fieldlines=12, fieldline_steps=500, fieldline_step_size_m=0.03, Bext0=0.0001, Bpol0=0.0, bg_field_default_on=False, bg_poloidal_default_on=False, surface_opacity=0.35, window_size=(1200, 820))[source]

Bases: object

Parameters:
  • R0 (float)

  • a (float)

  • n_theta (int)

  • n_phi (int)

  • theta_cut (float)

  • sigma_s (float)

  • V_cut_default (float)

  • V_cut_slider_max (float)

  • sigma_theta (float)

  • sigma_phi (float)

  • cg_tol (float)

  • cg_maxiter (int)

  • n_electrodes_max (int)

  • current_default_A (float)

  • current_slider_max_A (float)

  • biot_savart_eps (float)

  • n_fieldlines (int)

  • fieldline_steps (int)

  • fieldline_step_size_m (float)

  • Bext0 (float)

  • Bpol0 (float)

  • bg_field_default_on (bool)

  • bg_poloidal_default_on (bool)

  • surface_opacity (float)

  • window_size (tuple[int, int])

Bext0: float = 0.0001
Bpol0: float = 0.0
R0: float = 3.0
V_cut_default: float = 1.0
V_cut_slider_max: float = 5.0
a: float = 0.3
bg_field_default_on: bool = False
bg_poloidal_default_on: bool = False
biot_savart_eps: float = 1e-08
cg_maxiter: int = 800
cg_tol: float = 1e-08
current_default_A: float = 1000.0
current_slider_max_A: float = 3000.0
fieldline_step_size_m: float = 0.03
fieldline_steps: int = 500
n_electrodes_max: int = 32
n_fieldlines: int = 12
n_phi: int = 32
n_theta: int = 32
sigma_phi: float = 0.25
sigma_s: float = 1.0
sigma_theta: float = 0.25
surface_opacity: float = 0.35
theta_cut: float = 3.141592653589793
window_size: tuple[int, int] = (1200, 820)
class torus_solver.gui_vtk.GUIConfig(R0=3.0, a=1.0, n_theta=32, n_phi=32, sigma_theta=0.25, sigma_phi=0.25, sigma_s=1.0, cg_tol=1e-08, cg_maxiter=800, n_electrodes_max=32, current_default_A=1000.0, current_slider_max_A=3000.0, biot_savart_eps=1e-08, n_fieldlines=12, fieldline_steps=500, fieldline_step_size_m=0.03, Bext0=0.0001, Bpol0=0.0, bg_field_default_on=False, bg_poloidal_default_on=False, surface_opacity=0.35, window_size=(1200, 820))[source]

Bases: object

Parameters:
  • R0 (float)

  • a (float)

  • n_theta (int)

  • n_phi (int)

  • sigma_theta (float)

  • sigma_phi (float)

  • sigma_s (float)

  • cg_tol (float)

  • cg_maxiter (int)

  • n_electrodes_max (int)

  • current_default_A (float)

  • current_slider_max_A (float)

  • biot_savart_eps (float)

  • n_fieldlines (int)

  • fieldline_steps (int)

  • fieldline_step_size_m (float)

  • Bext0 (float)

  • Bpol0 (float)

  • bg_field_default_on (bool)

  • bg_poloidal_default_on (bool)

  • surface_opacity (float)

  • window_size (tuple[int, int])

Bext0: float = 0.0001
Bpol0: float = 0.0
R0: float = 3.0
a: float = 1.0
bg_field_default_on: bool = False
bg_poloidal_default_on: bool = False
biot_savart_eps: float = 1e-08
cg_maxiter: int = 800
cg_tol: float = 1e-08
current_default_A: float = 1000.0
current_slider_max_A: float = 3000.0
fieldline_step_size_m: float = 0.03
fieldline_steps: int = 500
n_electrodes_max: int = 32
n_fieldlines: int = 12
n_phi: int = 32
n_theta: int = 32
sigma_phi: float = 0.25
sigma_s: float = 1.0
sigma_theta: float = 0.25
surface_opacity: float = 0.35
window_size: tuple[int, int] = (1200, 820)
class torus_solver.gui_vtk.TorusCutVoltageGUI(cfg, *, initial_electrodes=None)[source]

Bases: object

VTK GUI: a toroidal cut voltage drives poloidal current; optional extra electrodes add sources/sinks.

Parameters:
mode: Literal['none', 'add_source', 'add_sink', 'move']
run()[source]
Return type:

None

scalar_name: Literal['|K|', 'V', 's', 'K_theta', 'K_phi']
selected: int | None
surface: TorusSurface
update_solution()[source]
Return type:

None

class torus_solver.gui_vtk.TorusElectrodeGUI(cfg, *, initial_electrodes=None)[source]

Bases: object

VTK GUI: click to add/move electrodes; slider to change current; see field lines.

Parameters:
  • cfg (GUIConfig)

  • initial_electrodes (dict | None)

mode: Literal['none', 'add_source', 'add_sink', 'move']
run()[source]
Return type:

None

scalar_name: Literal['|K|', 'V', 's', 'K_theta', 'K_phi']
selected: int | None
surface: TorusSurface
update_solution()[source]
Return type:

None

class torus_solver.gui_vtk.TorusVmecBnOptimizeGUI(cfg)[source]

Bases: object

VTK GUI: optimize electrode sources/sinks to reduce (B·n)/norm(B) on a target VMEC surface.

Parameters:

cfg (VmecOptGUIConfig)

mode: Literal['none', 'add_source', 'add_sink', 'move']
run()[source]
Return type:

None

scalar_name: Literal['|K|', 'V', 's', 'K_theta', 'K_phi']
selected: int | None
surface: TorusSurface
update_solution()[source]
Return type:

None

class torus_solver.gui_vtk.VmecOptGUIConfig(vmec_input='examples/data/vmec/input.QA_nfp2', surf_n_theta=32, surf_n_phi=56, fit_margin=0.7, R0=1.0, a=0.3, n_theta=32, n_phi=32, B0=1.0, Bpol0=0.0, trace_include_bg_default_on=True, n_electrodes_max=64, n_electrodes_init=32, current_default_A=1000000.0, current_slider_max_A=10000000.0, sigma_theta=0.25, sigma_phi=0.25, sigma_s=1.0, current_scale=None, init_current_raw_rms=1.0, lr=0.01, reg_currents=0.001, optimize_positions=True, steps_per_opt=25, bn_p=8, cg_tol=1e-10, cg_maxiter=2000, use_preconditioner=False, biot_savart_eps=1e-08, n_fieldlines=12, fieldline_steps=500, fieldline_step_size_m=0.03, surface_opacity=0.35, target_opacity=0.25, window_size=(1300, 880))[source]

Bases: object

Parameters:
  • vmec_input (str)

  • surf_n_theta (int)

  • surf_n_phi (int)

  • fit_margin (float)

  • R0 (float)

  • a (float)

  • n_theta (int)

  • n_phi (int)

  • B0 (float)

  • Bpol0 (float)

  • trace_include_bg_default_on (bool)

  • n_electrodes_max (int)

  • n_electrodes_init (int)

  • current_default_A (float)

  • current_slider_max_A (float)

  • sigma_theta (float)

  • sigma_phi (float)

  • sigma_s (float)

  • current_scale (float | None)

  • init_current_raw_rms (float)

  • lr (float)

  • reg_currents (float)

  • optimize_positions (bool)

  • steps_per_opt (int)

  • bn_p (int)

  • cg_tol (float)

  • cg_maxiter (int)

  • use_preconditioner (bool)

  • biot_savart_eps (float)

  • n_fieldlines (int)

  • fieldline_steps (int)

  • fieldline_step_size_m (float)

  • surface_opacity (float)

  • target_opacity (float)

  • window_size (tuple[int, int])

B0: float = 1.0
Bpol0: float = 0.0
R0: float = 1.0
a: float = 0.3
biot_savart_eps: float = 1e-08
bn_p: int = 8
cg_maxiter: int = 2000
cg_tol: float = 1e-10
current_default_A: float = 1000000.0
current_scale: float | None = None
current_slider_max_A: float = 10000000.0
fieldline_step_size_m: float = 0.03
fieldline_steps: int = 500
fit_margin: float = 0.7
init_current_raw_rms: float = 1.0
lr: float = 0.01
n_electrodes_init: int = 32
n_electrodes_max: int = 64
n_fieldlines: int = 12
n_phi: int = 32
n_theta: int = 32
optimize_positions: bool = True
reg_currents: float = 0.001
sigma_phi: float = 0.25
sigma_s: float = 1.0
sigma_theta: float = 0.25
steps_per_opt: int = 25
surf_n_phi: int = 56
surf_n_theta: int = 32
surface_opacity: float = 0.35
target_opacity: float = 0.25
trace_include_bg_default_on: bool = True
use_preconditioner: bool = False
vmec_input: str = 'examples/data/vmec/input.QA_nfp2'
window_size: tuple[int, int] = (1300, 880)
torus_solver.gui_vtk.run_torus_cut_voltage_gui(*, cfg=CutGUIConfig(R0=3.0, a=0.3, n_theta=32, n_phi=32, theta_cut=3.141592653589793, sigma_s=1.0, V_cut_default=1.0, V_cut_slider_max=5.0, sigma_theta=0.25, sigma_phi=0.25, cg_tol=1e-08, cg_maxiter=800, n_electrodes_max=32, current_default_A=1000.0, current_slider_max_A=3000.0, biot_savart_eps=1e-08, n_fieldlines=12, fieldline_steps=500, fieldline_step_size_m=0.03, Bext0=0.0001, Bpol0=0.0, bg_field_default_on=False, bg_poloidal_default_on=False, surface_opacity=0.35, window_size=(1200, 820)), initial_electrodes=None)[source]

Entry point for the cut-voltage (+electrodes) GUI examples.

Return type:

None

Parameters:
torus_solver.gui_vtk.run_torus_electrode_gui(*, cfg=GUIConfig(R0=3.0, a=1.0, n_theta=32, n_phi=32, sigma_theta=0.25, sigma_phi=0.25, sigma_s=1.0, cg_tol=1e-08, cg_maxiter=800, n_electrodes_max=32, current_default_A=1000.0, current_slider_max_A=3000.0, biot_savart_eps=1e-08, n_fieldlines=12, fieldline_steps=500, fieldline_step_size_m=0.03, Bext0=0.0001, Bpol0=0.0, bg_field_default_on=False, bg_poloidal_default_on=False, surface_opacity=0.35, window_size=(1200, 820)), initial_electrodes=None)[source]

Entry point for examples.

Return type:

None

Parameters:
  • cfg (GUIConfig)

  • initial_electrodes (dict | None)

torus_solver.gui_vtk.run_torus_vmec_optimize_gui(*, cfg=VmecOptGUIConfig(vmec_input='examples/data/vmec/input.QA_nfp2', surf_n_theta=32, surf_n_phi=56, fit_margin=0.7, R0=1.0, a=0.3, n_theta=32, n_phi=32, B0=1.0, Bpol0=0.0, trace_include_bg_default_on=True, n_electrodes_max=64, n_electrodes_init=32, current_default_A=1000000.0, current_slider_max_A=10000000.0, sigma_theta=0.25, sigma_phi=0.25, sigma_s=1.0, current_scale=None, init_current_raw_rms=1.0, lr=0.01, reg_currents=0.001, optimize_positions=True, steps_per_opt=25, bn_p=8, cg_tol=1e-10, cg_maxiter=2000, use_preconditioner=False, biot_savart_eps=1e-08, n_fieldlines=12, fieldline_steps=500, fieldline_step_size_m=0.03, surface_opacity=0.35, target_opacity=0.25, window_size=(1300, 880)))[source]
Return type:

None

Parameters:

cfg (VmecOptGUIConfig)

torus_solver.gui_vtk.torus_angles_from_point(R0, p)[source]

Map xyz -> (theta,phi) for points on/near the torus surface.

Return type:

tuple[float, float]

Parameters:
  • R0 (float)

  • p (ndarray)

torus_solver.gui_vtk.torus_xyz(R0, a, theta, phi)[source]

Map (theta,phi) -> xyz on the circular torus.

Return type:

ndarray

Parameters:
  • R0 (float)

  • a (float)

  • theta (ndarray)

  • phi (ndarray)