OPALX (Object Oriented Parallel Accelerator Library for Exascal) master (dc2a29eed580)
OPALX
Loading...
Searching...
No Matches
TestConstantEFieldCavity.cpp
Go to the documentation of this file.
1
11#include <gtest/gtest.h>
12
15
16#include <cmath>
17#include <memory>
18
19namespace {
20
21 class ConstantEFieldCavityTest : public ::testing::Test {
22 protected:
23 void SetUp() override {
24 rep_ = std::make_unique<ConstantEFieldCavityRep>("TestConstantEFieldCavity");
25 rep_->setElementLength(1.0);
26 rep_->setEz(10.0);
27 }
28
29 std::unique_ptr<ConstantEFieldCavityRep> rep_;
30 };
31
32 // ---------------------------------------------------------------------------
33 // Type and geometry
34 // ---------------------------------------------------------------------------
35 TEST_F(ConstantEFieldCavityTest, GetType) {
36 EXPECT_EQ(rep_->getType(), ElementType::CONSTANTEFIELDCAVITY);
37 }
38
39 TEST_F(ConstantEFieldCavityTest, Bends) { EXPECT_FALSE(rep_->bends()); }
40
41 TEST_F(ConstantEFieldCavityTest, GetExEyEzSetters) {
42 EXPECT_DOUBLE_EQ(rep_->getEx(), 0.0);
43 EXPECT_DOUBLE_EQ(rep_->getEy(), 0.0);
44 EXPECT_DOUBLE_EQ(rep_->getEz(), 10.0);
45
46 rep_->setEx(1.0);
47 rep_->setEy(-2.0);
48 rep_->setEz(3.0);
49
50 EXPECT_DOUBLE_EQ(rep_->getEx(), 1.0);
51 EXPECT_DOUBLE_EQ(rep_->getEy(), -2.0);
52 EXPECT_DOUBLE_EQ(rep_->getEz(), 3.0);
53 }
54
55 TEST_F(ConstantEFieldCavityTest, GetDimensions) {
56 double startField = 0.0;
57 double endField = 0.0;
58 rep_->initialise(nullptr, startField, endField);
59 EXPECT_DOUBLE_EQ(endField, 1.0);
60
61 double zBegin = 0.0, zEnd = 0.0;
62 rep_->getFieldExtend(zBegin, zEnd);
63 EXPECT_DOUBLE_EQ(zBegin, 0.0);
64 EXPECT_DOUBLE_EQ(zEnd, 1.0);
65
66 startField = 2.5;
67 endField = 0.0;
68 rep_->initialise(nullptr, startField, endField);
69 rep_->getFieldExtend(zBegin, zEnd);
70 EXPECT_DOUBLE_EQ(zBegin, 2.5);
71 EXPECT_DOUBLE_EQ(zEnd, 3.5);
72 }
73
74 // ---------------------------------------------------------------------------
75 // apply(R, P, t, E, B): position-based, no bunch needed
76 // ---------------------------------------------------------------------------
77 TEST_F(ConstantEFieldCavityTest, ApplyInside) {
78 Vector_t<double, 3> R = {0.0, 0.0, 0.5};
79 Vector_t<double, 3> P = {0.0, 0.0, 1.0};
80 Vector_t<double, 3> E = {1.0, 2.0, 3.0};
81 Vector_t<double, 3> B = {0.0, 0.0, 0.0};
82
83 bool out = rep_->apply(R, P, 0.0, E, B);
84
85 EXPECT_FALSE(out);
86 EXPECT_DOUBLE_EQ(E(0), 1.0);
87 EXPECT_DOUBLE_EQ(E(1), 2.0);
88 EXPECT_DOUBLE_EQ(E(2), 3.0 + 10.0);
89 }
90
91 TEST_F(ConstantEFieldCavityTest, ApplyBeforeElement) {
92 Vector_t<double, 3> R = {0.0, 0.0, -0.1};
93 Vector_t<double, 3> P = {0.0, 0.0, 1.0};
94 Vector_t<double, 3> E = {1.0, 2.0, 3.0};
95 Vector_t<double, 3> B = {0.0, 0.0, 0.0};
96
97 bool out = rep_->apply(R, P, 0.0, E, B);
98
99 EXPECT_FALSE(out);
100 EXPECT_DOUBLE_EQ(E(0), 1.0);
101 EXPECT_DOUBLE_EQ(E(1), 2.0);
102 EXPECT_DOUBLE_EQ(E(2), 3.0);
103 }
104
105 TEST_F(ConstantEFieldCavityTest, ApplyAfterElement) {
106 Vector_t<double, 3> R = {0.0, 0.0, 1.5};
107 Vector_t<double, 3> P = {0.0, 0.0, 1.0};
108 Vector_t<double, 3> E = {1.0, 2.0, 3.0};
109 Vector_t<double, 3> B = {0.0, 0.0, 0.0};
110
111 bool out = rep_->apply(R, P, 0.0, E, B);
112
113 EXPECT_FALSE(out);
114 EXPECT_DOUBLE_EQ(E(0), 1.0);
115 EXPECT_DOUBLE_EQ(E(1), 2.0);
116 EXPECT_DOUBLE_EQ(E(2), 3.0);
117 }
118
119 TEST_F(ConstantEFieldCavityTest, ApplyAtZ0) {
120 Vector_t<double, 3> R = {0.0, 0.0, 0.0};
121 Vector_t<double, 3> P = {0.0, 0.0, 1.0};
122 Vector_t<double, 3> E = {0.0, 0.0, 0.0};
123 Vector_t<double, 3> B = {0.0, 0.0, 0.0};
124
125 bool out = rep_->apply(R, P, 0.0, E, B);
126
127 EXPECT_FALSE(out);
128 EXPECT_DOUBLE_EQ(E(0), 0.0);
129 EXPECT_DOUBLE_EQ(E(1), 0.0);
130 EXPECT_DOUBLE_EQ(E(2), 10.0);
131 }
132
133 TEST_F(ConstantEFieldCavityTest, ApplyAtZLength) {
134 Vector_t<double, 3> R = {0.0, 0.0, 1.0};
135 Vector_t<double, 3> P = {0.0, 0.0, 1.0};
136 Vector_t<double, 3> E = {0.0, 0.0, 0.0};
137 Vector_t<double, 3> B = {0.0, 0.0, 0.0};
138
139 bool out = rep_->apply(R, P, 0.0, E, B);
140
141 EXPECT_FALSE(out);
142 EXPECT_DOUBLE_EQ(E(0), 0.0);
143 EXPECT_DOUBLE_EQ(E(1), 0.0);
144 EXPECT_DOUBLE_EQ(E(2), 10.0);
145 }
146
147 TEST_F(ConstantEFieldCavityTest, ApplyAddsFullVector) {
148 rep_->setEx(1.0);
149 rep_->setEy(-2.0);
150 rep_->setEz(3.0);
151
152 Vector_t<double, 3> R = {0.0, 0.0, 0.5};
153 Vector_t<double, 3> P = {0.0, 0.0, 1.0};
154 Vector_t<double, 3> E = {0.5, 0.5, 0.5};
155 Vector_t<double, 3> B = {0.0, 0.0, 0.0};
156
157 bool out = rep_->apply(R, P, 0.0, E, B);
158
159 EXPECT_FALSE(out);
160 EXPECT_DOUBLE_EQ(E(0), 0.5 + 1.0);
161 EXPECT_DOUBLE_EQ(E(1), 0.5 - 2.0);
162 EXPECT_DOUBLE_EQ(E(2), 0.5 + 3.0);
163 }
164
165 // ---------------------------------------------------------------------------
166 // applyToReferenceParticle
167 // ---------------------------------------------------------------------------
168 TEST_F(ConstantEFieldCavityTest, ApplyToReferenceParticleInside) {
169 Vector_t<double, 3> R = {0.0, 0.0, 0.5};
170 Vector_t<double, 3> P = {0.0, 0.0, 1.0};
171 Vector_t<double, 3> E = {0.0, 0.0, 0.0};
172 Vector_t<double, 3> B = {0.0, 0.0, 0.0};
173
174 bool out = rep_->applyToReferenceParticle(R, P, 0.0, E, B);
175
176 EXPECT_FALSE(out);
177 EXPECT_DOUBLE_EQ(E(0), 0.0);
178 EXPECT_DOUBLE_EQ(E(1), 0.0);
179 EXPECT_DOUBLE_EQ(E(2), 10.0);
180 }
181
182 TEST_F(ConstantEFieldCavityTest, ApplyToReferenceParticleOutside) {
183 Vector_t<double, 3> R = {0.0, 0.0, -0.1};
184 Vector_t<double, 3> P = {0.0, 0.0, 1.0};
185 Vector_t<double, 3> E = {0.0, 0.0, 0.0};
186 Vector_t<double, 3> B = {0.0, 0.0, 0.0};
187
188 bool out = rep_->applyToReferenceParticle(R, P, 0.0, E, B);
189
190 EXPECT_FALSE(out);
191 EXPECT_DOUBLE_EQ(E(0), 0.0);
192 EXPECT_DOUBLE_EQ(E(1), 0.0);
193 EXPECT_DOUBLE_EQ(E(2), 0.0);
194 }
195
196} // namespace
ippl::Vector< T, Dim > Vector_t
@ CONSTANTEFIELDCAVITY
TEST_F(MonitorTest, GetType)