Commit 252c1487 authored by albajacas_a's avatar albajacas_a

Resolve "Documentation for new Undulator element"

parent 867ff9b7
......@@ -2685,6 +2685,102 @@ bstp: BEAMSTRIPPING, PRESSURE=1E-8, TEMPERATURE=300,
No matter what the value of STOP is, the particles stripped are recorded in the HDF5 file
_<elementname>.h5_ (or ASCII if link:control#sec.control.option[`ASCIIDUMP`] is true).
=== Undulator (_OPAL-t_)
_OPAL_'s undulator element comes with its own Finite-Difference Time-Domain full-wave solver, which
accounts for space-charge and radiation effects in 3D.
It was implemented by means of the[MITHRA]
library, developed by Arya Fallahi.
To use the undulator element and its solver, one needs to compile _OPAL_ in the following way:
. install the[MITHRA 2.0] library,
. set the environment variable `MITHRA_PREFIX=directory/where/you/store/mithra`
. compile _OPAL_ with the option `cmake -DENABLE_OPAL_FEL=yes ..`
When the head of the bunch crosses the start of an undulator in the beamline
(defined by `ELEMEDGE`), the solver changes automatically from
Poisson to full-wave, and changes back to Poisson once the bunch has passed through the
whole undulator and its fringe fields.
The length of the undulator is defined as
&L = N\lambda + 2\,\text{fringe},\\
&\text{fringe} = 2\lambda,
where latexmath:[\lambda] is the undulator period and latexmath:[N] its number of periods.
Since the element's length is entirely defined by the undulator periods, there is no `LENGTH`
parameter to be specified for the undulator element.
The magnetic field is that of a planar undulator with flat pole faces:
&B_x = B_0\cosh(kr)\sin(kz)\cos(\alpha),\\
&B_y = B_0\cosh(kr)\sin(kz)\sin(\alpha),\\
&B_z = B_0\sinh(kr)\cos(kz),
where latexmath:[r = x\cos(\alpha) + y\sin(\alpha)] is the radial distance from the undulator axis, latexmath:[k=2\pi/\lambda] the wave-number, latexmath:[\alpha] the angle between the magnetic field polarisation and the x-axis,
and latexmath:[B_0] the maximum magnetic field value.
The fringe fields are defined as:
&B_x = B_0\cosh(kr)kze^{-(kz)^2/2}\cos(\alpha),\\
&B_y = B_0\cosh(kr)kze^{-(kz)^2/2}\sin(\alpha),\\
&B_z = B_0\sinh(kr)e^{-(kz)^2/2}.
The parameters that describe the undulator element and its associated full-wave solver are as follows:
The undulator strength parameter.
The undulator period latexmath:[\lambda] [m].
Number of periods latexmath:[N].
Angle latexmath:[\alpha] between the magnetic field polarisation and the x-axis [rad] (default: 0).
Size in three dimensions latexmath:[(L_x, L_y, L_z)] of the computational grid [m], which is in a frame of reference
moving at the average speed of the bunch.
It should be large enough to contain the whole bunch, as particles outside of it will not perceive any fields.
As a rule of thumb, the grid should be 3 times longer than the bunch, since the bunch will slightly shift
longitudinally when entering and exiting the undulator, and 10 times wider than the bunch, to avoid spurious
radiation reflections, since the Absorbing Boundary Conditions (ABCs) cannot correctly absorb obliquely incident waves.
Grid-spacing latexmath:[(\Delta_x, \Delta_y, \Delta_z)] of the computational domain [m].
Time-step for the particle update [s]. By default it is equal to the field update time-step,
which is automatically chosen by the algorithm in order to satisfy the stability conditon.
`DTBUNCH` needs to be equal to or smaller than the field time-step.
Truncation order of the ABCs. Can be 1 or 2 (default: 2).
Total time to simulate using the full-wave solver [s]. By default this is set such that
the whole passage through the undulator is simulated.
File specifying which output the full-wave solver should provide.
It is equivalent to the job-file in[MITHRA],
without the parameters `MESH`, `bunch-initialization`, and `UNDULATOR`. This file is
Example of the wiggler element used in the AWA beamline:
UND: UNDULATOR, ELEMEDGE = 44.0e-2, K = 10.81, LAMBDA = 8.5e-2, NUMPERIODS = 10, ANGLE = PI/2,
MESHLENGTH = { 12e-3, 12e-3, 4e-3 }, MESHRESOLUTION = { 1e-5, 1e-5, 8e-6},
FNAME = "wiggler_sims_July_2020/mithra_output.job";
=== References
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment