diff --git a/desc/coils.py b/desc/coils.py index 77b84a45bb..e6bf6b3d88 100644 --- a/desc/coils.py +++ b/desc/coils.py @@ -118,6 +118,37 @@ class FourierRZCoil(Coil, FourierRZCurve): whether to enforce stellarator symmetry name : str name for this coil + + Examples + -------- + .. code-block:: python + + from desc.coils import FourierRZCoil + from desc.grid import LinearGrid + import numpy as np + + I = 10 + mu0 = 4 * np.pi * 1e-7 + R_coil = 10 + # circular coil given by R(phi) = 10 + coil = FourierRZCoil( + current=I, R_n=R_coil, Z_n=0, modes_R=[0], grid=LinearGrid(N=100) + ) + z0 = 10 + field_evaluated = coil.compute_magnetic_field( + np.array([[0, 0, 0], [0, 0, z0]]), basis="rpz" + ) + np.testing.assert_allclose( + field_evaluated[0, :], np.array([0, 0, mu0 * I / 2 / R_coil]), atol=1e-8 + ) + np.testing.assert_allclose( + field_evaluated[1, :], + np.array( + [0, 0, mu0 * I / 2 * R_coil**2 / (R_coil**2 + z0**2) ** (3 / 2)] + ), + atol=1e-8, + ) + """ _io_attrs_ = Coil._io_attrs_ + FourierRZCurve._io_attrs_ @@ -150,6 +181,40 @@ class FourierXYZCoil(Coil, FourierXYZCurve): name : str name for this coil + Examples + -------- + .. code-block:: python + + from desc.coils import FourierXYZCoil + from desc.grid import LinearGrid + import numpy as np + + I = 10 + mu0 = 4 * np.pi * 1e-7 + R_coil = 10 + # circular coil given by X(phi) = 10*cos(phi), Y(phi) = 10*sin(phi) + coil = FourierXYZCoil( + current=I, + X_n=[0, R_coil, 0], + Y_n=[0, 0, R_coil], + Z_n=[0, 0, 0], + modes=[0, 1, -1], + grid=LinearGrid(N=100), + ) + z0 = 10 + field_evaluated = coil.compute_magnetic_field( + np.array([[0, 0, 0], [0, 0, z0]]), basis="rpz" + ) + np.testing.assert_allclose( + field_evaluated[0, :], np.array([0, 0, mu0 * I / 2 / R_coil]), atol=1e-8 + ) + np.testing.assert_allclose( + field_evaluated[1, :], + np.array([0, 0, mu0 * I / 2 * R_coil**2 / (R_coil**2 + z0**2) ** (3 / 2)]), + atol=1e-8, + ) + + """ _io_attrs_ = Coil._io_attrs_ + FourierXYZCurve._io_attrs_ @@ -188,6 +253,40 @@ class FourierPlanarCoil(Coil, FourierPlanarCurve): name : str name for this coil + Examples + -------- + .. code-block:: python + + from desc.coils import FourierPlanarCoil + from desc.grid import LinearGrid + import numpy as np + + I = 10 + mu0 = 4 * np.pi * 1e-7 + R_coil = 10 + # circular coil given by center at (0,0,0) + # and normal vector in Z direction (0,0,1) and radius 10 + coil = FourierPlanarCoil( + current=I, + center=[0, 0, 0], + normal=[0, 0, 1], + r_n=R_coil, + modes=[0], + grid=LinearGrid(N=100), + ) + z0 = 10 + field_evaluated = coil.compute_magnetic_field( + np.array([[0, 0, 0], [0, 0, z0]]), basis="rpz" + ) + np.testing.assert_allclose( + field_evaluated[0, :], np.array([0, 0, mu0 * I / 2 / R_coil]), atol=1e-8 + ) + np.testing.assert_allclose( + field_evaluated[1, :], + np.array([0, 0, mu0 * I / 2 * R_coil**2 / (R_coil**2 + z0**2) ** (3 / 2)]), + atol=1e-8, + ) + """ _io_attrs_ = Coil._io_attrs_ + FourierPlanarCurve._io_attrs_ diff --git a/docs/api.rst b/docs/api.rst index 86e4b79403..82c7a3e004 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -17,6 +17,18 @@ Basis desc.basis.ChebyshevDoubleFourierBasis desc.basis.FourierZernikeBasis +Coils +***** + +.. autosummary:: + :toctree: _api/coils/ + :recursive: + :template: class.rst + + desc.coils.FourierRZCoil + desc.coils.FourierXYZCoil + desc.coils.FourierPlanarCoil + desc.coils.CoilSet Continuation ************ @@ -104,6 +116,22 @@ IO desc.io.InputReader desc.io.load +Magnetic Fields +*************** + +.. autosummary:: + :toctree: _api/magnetic_fields/ + :recursive: + + desc.magnetic_fields.ScaledMagneticField + desc.magnetic_fields.SumMagneticField + desc.magnetic_fields.ToroidalMagneticField + desc.magnetic_fields.VerticalMagneticField + desc.magnetic_fields.PoloidalMagneticField + desc.magnetic_fields.SplineMagneticField + desc.magnetic_fields.ScalarPotentialField + desc.magnetic_fields.field_line_integrate + Objective Functions *******************