diff --git a/src/madl_esurv.mad b/src/madl_esurv.mad index 92f2472da..915e5d2a8 100644 --- a/src/madl_esurv.mad +++ b/src/madl_esurv.mad @@ -36,7 +36,7 @@ local fnil, bind3rd in MAD.gfunc local errorf in MAD.utility local minlen, minang in MAD.constant local is_implicit in element.drift -local arc2cord in MAD.gmath +local arc2cord, arc2len in MAD.gmath local abs, sin in math @@ -177,7 +177,7 @@ local function track_thick (elm, m, fng_) local ds in m local angle in elm local no_ang = abs(angle) < minang or fng_ - m.el, m.ang = ds, angle*m.tdir + m.el, m.ang = fng_ and m.el or ds, angle*m.tdir local inter, track, thick if abs(ds) >= minlen then -- trick: driftonly+thick <=> thinonly+thin @@ -197,8 +197,8 @@ local function fng_e1 (e, m, s) local d = s*sdir if d == -1 then local e_ = {name=e.name, dx=elc*sin((e2-e1)/2), dy=0, ds=0} - yrotation(e2, m, -1) -- translation independant of direction - translate(e_, m, -1) + translate(e_, m, -1) -- translation independant of direction + yrotation(e2, m, -1) elseif e1 ~= 0 then yrotation(e1, m, -1) end @@ -209,8 +209,8 @@ local function fng_e2 (e, m, s) local d = s*sdir if d == 1 then local e_ = {name=e.name, dx=elc*sin((e2-e1)/2), dy=0, ds=0} - translate(e_, m, -1) -- translation independant of direction yrotation(e1, m, -1) + translate(e_, m, -1) -- translation independant of direction elseif e2 ~= 0 then yrotation(e2 , m, -1) end @@ -221,12 +221,13 @@ local fng_e = \e, m, s -> yrotation(e, m, -0.5) local function track_rbend (elm, m) local fng = nil -- default: curved rbend aka sbend with parallel pole faces - if elm.true_rbend then -- true rbend - local e1, e2, angle, l in elm - if e1 and e2 then -- MAD-like Wedge rbend + if elm.true_rbend then + local e1, e2, angle in elm + m.elc = arc2cord(m.ds, angle) + if e1 and e2 then -- MAD-like wedge rbend fng = fng_e + m.el = m.elc else -- true parallel rbend - m.elc = arc2cord(l, angle) if e1 then m.e1, m.e2 = e1, angle - e1 fng = fng_e1 @@ -234,6 +235,7 @@ local function track_rbend (elm, m) m.e1, m.e2 = angle - e2, e2 fng = fng_e2 end + m.el = arc2len(m.ds, angle) end end