Skip to content

Commit 4bb1bf0

Browse files
authored
Merge pull request #298 from jgray-19/survey_fixes
Survey fixes for rbend
2 parents 4a18fd3 + fd5855b commit 4bb1bf0

File tree

1 file changed

+21
-15
lines changed

1 file changed

+21
-15
lines changed

src/madl_esurv.mad

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,9 @@ local fnil, bind3rd in MAD.gfunc
3636
local errorf in MAD.utility
3737
local minlen, minang in MAD.constant
3838
local is_implicit in element.drift
39+
local arc2cord in MAD.gmath
3940

40-
local abs in math
41+
local abs, sin in math
4142

4243
-- integrator schemes ---------------------------------------------------------o
4344

@@ -192,23 +193,23 @@ end
192193
-- rbend special --------------------------------------------------------------o
193194

194195
local function fng_e1 (e, m, s)
195-
local e1, e2, sdir in m
196+
local e1, e2, elc, sdir in m
196197
local d = s*sdir
197198
if d == -1 then
198-
local e_ = {name=e.name, dx=m.elc*sin((e2-e1)/2), dy=0, ds=0}
199-
yrotation(e2, m, -1)
200-
translate(e_, m, s)
199+
local e_ = {name=e.name, dx=elc*sin((e2-e1)/2), dy=0, ds=0}
200+
yrotation(e2, m, -1) -- translation independant of direction
201+
translate(e_, m, -1)
201202
elseif e1 ~= 0 then
202203
yrotation(e1, m, -1)
203204
end
204205
end
205206

206207
local function fng_e2 (e, m, s)
207-
local e1, e2, sdir in m
208+
local e1, e2, elc, sdir in m
208209
local d = s*sdir
209210
if d == 1 then
210-
local e_ = {name=e.name, dx=m.elc*sin((e2-e1)/2), dy=0, ds=0}
211-
translate(e_, m, s)
211+
local e_ = {name=e.name, dx=elc*sin((e2-e1)/2), dy=0, ds=0}
212+
translate(e_, m, -1) -- translation independant of direction
212213
yrotation(e1, m, -1)
213214
elseif e2 ~= 0 then
214215
yrotation(e2 , m, -1)
@@ -221,18 +222,23 @@ local function track_rbend (elm, m)
221222
local fng = nil -- default: curved rbend aka sbend with parallel pole faces
222223

223224
if elm.true_rbend then -- true rbend
224-
local e1, e2 in elm
225-
-- compute correct E1 and E2 from the slides.
226-
if e1 and e2 then
225+
local e1, e2, angle, l in elm
226+
if e1 and e2 then -- MAD-like Wedge rbend
227227
fng = fng_e
228-
elseif e1 then
229-
fng = fng_e1
230-
else
231-
fng = fng_e2
228+
else -- true parallel rbend
229+
m.elc = arc2cord(l, angle)
230+
if e1 then
231+
m.e1, m.e2 = e1, angle - e1
232+
fng = fng_e1
233+
else
234+
m.e1, m.e2 = angle - e2, e2
235+
fng = fng_e2
236+
end
232237
end
233238
end
234239

235240
track_thick(elm, m, fng)
241+
m.e1, m.e2, m.elc = nil, nil, nil
236242
end
237243

238244
-- load maps into elements ----------------------------------------------------o

0 commit comments

Comments
 (0)