Tokamak#
This is characterized by a continuous blanket that goes around the inboard and outboard sides of the plasma.
Tokamak#
The spherical_tokamak function provides a parametric tokamak shaped reactor.
This is characterized by a blanket that only goes around the outboard sides of the plasma.
This reactor allows for a separate vertical and radial build which allows different thickness layers in the blanket.
import paramak
result = paramak.tokamak(
radial_build=[
(paramak.LayerType.GAP, 10),
(paramak.LayerType.SOLID, 30),
(paramak.LayerType.SOLID, 50),
(paramak.LayerType.SOLID, 10),
(paramak.LayerType.SOLID, 120),
(paramak.LayerType.SOLID, 20),
(paramak.LayerType.GAP, 60),
(paramak.LayerType.PLASMA, 300),
(paramak.LayerType.GAP, 60),
(paramak.LayerType.SOLID, 20),
(paramak.LayerType.SOLID, 120),
(paramak.LayerType.SOLID, 10),
],
vertical_build=[
(paramak.LayerType.SOLID, 15),
(paramak.LayerType.SOLID, 80),
(paramak.LayerType.SOLID, 10),
(paramak.LayerType.GAP, 50),
(paramak.LayerType.PLASMA, 700),
(paramak.LayerType.GAP, 60),
(paramak.LayerType.SOLID, 10),
(paramak.LayerType.SOLID, 40),
(paramak.LayerType.SOLID, 15),
],
triangularity=0.55,
rotation_angle=180,
)
result.save(f"tokamak_minimal.step")
Tokamak from plasma#
The tokamak_from_plasma function provides a parametric tokamak shaped reactor.
This reactor requires few arguments to create as it keeps the vertical build of the blanket layers the same thickness as the radial build.
import paramak
result = paramak.tokamak_from_plasma(
radial_build=[
(paramak.LayerType.GAP, 10),
(paramak.LayerType.SOLID, 30),
(paramak.LayerType.SOLID, 50),
(paramak.LayerType.SOLID, 10),
(paramak.LayerType.SOLID, 120),
(paramak.LayerType.SOLID, 20),
(paramak.LayerType.GAP, 60),
(paramak.LayerType.PLASMA, 300),
(paramak.LayerType.GAP, 60),
(paramak.LayerType.SOLID, 20),
(paramak.LayerType.SOLID, 120),
(paramak.LayerType.SOLID, 10),
],
elongation=2,
triangularity=0.55,
rotation_angle=90,
)
Tokamak with divertor#
TODO
Tokamak with poloidal field coils#
TODO
Tokamak with toroidal field coils#
TODO
Tokamak with negative triangularity#
The triangularity argument can be set to a negative value to make a plasma with a negative triangularity.
This example makes a tokamak with a negative but this would work on any reactor.
import paramak
result = paramak.tokamak(
radial_build=[
(paramak.LayerType.GAP, 10),
(paramak.LayerType.SOLID, 30),
(paramak.LayerType.SOLID, 50),
(paramak.LayerType.SOLID, 10),
(paramak.LayerType.SOLID, 120),
(paramak.LayerType.SOLID, 20),
(paramak.LayerType.GAP, 60),
(paramak.LayerType.PLASMA, 300),
(paramak.LayerType.GAP, 60),
(paramak.LayerType.SOLID, 20),
(paramak.LayerType.SOLID, 120),
(paramak.LayerType.SOLID, 10),
],
vertical_build=[
(paramak.LayerType.SOLID, 15),
(paramak.LayerType.SOLID, 80),
(paramak.LayerType.SOLID, 10),
(paramak.LayerType.GAP, 50),
(paramak.LayerType.PLASMA, 700),
(paramak.LayerType.GAP, 60),
(paramak.LayerType.SOLID, 10),
(paramak.LayerType.SOLID, 40),
(paramak.LayerType.SOLID, 15),
],
triangularity=-0.55,
rotation_angle=180,
)
result.save(f"tokamak_minimal.step")
Tokamak with several customizations#
- Combining many of the examples together to produce a Tokamak
with extra blanket layers, a lower divertor, PF and TF coils.
import paramak
from cadquery import Workplane
# makes a rectangle that overlaps the lower blanket under the plasma
# the intersection of this and the layers will form the lower divertor
points = [(300, -700), (300, 0), (400, 0), (400, -700)]
divertor_lower = Workplane('XZ', origin=(0,0,0)).polyline(points).close().revolve(180)
# creates a toroidal
tf = paramak.toroidal_field_coil_rectangle(
horizontal_start_point = (10, 520),
vertical_mid_point = (860, 0),
thickness = 50,
distance = 40,
with_inner_leg = True,
rotation_angle = 180,
azimuthal_placement_angles = [0, 30, 60, 90, 120, 150, 180],
)
extra_cut_shapes = [tf]
# creates pf coil
for case_thickness, height, width, center_point in zip(
[10, 15, 15, 10], [20, 50, 50, 20], [20, 50, 50, 20],
[(730, 370), (810, 235), (810, -235), (730, -370)]
):
extra_cut_shapes.append(
paramak.poloidal_field_coil(
height=height, width=width, center_point=center_point, rotation_angle=180
)
)
extra_cut_shapes.append(
paramak.poloidal_field_coil_case(
coil_height=height,
coil_width=width,
casing_thickness=case_thickness,
rotation_angle=180,
center_point=center_point,
)
)
my_reactor = paramak.tokamak(
radial_build=[
(paramak.LayerType.GAP, 10),
(paramak.LayerType.SOLID, 30),
(paramak.LayerType.SOLID, 50),
(paramak.LayerType.SOLID, 10),
(paramak.LayerType.SOLID, 60),
(paramak.LayerType.SOLID, 60),
(paramak.LayerType.SOLID, 20),
(paramak.LayerType.GAP, 60),
(paramak.LayerType.PLASMA, 300),
(paramak.LayerType.GAP, 60),
(paramak.LayerType.SOLID, 20),
(paramak.LayerType.SOLID, 60),
(paramak.LayerType.SOLID, 60),
(paramak.LayerType.SOLID, 10),
],
vertical_build=[
(paramak.LayerType.SOLID, 10),
(paramak.LayerType.SOLID, 50),
(paramak.LayerType.SOLID, 50),
(paramak.LayerType.SOLID, 20),
(paramak.LayerType.GAP, 60),
(paramak.LayerType.PLASMA, 650),
(paramak.LayerType.GAP, 60),
(paramak.LayerType.SOLID, 20),
(paramak.LayerType.SOLID, 50),
(paramak.LayerType.SOLID, 50),
(paramak.LayerType.SOLID, 10),
],
triangularity=0.55,
rotation_angle=180,
extra_cut_shapes=extra_cut_shapes,
extra_intersect_shapes=[divertor_lower]
)
my_reactor.save(f"tokamak_with_customizations.step")