Source code for freegs.test_filament_coil

import numpy as np

from .coil import Coil
from .filament_coil import FilamentCoil
from .machine import Circuit


[docs] def test_single(): """ Test that a single turn FilamentCoil is the same as a Coil """ fcoil = FilamentCoil(1.1, 0.2, current=100.0) coil = Coil(1.1, 0.2, current=100.0) assert np.isclose(coil.controlPsi(0.3, 0.1), fcoil.controlPsi(0.3, 0.1)) assert np.isclose(coil.controlBr(0.3, 0.1), fcoil.controlBr(0.3, 0.1))
[docs] def test_two_filaments(): """ FilamentCoil with two filaments same as circuit with two coils at half current """ fcoil = FilamentCoil([1.1, 1.2], [0.2, -0.3]) circuit = Circuit( [ ("A", FilamentCoil(1.1, 0.2), 0.5), ("B", FilamentCoil(1.2, -0.3), 0.5), ] ) # Check the Greens functions (field produced by unit circuit current) assert np.isclose(circuit.controlPsi(0.3, 0.1), fcoil.controlPsi(0.3, 0.1)) assert np.isclose(circuit.controlBr(0.3, 0.1), fcoil.controlBr(0.3, 0.1)) assert np.isclose(circuit.controlBz(0.3, 0.1), fcoil.controlBz(0.3, 0.1)) # Check the field, putting the same current fcoil.current = 100 circuit.current = 100 assert np.isclose(circuit.psi(0.3, 0.1), fcoil.psi(0.3, 0.1)) assert np.isclose(circuit.Br(0.3, 0.1), fcoil.Br(0.3, 0.1)) assert np.isclose(circuit.Bz(0.3, 0.1), fcoil.Bz(0.3, 0.1))
[docs] def test_two_turns(): """ FilamentCoil with two turns same as circuit with two coils """ fcoil = FilamentCoil(1.1, 1.2, turns=2) circuit = Circuit( [ ("A", FilamentCoil(1.1, 1.2), 1.0), ("B", FilamentCoil(1.1, 1.2), 1.0), ] ) # Check the Greens functions (field produced by unit circuit current) assert np.isclose(circuit.controlPsi(0.3, 0.1), fcoil.controlPsi(0.3, 0.1)) assert np.isclose(circuit.controlBr(0.3, 0.1), fcoil.controlBr(0.3, 0.1)) assert np.isclose(circuit.controlBz(0.3, 0.1), fcoil.controlBz(0.3, 0.1))
[docs] def test_mirrored(): """ Mirrored FilamentCoil the same as two coils in a circuit at half current Filaments in a FilamentCoil are wired in parallel, not in serial. """ fcoil = FilamentCoil([1.1, 1.1], [0.2, -0.2]) circuit = Circuit( [ ("A", Coil(1.1, 0.2), 0.5), ("B", Coil(1.1, -0.2), 0.5), ] ) # Check assert np.isclose(circuit.controlPsi(0.3, 0.1), fcoil.controlPsi(0.3, 0.1)) assert np.isclose(circuit.controlBr(0.3, 0.1), fcoil.controlBr(0.3, 0.1)) assert np.isclose(circuit.controlBz(0.3, 0.1), fcoil.controlBz(0.3, 0.1))
[docs] def test_move_R(): """ Changing major radius property R changes all filament locations """ dR = 0.6 coil1 = FilamentCoil([1.1, 0.2], [1.2, -0.3], current=100.0) coil2 = FilamentCoil([1.1 + dR, 0.2 + dR], [1.2, -0.3], current=100.0) # Shift coil1 to same location as coil2 coil1.R += dR assert np.isclose(coil1.controlPsi(0.4, 0.5), coil2.controlPsi(0.4, 0.5)) assert np.isclose(coil1.controlBr(0.3, -0.2), coil2.controlBr(0.3, -0.2)) assert np.isclose(coil1.controlBz(1.75, 1.2), coil2.controlBz(1.75, 1.2))
[docs] def test_move_Z(): """ Changing height property Z changes all filament locations """ dZ = 0.4 coil1 = FilamentCoil([1.1, 0.2], [1.2, -0.3], current=100.0) coil2 = FilamentCoil([1.1, 0.2], [1.2 + dZ, -0.3 + dZ], current=100.0) # Shift coil1 to same location as coil2 coil1.Z += dZ assert np.isclose(coil1.controlPsi(0.4, 0.5), coil2.controlPsi(0.4, 0.5)) assert np.isclose(coil1.controlBr(0.3, -0.2), coil2.controlBr(0.3, -0.2)) assert np.isclose(coil1.controlBz(1.75, 1.2), coil2.controlBz(1.75, 1.2))