Tutorial

The solver of Kapchinsky-Vladimirsky envelope equation for electron beam with space charge.

Including libraries

First connect the necessary libraries and configure the graphics parameters.

[1]:
import numpy as np
import holoviews as hv
hv.extension('matplotlib')

import warnings
warnings.filterwarnings('ignore')

Some plotting options:

[2]:
%output size=200 backend='matplotlib' fig='png' dpi=100
%opts Curve Spread [aspect=3 show_grid=True] (linewidth=2 alpha=0.7)
%opts Spread (linewidth=1 alpha=0.4)
[3]:
import kenv as kv
kv.__version__
[3]:
'0.3.0.0'

Define accelerator beamline parameters

[4]:
acc = kv.Accelerator(z_start=0, z_stop=5, dz=0.01)

Define the accelerating field profile \(E_z(z)\):

[5]:
#              Unique name,  z-position [m],  Ez [MV/m],  Ez(z) profile
acc.add_accel('Acc. 1',      1.5,            -1,         'Ez.dat')
acc.add_accel('Acc. 2',      3.5,            -1,         'Ez.dat')
[6]:
acc.compile()

Let’s plot \(E_z(z):\)

[7]:
dim_z  = hv.Dimension('z',  unit='m')
dim_Ez = hv.Dimension('Ez', unit='MV/m', label='$E_z$')
[8]:
z  = acc.z
hv.Curve((z, acc.Ez(z)), kdims=dim_z, vdims=dim_Ez)
[8]:

The same procedure is required to define the magnetic field profile \(B_z(z)\):

[9]:
#                 Unique name,  z-position [m],  Bz [T],  Bz(z) profile
acc.add_solenoid('Sol. 1',      1.0,             0.05,   'Bz.dat')
acc.add_solenoid('Sol. 2',      2.0,             0.06,   'Bz.dat')
acc.add_solenoid('Sol. 3',      3.0,             0.07,   'Bz.dat')
acc.add_solenoid('Sol. 4',      4.0,             0.08,   'Bz.dat')
[10]:
acc.compile()
[11]:
dim_Bz = hv.Dimension('Bz', unit='Gs', label='$B_z$')
[12]:
z_Bz = hv.Curve((z, acc.Bz(z)*1e4), kdims=dim_z, vdims=dim_Bz)
[13]:
z_Bz
[13]:

Define the electron beam parameters

[14]:
beam = kv.Beam(
    energy = 2,     # MeV
    current = 2e3,  # A
    radius_x = 50e-3, # initial r (m)
    radius_y = 50e-3, # initial r (m)
    radius_xp = 10e-3,     # initial r' (rad)
    radius_yp = 10e-3,     # initial r' (rad)
    #x  = 2.5e-2,   # horizontal centroid position (m)
    xp = 10e-3,     # horizontal centroid angle (rad)
    y = 0,          # vertical centroid position (m)
    normalized_emittance = 1000e-6 # m*rad
)

Run the simulation

Now we can run the simulation in order to find the beam envelope:

[15]:
sim = kv.Simulation(beam, acc)
[16]:
sim.track(centroid=True)

Plot the simulation results

[17]:
dim_E = hv.Dimension('E', unit='MeV', label='Electron energy',
                     range=(0,None))
[18]:
hv.Curve((z, sim.gamma(z)*0.511), kdims=dim_z, vdims=dim_E)
[18]:
[19]:
dim_x = hv.Dimension('x', unit='cm', range=(-15,+15))
dim_y = hv.Dimension('y', unit='cm', range=(-15,+15))

Beam centroid:

[20]:
x = sim.centroid_x # m
z_x = hv.Curve((z, x(z)*100), kdims=dim_z, vdims=dim_x)#.opts(linestyle='--')
[21]:
z_x
[21]:
[22]:
y = sim.centroid_y # m
z_y = hv.Curve((z, y(z)), kdims=dim_z, vdims=dim_y)#.opts(linestyle='--')
[23]:
z_y
[23]:

Beam envelope:

[24]:
x_size = sim.envelope_x # m
z_x * hv.Spread((z, 0, x_size(z)*100))
[24]:
[25]:
print(acc)
Accelerator structure.
        Solenoids:
        [ 1.0 m, 0.05 T, Bz.dat, Sol. 1, 0.0 m, 0.0 rad, 0.0 m, 0.0 rad]
        [ 2.0 m, 0.06 T, Bz.dat, Sol. 2, 0.0 m, 0.0 rad, 0.0 m, 0.0 rad]
        [ 3.0 m, 0.07 T, Bz.dat, Sol. 3, 0.0 m, 0.0 rad, 0.0 m, 0.0 rad]
        [ 4.0 m, 0.08 T, Bz.dat, Sol. 4, 0.0 m, 0.0 rad, 0.0 m, 0.0 rad]
        Accelerating modules:
        [ 1.5 m, -1 T, Ez.dat, Acc. 1, 0.0 m, 0.0 rad, 0.0 m, 0.0 rad]
        [ 3.5 m, -1 T, Ez.dat, Acc. 2, 0.0 m, 0.0 rad, 0.0 m, 0.0 rad]
        Quadrupoles:
        Correctors x:
        Correctors y:

[26]:
print(beam)
Beam parameters:
        Current 2000.0 A
        Energy  2 MeV
        Total momentum  2.4584539418911224 MeV/c
        Rel. factor     4.913902396989699
        Radius x        50.0 mm
        Radius y        50.0 mm
        Radius x prime  10.0 mrad
        Radius y prime  10.0 mrad
        Horizontal centroid position    0.0 mm
        Vertical centroid position      0.0 mm
        Horizontal centroid angle       10.0 mrad
        Vertical centroid angle 0.0 mrad
        Larmor angle    0.0 rad
        Norm. emitt x   1000.0 mm*mrad