OPAL (Object Oriented Parallel Accelerator Library) 2022.1
OPAL
TrimCoil.cpp
Go to the documentation of this file.
1//
2// Class TrimCoil
3// Abstract TrimCoil class.
4//
5// Copyright (c) 2018 - 2019, Matthias Frey and Jochem Snuverink,
6// Paul Scherrer Institut, Villigen PSI, Switzerland
7// All rights reserved
8//
9// Implemented as part of the PhD thesis
10// "Precise Simulations of Multibunches in High Intensity Cyclotrons"
11// and the paper
12// "Matching of turn pattern measurements for cyclotrons using multiobjective optimization"
13// (https://doi.org/10.1103/PhysRevAccelBeams.22.064602)
14//
15// This file is part of OPAL.
16//
17// OPAL is free software: you can redistribute it and/or modify
18// it under the terms of the GNU General Public License as published by
19// the Free Software Foundation, either version 3 of the License, or
20// (at your option) any later version.
21//
22// You should have received a copy of the GNU General Public License
23// along with OPAL. If not, see <https://www.gnu.org/licenses/>.
24//
25#include "TrimCoil.h"
26
27#include <cmath>
28
29#include "Physics/Units.h"
30
32 double rmin,
33 double rmax)
34{
35 // convert to m
36 const double mm2m = 0.001;
37 rmin_m = rmin * mm2m;
38 rmax_m = rmax * mm2m;
39 // convert to kG
40 bmax_m = bmax * 10.0;
41}
42
43void TrimCoil::applyField(const double r, const double z, const double phi_rad, double *br, double *bz)
44{
45 if (std::abs(bmax_m) < 1e-20) return;
46 if ((phimin_m <= phimax_m && (phi_rad < phimin_m || phi_rad > phimax_m)) ||
47 (phimin_m > phimax_m && (phi_rad < phimin_m && phi_rad > phimax_m)) ) return;
48
49 doApplyField(r,z,phi_rad,br,bz);
50}
51
52void TrimCoil::setAzimuth(const double phimin, const double phimax)
53{
54 // phi convert to rad in [0,two pi]
55 if (phimin_m < 0) phimin_m += 360;
56 if (phimax_m < 0) phimax_m += 360;
57
58 phimin_m = phimin * Units::deg2rad;
59 phimax_m = phimax * Units::deg2rad;
60}
PETE_TUTree< FnAbs, typename T::PETE_Expr_t > abs(const PETE_Expr< T > &l)
constexpr double e
The value of.
Definition: Physics.h:39
constexpr double mm2m
Definition: Units.h:29
constexpr double deg2rad
Definition: Units.h:143
double bmax_m
Maximum B field (kG)
Definition: TrimCoil.h:40
void setAzimuth(const double phimin, const double phimax)
Set azimuthal range.
Definition: TrimCoil.cpp:52
double rmax_m
Maximum radius (m)
Definition: TrimCoil.h:49
TrimCoil(double bmax, double rmin, double rmax)
Definition: TrimCoil.cpp:31
double rmin_m
Minimum radius (m)
Definition: TrimCoil.h:47
double phimin_m
Minimal azimuth (rad)
Definition: TrimCoil.h:51
virtual void doApplyField(const double r, const double z, const double phi_rad, double *br, double *bz)=0
virtual implementation of applyField
double phimax_m
Maximal azimuth (rad)
Definition: TrimCoil.h:53
void applyField(const double r, const double z, const double phi_rad, double *br, double *bz)
Definition: TrimCoil.cpp:43