Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Open sidebar
OPAL
src
Commits
2bbd0e99
Commit
2bbd0e99
authored
Jul 08, 2020
by
frey_m
Browse files
mm --> m
parent
71fe312b
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
40 additions
and
57 deletions
+40
-57
src/Distribution/SigmaGenerator.cpp
src/Distribution/SigmaGenerator.cpp
+36
-53
src/Distribution/SigmaGenerator.h
src/Distribution/SigmaGenerator.h
+4
-4
No files found.
src/Distribution/SigmaGenerator.cpp
View file @
2bbd0e99
...
...
@@ -97,21 +97,16 @@ SigmaGenerator::SigmaGenerator(double I,
,
rinit_m
(
0.0
)
,
prinit_m
(
0.0
)
{
// set emittances (initialization like that due to old compiler version)
// [ex] = [ey] = [ez] = pi*mm*mrad --> [emittance] = mm mrad
emittance_m
[
0
]
=
ex
*
Physics
::
pi
;
emittance_m
[
1
]
=
ey
*
Physics
::
pi
;
emittance_m
[
2
]
=
ez
*
Physics
::
pi
;
// minimum beta*gamma
double
minGamma
=
Emin_m
/
m_m
+
1.0
;
double
bgam
=
std
::
sqrt
(
minGamma
*
minGamma
-
1.0
);
// set emittances (initialization like that due to old compiler version)
// [ex] = [ey] = [ez] = pi*mm*mrad --> [emittance] = m rad
// normalized emittance (--> multiply with beta*gamma)
// [emittance] = mm mrad
emittance_m
[
0
]
*=
bgam
;
emittance_m
[
1
]
*=
bgam
;
emittance_m
[
2
]
*=
bgam
;
emittance_m
[
0
]
=
ex
*
Physics
::
pi
*
1.0e-6
*
bgam
;
emittance_m
[
1
]
=
ey
*
Physics
::
pi
*
1.0e-6
*
bgam
;
emittance_m
[
2
]
=
ez
*
Physics
::
pi
*
1.0e-6
*
bgam
;
// Define the Hamiltonian
Series
::
setGlobalTruncOrder
(
truncOrder_m
);
...
...
@@ -139,14 +134,12 @@ SigmaGenerator::SigmaGenerator(double I,
double
K3
=
3.0
*
/* physics::q0 */
1.0
*
I_m
*
lam
/
(
20.0
*
std
::
sqrt
(
5.0
)
*
Physics
::
pi
*
Physics
::
epsilon_0
*
m
*
Physics
::
c
*
Physics
::
c
*
Physics
::
c
*
beta_m
*
beta_m
*
gamma_m
*
gamma2_m
);
// [K3] = m
double
milli
=
1.0e-3
;
// formula (30), (31)
// [sigma(0,0)] =
m
m^{2} --> [sx] = [sy] = [sz] = m
m
// [sigma(0,0)] = m^{2} --> [sx] = [sy] = [sz] = m
// multiply with 0.001 to get meter --> [sx] = [sy] = [sz] = m
double
sx
=
std
::
sqrt
(
std
::
abs
(
sigx
))
*
milli
;
double
sy
=
std
::
sqrt
(
std
::
abs
(
sigy
))
*
milli
;
double
sz
=
std
::
sqrt
(
std
::
abs
(
sigz
))
*
milli
;
double
sx
=
std
::
sqrt
(
std
::
abs
(
sigx
));
double
sy
=
std
::
sqrt
(
std
::
abs
(
sigy
));
double
sz
=
std
::
sqrt
(
std
::
abs
(
sigz
));
double
tmp
=
sx
*
sy
;
// [tmp] = m^{2}
...
...
@@ -619,24 +612,15 @@ void SigmaGenerator::initialize(double nuz, double ravg)
// helper constants
double
invbg
=
1.0
/
(
beta_m
*
gamma_m
);
double
micro
=
1.0e-6
;
double
mega
=
1.0e6
;
//double kilo = 1.0e3;
double
c2
=
Physics
::
c
*
Physics
::
c
;
// convert mass m_m from MeV/c^2 to eV*s^{2}/m^{2}
double
m
=
m_m
*
mega
/
(
Physics
::
c
*
Physics
::
c
);
// [m] = eV*s^{2}/m^{2}, [m_m] = MeV/c^2
/* Emittance [ex] = [ey] = [ez] = mm mrad (emittance_m are normalized emittances
* (i.e. emittance multiplied with beta*gamma)
*/
double
ex
=
emittance_m
[
0
]
*
invbg
;
// [ex] = mm mrad
double
ey
=
emittance_m
[
1
]
*
invbg
;
// [ey] = mm mrad
double
ez
=
emittance_m
[
2
]
*
invbg
;
// [ez] = mm mrad
double
m
=
m_m
*
1.0e6
/
c2
;
// [m] = eV*s^{2}/m^{2}, [m_m] = MeV/c^2
//
convert normalized emittances: mm mrad --> m rad (mm mrad: millimeter milliradian)
ex
*
=
mi
cro
;
ey
*
=
mi
cro
;
ez
*
=
mi
cro
;
//
emittance [ex] = [ey] = [ez] = m rad
double
ex
=
e
mi
ttance_m
[
0
]
*
invbg
;
// [ex] = m rad
double
ey
=
e
mi
ttance_m
[
1
]
*
invbg
;
// [ey] = m rad
double
ez
=
e
mi
ttance_m
[
2
]
*
invbg
;
// [ez] = m rad
// initial guess of emittance, [e] = m rad
double
e
=
std
::
cbrt
(
ex
*
ey
*
ez
);
// cbrt computes cubic root (C++11) <cmath>
...
...
@@ -649,13 +633,14 @@ void SigmaGenerator::initialize(double nuz, double ravg)
// formula (57)
double
lam
=
Physics
::
two_pi
*
Physics
::
c
/
(
wo_m
*
nh_m
);
// wavelength, [lam] = m
double
K3
=
3.0
*
/* physics::q0 */
1.0
*
I_m
*
lam
/
(
20.0
*
std
::
sqrt
(
5.0
)
*
Physics
::
pi
*
Physics
::
epsilon_0
*
m
*
Physics
::
c
*
Physics
::
c
*
Physics
::
c
*
beta_m
*
beta_m
*
gamma2_m
*
gamma_m
);
// [K3] = m
double
K3
=
3.0
*
I_m
*
lam
/
(
20.0
*
std
::
sqrt
(
5.0
)
*
Physics
::
pi
*
Physics
::
epsilon_0
*
m
*
c2
*
Physics
::
c
*
beta_m
*
beta_m
*
gamma2_m
*
gamma_m
);
// [K3] = m
double
alpha
=
/* physics::q0 */
1.0
*
Physics
::
mu_0
*
I_m
/
(
5.0
*
std
::
sqrt
(
10.0
)
*
m
*
Physics
::
c
*
gamma_m
*
nh_m
)
*
std
::
sqrt
(
rcyc
*
rcyc
*
rcyc
/
(
e
*
e
*
e
));
// [alpha] = 1/rad --> [alpha] = 1
double
alpha
=
Physics
::
mu_0
*
I_m
/
(
5.0
*
std
::
sqrt
(
10.0
)
*
m
*
Physics
::
c
*
gamma_m
*
nh_m
)
*
std
::
sqrt
(
rcyc
*
rcyc
*
rcyc
/
(
e
*
e
*
e
));
// [alpha] = 1/rad --> [alpha] = 1
double
sig0
=
std
::
sqrt
(
2.0
*
rcyc
*
e
)
/
gamma_m
;
// [sig0] = m*sqrt(rad) --> [sig0] = m
double
sig0
=
std
::
sqrt
(
2.0
*
rcyc
*
e
)
/
gamma_m
;
// [sig0] = m*sqrt(rad) --> [sig0] = m
// formula (56)
double
sig
;
// [sig] = m
...
...
@@ -704,32 +689,30 @@ void SigmaGenerator::initialize(double nuz, double ravg)
double
invAB
=
1.0
/
(
B
-
A
);
// [invAB] = 1/m
// construct initial sigma-matrix (formula (29, 30, 31)
// Remark: We multiply with 10^{6} (= mega) to convert emittances back.
// 1 m^{2} = 10^{6} mm^{2}
matrix_type
sigma
=
boost
::
numeric
::
ublas
::
zero_matrix
<
double
>
(
6
);
// formula (30), [sigma(0,0)] = m^2 rad
* 10^{6} = mm^{2} rad = mm mrad
sigma
(
0
,
0
)
=
invAB
*
(
B
*
ex
/
Omega
+
A
*
ez
/
omega
)
*
mega
;
// formula (30), [sigma(0,0)] = m^2 rad
sigma
(
0
,
0
)
=
invAB
*
(
B
*
ex
/
Omega
+
A
*
ez
/
omega
);
// [sigma(0,5)] = [sigma(5,0)] = m rad
* 10^{6} = mm mrad // 1000: m --> mm and 1000 to promille
sigma
(
0
,
5
)
=
sigma
(
5
,
0
)
=
invAB
*
(
ex
/
Omega
+
ez
/
omega
)
*
mega
;
// [sigma(0,5)] = [sigma(5,0)] = m rad
sigma
(
0
,
5
)
=
sigma
(
5
,
0
)
=
invAB
*
(
ex
/
Omega
+
ez
/
omega
);
// [sigma(1,1)] = rad
* 10^{6} = mrad (and promille)
sigma
(
1
,
1
)
=
invAB
*
(
B
*
ex
*
Omega
+
A
*
ez
*
omega
)
*
mega
;
// [sigma(1,1)] = rad
sigma
(
1
,
1
)
=
invAB
*
(
B
*
ex
*
Omega
+
A
*
ez
*
omega
);
// [sigma(1,4)] = [sigma(4,1)] = m rad
* 10^{6} = mm mrad
sigma
(
1
,
4
)
=
sigma
(
4
,
1
)
=
invAB
*
(
ex
*
Omega
+
ez
*
omega
)
/
(
K
*
gamma2_m
)
*
mega
;
// [sigma(1,4)] = [sigma(4,1)] = m rad
sigma
(
1
,
4
)
=
sigma
(
4
,
1
)
=
invAB
*
(
ex
*
Omega
+
ez
*
omega
)
/
(
K
*
gamma2_m
);
// formula (31), [sigma(2,2)] = m rad
* 10^{6} = mm mrad
sigma
(
2
,
2
)
=
ey
/
(
std
::
sqrt
(
h
*
h
*
nuz
*
nuz
-
K
))
*
mega
;
// formula (31), [sigma(2,2)] = m rad
sigma
(
2
,
2
)
=
ey
/
(
std
::
sqrt
(
h
*
h
*
nuz
*
nuz
-
K
));
sigma
(
3
,
3
)
=
(
ey
*
mega
)
*
(
ey
*
mega
)
/
sigma
(
2
,
2
);
sigma
(
3
,
3
)
=
(
ey
*
ey
)
/
sigma
(
2
,
2
);
// [sigma(4,4)] = m^{2} rad
* 10^{6} = mm^{2} rad = mm mrad
sigma
(
4
,
4
)
=
invAB
*
(
A
*
ex
*
Omega
+
B
*
ez
*
omega
)
/
(
K
*
gamma2_m
)
*
mega
;
// [sigma(4,4)] = m^{2} rad
sigma
(
4
,
4
)
=
invAB
*
(
A
*
ex
*
Omega
+
B
*
ez
*
omega
)
/
(
K
*
gamma2_m
);
// formula (30), [sigma(5,5)] = rad
* 10^{6} = mrad (and promille)
sigma
(
5
,
5
)
=
invAB
*
(
ex
/
(
B
*
Omega
)
+
ez
/
(
A
*
omega
))
*
mega
;
// formula (30), [sigma(5,5)] = rad
sigma
(
5
,
5
)
=
invAB
*
(
ex
/
(
B
*
Omega
)
+
ez
/
(
A
*
omega
));
// fill in initial guess of the sigma matrix (for each angle the same guess)
sigmas_m
.
resize
(
nSteps_m
);
...
...
src/Distribution/SigmaGenerator.h
View file @
2bbd0e99
...
...
@@ -165,7 +165,7 @@ public:
private:
/// Stores the value of the current, \f$ \left[I\right] = A \f$
double
I_m
;
/// Stores the desired emittances, \f$ \left[\varepsilon_{x}\right] = \left[\varepsilon_{y}\right] = \left[\varepsilon_{z}\right] = m
m
\
m
rad \f$
/// Stores the desired emittances, \f$ \left[\varepsilon_{x}\right] = \left[\varepsilon_{y}\right] = \left[\varepsilon_{z}\right] = m \ rad \f$
std
::
array
<
double
,
3
>
emittance_m
;
/// Is the orbital frequency, \f$ \left[\omega_{o}\right] = \frac{1}{s} \f$
double
wo_m
;
...
...
@@ -326,9 +326,9 @@ std::array<double,3> SigmaGenerator::getEmittances() const
{
double
bgam
=
gamma_m
*
beta_m
;
return
std
::
array
<
double
,
3
>
{{
emittance_m
[
0
]
/
Physics
::
pi
/
bgam
,
emittance_m
[
1
]
/
Physics
::
pi
/
bgam
,
emittance_m
[
2
]
/
Physics
::
pi
/
bgam
emittance_m
[
0
]
/
Physics
::
pi
/
bgam
*
1.0e6
,
emittance_m
[
1
]
/
Physics
::
pi
/
bgam
*
1.0e6
,
emittance_m
[
2
]
/
Physics
::
pi
/
bgam
*
1.0e6
}};
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment