Skip to content

Commit ac40248

Browse files
authored
Improve backtracking compatibility
1 parent 33e1dfa commit ac40248

File tree

1 file changed

+17
-21
lines changed

1 file changed

+17
-21
lines changed

src/madl_dynmap.mad

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -909,8 +909,6 @@ function M.quad_kick (elm, m, lw, ii) -- [KICKTKT7] --
909909
if ii <= 0 then drift_adj(elm, m, ii == 0 and l/2 or l) end
910910
end
911911

912-
M.quad_kick_ysh = \elm, m, lw -> M.quad_kick(elm, m, lw, 0)
913-
914912
-- skew (tilted by k1s)
915913

916914
function M.quad_thicks (elm, m, lw) -- [PUSHTKT7] -- checked
@@ -983,8 +981,6 @@ function M.quad_kicks (elm, m, lw, ii) -- [KICKTKT7] --
983981
if ii <= 0 then drift_adj(elm, m, ii == 0 and l/2 or l) end
984982
end
985983

986-
M.quad_kicks_ysh = \elm, m, lw -> M.quad_kicks(elm, m, lw, 0)
987-
988984
-- curved (eh ~= 0)
989985

990986
function M.quad_thickh_new (elm, m, lw) -- [PUSHTKT7] -- unchecked
@@ -1207,8 +1203,6 @@ function M.quad_kickh (elm, m, lw, ii) -- [KICKTKT7] --
12071203
if ii <= 0 then drift_adj(elm, m, ii == 0 and l/2 or l) end
12081204
end
12091205

1210-
M.quad_kickh_ysh = \elm, m, lw -> M.quad_kickh(elm, m, lw, 0)
1211-
12121206
-- DKD, TKT [INTER_SOL5] ------------------------------------------------------o
12131207

12141208
function M.solen_thick (elm, m, lw) -- [KICK_SOL] -- checked
@@ -1556,7 +1550,7 @@ FRINGE_TEAPOT:
15561550
FACE, FRINGE_DIPOLE, MULTIPOLE_FRINGE, FRINGE2QUAD
15571551

15581552
FRINGE_DIPOLE[BEND_FRINGE=TRUE]
1559-
FRINGE2QUAD[PERMFRINGE=2.or.3]
1553+
FRINGE2QUAD[PERMFRINGE=2]
15601554
MULTIPOLE_FRINGE[PERMFRINGE=1.or.3]
15611555

15621556
NEWFACE[EXACT] / FACE[.not.EXACT]
@@ -1649,7 +1643,7 @@ function M.curex_fringe (elm, m, lw_) -- [FRINGE_TEAPOT] --
16491643
if sdir*lw == 1 then
16501644
-- print(lw == 1 and 'forward entry' or 'backward exit')
16511645
yrotation (-e, m, 1)
1652-
bend_face ( h, m )
1646+
bend_face ( h, m, 1)
16531647
if m.frng ~= 0 then
16541648
if ftst(m.frng, fringe.bend) then bend_fringe(elm, m, 1) end
16551649
if ftst(m.frng, fringe.mult) then mult_fringe(elm, m, 1) end
@@ -1666,7 +1660,7 @@ function M.curex_fringe (elm, m, lw_) -- [FRINGE_TEAPOT] --
16661660
if ftst(m.frng, fringe.mult) then mult_fringe(elm, m, -1) end
16671661
if ftst(m.frng, fringe.bend) then bend_fringe(elm, m, -1) end
16681662
end
1669-
bend_face ( h, m )
1663+
bend_face ( h, m, -1)
16701664
yrotation ( e, m, -1)
16711665
end
16721666

@@ -1735,40 +1729,42 @@ end
17351729

17361730
-- fringes helpers ------------------------------------------------------------o
17371731

1738-
function bend_face (h, m) -- [NEWFACE] -- checked
1732+
function bend_face (h, m, lw) -- [NEWFACE] -- checked
17391733
if h == 0 then return end
17401734
local el, eld, knl in m
17411735
if abs(el) < minlen or abs(knl[1]) < minstr then return end
17421736

1743-
m.atdebug(h, m, 'bend_face:0')
1737+
m.atdebug(h, m, lw, 'bend_face:0')
17441738

1745-
local edir, tdir, beam in m
1746-
local k0h = 0.5*h * knl[1]/(eld or el)*edir
1739+
local edir, sdir, tdir, beam in m
1740+
! h is weighted by tdir, el is weighted by sdir, so to get tdir back, we need to multiply by sdir
1741+
local k0h = 0.5*h * knl[1]/(eld or el) * sdir
17471742
local chg = beam.charge
17481743
local _beta = 1/beam.beta
17491744

17501745
for i=1,m.npar do
17511746
local x, px, y, py, t, pt, beam in m[i]
17521747
local _beta = beam and 1/beam.beta or _beta
17531748
local chg = beam and beam.charge or chg
1749+
local k0hq = k0h*chg -- k0hq must be weighted by bdir
17541750

1755-
if tdir == 1 then -- to insure reversal symmetry ; horizontal wedge (only dir)
1756-
px = px + chg*k0h*x^2
1751+
if sdir == 1 then -- to insure reversal symmetry ; horizontal wedge (only sdir)
1752+
px = px + k0hq*x^2
17571753
end
17581754

17591755
local dpp = 1 + 2*pt*_beta + pt^2
17601756
local _pt2 = 1/(dpp - px^2)
1761-
local xi = 2*k0h*tdir*sqrt(dpp)*_pt2
1762-
local dxi_px = 2*px*xi *_pt2
1763-
local dxi_ddel = -2 *xi*(1+pt) *_pt2
1757+
local xi = 2*k0hq*sqrt(dpp)*_pt2
1758+
local dxi_px = 2*px*xi *_pt2
1759+
local dxi_ddel = -2 *xi*(1+pt) *_pt2
17641760

17651761
x = x / (1-dxi_px*y^2)
17661762
px = px - xi*y^2
17671763
py = py - 2*xi*x*y
17681764
t = t - dxi_ddel*x*y^2
17691765

1770-
if tdir == -1 then -- to insure reversal symmetry; horizontal wedge (only dir)
1771-
px = px - chg*k0h*x^2
1766+
if sdir == -1 then -- to insure reversal symmetry; horizontal wedge (only sdir)
1767+
px = px + k0hq*x^2
17721768
end
17731769

17741770
m[i].x = x
@@ -1777,7 +1773,7 @@ function bend_face (h, m) -- [NEWFACE] -- chec
17771773
m[i].t = t
17781774
end
17791775

1780-
m.atdebug(h, m, 'bend_face:1')
1776+
m.atdebug(h, m, lw, 'bend_face:1')
17811777
end
17821778

17831779
function mad8_wedge (e, m, lw_, wc) -- [FRINGE_TEAPOT:MAD8_WEDGE] -- checked

0 commit comments

Comments
 (0)