OPAL¶
Basic Setup¶
The particle accelerator tracking code OPAL [1] [2] has special support in rsopt provided by the Sirepo library.
Using Sirepo, rsopt can parse OPAL input files, automatically replacing and updating values given
for parameters and settings with no additional work required by the user. An example setup is shown below:
codes:
- opal:
settings:
distribution.tpulsefwhm: 0.5e-11
parameters:
FINSS_RGUN.LAG:
min: -0.070
max: -0.052
start: -0.06108
FIND1_MSOL10.KS:
min: 0.195
max: 0.237
start: 0.206
setup:
execution_type: parallel
cores: 4
input_file: ctf3.in
In the above example settings is being used to modify the distribution command to change the initial bunch length. While OPAL allows assignment of names to a number of commands (such as distribution, and fieldsolver) the rsopt parser only looks for the command name. The parameters are then used to vary the RFCAVITY FINSS_RGUN’s LAG value and SOLENOID FIND1_MSOL10’s strength. For elements the name of the element should be used as the identifier.
In setup you only need to provide the input file name, there is a restriction on the parser that all OPAL input must be within the given input file (the CALL command is not currently supported by the parser). rsopt will handle reading and parsing both files during optimization or parameter sweeps. If multiple workers can be used for the rsopt run then they will always work in separate directories for each new job to prevent overwriting files.
Syntax for repeated commands¶
Some commands may appear repeatedly in an input file. In this case the command name should be followed by the position
of the command to be used (indexed to 1). For instance if the input file contained two DISTRIBUTION commands:
// 1
gen_dist: DISTRIBUTION, TYPE = FLATTOP,
SIGMAR = 0.001*2,
TPULSEFWHM = fwhm*2,
NBIN = 9,
EMISSIONSTEPS = 100,
EMISSIONMODEL = NONE,
EKIN = 0.55,
EMITTED = True,
WRITETOFILE = True;
// 2
vc_dist: DISTRIBUTION, TYPE = FROMFILE,
FNAME = "laser.dist",
EMITTED = TRUE,
EMISSIONMODEL = None,
NBIN = 9,
EMISSIONSTEPS = 100,
EKIN = 0.4;
If the gen_dist DISTRIBUTION were being used by OPAL
The corresponding block in the rsopt configuration file to use TPULSEFWHM as an optimization parameter
would look like:
codes:
- opal:
parameters:
DISTRIBUTION.1.TPULSEFWHM:
min: 0.8e-11
max: 2.6e-11
start: 1.33e-11
setup:
input_file: opal_input.in
execution_type: serial
Providing an objective value¶
When using opal as the final code of an optimization run in rsopt you will need to provide an objective function in the
options.objective_function field. The objective function is always executed in the same directory that opal
was run in for each new job and so can easily be used to read any output from opal to perform required calculations.