Skip to content

MAD-NG vs MAD-NG Tests #304

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 28 commits into from
May 12, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
e2012e0
Initial commit, with quadrupole example. Uses identical functions to …
Mar 15, 2023
6a70c45
Merge branch 'MethodicalAcceleratorDesign:dev' into ng_vs_ng
jgray-19 Mar 28, 2023
4fc3e72
Merge remote-tracking branch 'upstream/dev' into ng_vs_ng
jgray-19 Apr 4, 2023
ec3456d
Revert "switch to thickonly for trivial cases (but very common)"
Apr 4, 2023
460679e
Added three main components, backtracking, -edir and -chg to check
Apr 4, 2023
ebbb325
Add sbend and simplify quadrupole
Apr 4, 2023
4688d82
remove last map get (for ptc only)
Apr 4, 2023
e248377
improve backtrack to make debugging easier
Apr 4, 2023
e7c50f9
Merge remote-tracking branch 'upstream/dev' into ng_vs_ng
jgray-19 Apr 4, 2023
bedf52e
Revert "Revert "switch to thickonly for trivial cases (but very commo…
jgray-19 Apr 4, 2023
9ca960d
Revert revert revert
jgray-19 Apr 4, 2023
d0ccda4
Merge branch 'dev' of https://github.com/MethodicalAcceleratorDesign/…
Apr 5, 2023
5ede693
Merge remote-tracking branch 'upstream/dev' into ng_vs_ng
jgray-19 Apr 5, 2023
45a23d1
Merge remote-tracking branch 'upstream/dev' into ng_vs_ng
jgray-19 Apr 11, 2023
d195878
Add improvements (fringe = 0)
Apr 14, 2023
16afd80
Merge remote-tracking branch 'upstream/dev' into ng_vs_ng
jgray-19 Apr 14, 2023
5cbe4e7
Improvements to ng vs ng backend
Apr 14, 2023
4a34949
Merge remote-tracking branch 'upstream/dev' into ng_vs_ng
jgray-19 Apr 25, 2023
afa268f
Merge remote-tracking branch 'upstream/dev' into ng_vs_ng
jgray-19 May 4, 2023
e92bda6
Merge remote-tracking branch 'upstream/dev' into ng_vs_ng
jgray-19 May 4, 2023
8893e54
Merge branch 'MethodicalAcceleratorDesign:dev' into ng_vs_ng
jgray-19 May 4, 2023
93c4fe0
Add ng vs ng tests for rbend
May 5, 2023
8ccbb56
Merge remote-tracking branch 'upstream/dev' into ng_vs_ng
jgray-19 May 10, 2023
bfa3aec
Merge branch 'dev' of https://github.com/MethodicalAcceleratorDesign/…
May 10, 2023
2c194bb
Merge branch 'ng_vs_ng' of https://github.com/jgray-19/MAD into ng_vs_ng
May 10, 2023
6ae82c7
Simplify trackvsng by using communal library and allow for plotting
May 10, 2023
0363530
Add plotting to ng maps and simplify quad rotate
May 10, 2023
867891f
Simplify common commands, make more generic commands in track-tool fo…
May 11, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
216 changes: 216 additions & 0 deletions tests/tests/test-ng-maps/test-ng-maps.mad
Original file line number Diff line number Diff line change
@@ -0,0 +1,216 @@
-- ../mad test-ng-maps.mad
-- assume ../madx64 to be present...

local object in MAD
local tblcat in MAD.utility
local run_test in require("trackvsng")

-- The setup for the tests ----------------------------------------------------o

--[[
edir sdir chg | tdir bdir
FODO 1 1 1 | 1 1
FODO -1 1 1 | -1 -1
ODOF 1 -1 1 | -1 -1
ODOF -1 -1 1 | 1 1
s
DOFO 1 1 -1 | 1 -1
DOFO -1 1 -1 | -1 1
OFOD 1 -1 -1 | -1 1
OFOD -1 -1 -1 | 1 -1

Usage of directions:
- lengths are multiplied by sdir
- bending angles are multiplied by tdir
- strengths are multiplied by bdir
--]]

local ref_cfg = object "ref" {
-- How to run the tests
dorun = true, -- Default: true
dosave = true, -- Default: false
doplot = true, -- Default: false
doprnt = true, -- Default: false
dodbg = false, -- Default: false

-- list of variables in the tests
alist = {"model", "energy", "method", "nslice", "x0i"}, --attributes list
tol = 1000,

-- list of values that are used to run test but are not changed throughout
order = 4, -- 2/4
icase = 56, -- 56/6
debug = 0, -- 0/6

-- list of core values that are changed manually throughout the tests
edir = 1, -- 1/-1 (element direction)
sdir = 1, -- 1/-1 (tracking direction)
chg = 1, -- 1/-1 (charge)
tdir = \s-> s.edir * s.sdir, -- tracking time direction
bdir = \s-> s.edir * s.sdir * s.chg, -- tracking beam direction

x0i = 1..4, -- 0, 4D, 5D, 6D (see get_mad_str)
}


-- The actual test functions --------------------------------------------------o
local function testQUAD() -- Test the body (~2 min)
local cfg = ref_cfg "quad" {
elm = "quadrupole 'quad' {at=0.75, l=1.5, k1=${bdir}*${k1}, k1s=${bdir}*${k1s},tilt=${tilt}, fringe=0}",
model = 1..2,
method = 2..6..2,
nslice = 1..3,
energy = {1, 6500}, -- {1, 450, 6500}

tol = 100,

k1 = {-0.15, 0, 0.2},
k1s = {-0.15, 0, 0.2},
tilt = 0,
alist = tblcat(ref_cfg.alist, {"k1", "k1s"}),

plot_info = {
title = "Quadrupole NG v NG Maps",
series = {
"'${test_type}' == 'edir'",
"'${test_type}' == 'chg'",
"'${test_type}' == 'backtrack'",
"'${test_type}' == 'rotate_1'",
"'${test_type}' == 'rotate_2'",
},
legend = {
y1 = "Reverse edir",
y2 = "Reverse charge",
y3 = "Backtrack",
y4 = "Rotate by pi/4",
y5 = "Rotate by -pi/4",
},
filename = "quad-ngvng.png",
}
}
local equiv = object "quad" {
rotate = object { -- Requires deferred expression
"tilt", "k1", "k1s",
tilt = {"math.pi/4", "-math.pi/4"},
k1 := {-cfg.cur_cfg.k1s, cfg.cur_cfg.k1s},
k1s := { cfg.cur_cfg.k1 , -cfg.cur_cfg.k1 },

n = 2,
},

alist = {"rotate"},
}
run_test(cfg, equiv)
end

local function testSBEND() -- Test the body (~2 min)
local cfg = ref_cfg "sbend" {
elm = "sbend 'sbend' {at=0.75, l=1.5, k0=${bdir}*math.pi/${angle_div}, angle=${tdir}*math.pi/${angle_div}*1.5, fringe=0}",
model = {1, 2},
method = 2..6..2,
nslice = 1..3,
energy = {1, 6500}, -- {1, 450, 6500}

tol = 600,

angle_div = {50, 100, 200, 500, 1000},
alist = tblcat(ref_cfg.alist, {"angle_div"}),

plot_info = {
title = "SBend NG v NG Maps",
series = {
"'${test_type}' == 'edir'",
"'${test_type}' == 'chg'",
"'${test_type}' == 'backtrack'",
},
legend = {
y1 = "Reverse edir",
y2 = "Reverse charge",
y3 = "Backtrack",
},
filename = "sbend-ngvng.png",
}
}
run_test(cfg, {alist = {}})
end

local function testRBEND() -- Test the body (~2 min)
local cfg = ref_cfg "rbend" {
elm = [[rbend 'rbend' {
at=0.75, l=1.5, k0=${bdir}*math.pi/${angle_div}, angle=${tdir}*math.pi/${angle_div}*1.5, fringe=0,
e1 = ${edir}*${e1}*math.pi/${angle_div}*1.5, e2 = ${edir}*${e2}*math.pi/${angle_div}*1.5
}]],
model = {1, 2},
method = 2..6..2,
nslice = 1..3,
energy = {1, 6500}, -- {1, 450, 6500}

tol = 2000,

angle_div = {50, 100, 200, 500, 1000},
e1 = {-0.15, 0, 0.2},
e2 = {-0.2, 0, 0.15},
alist = tblcat(ref_cfg.alist, {"angle_div", "e1", "e2"}),

plot_info = {
title = "RBend NG v NG Maps",
series = {
"'${test_type}' == 'edir'",
"'${test_type}' == 'chg'",
"'${test_type}' == 'backtrack'",
},
legend = {
y1 = "Reverse edir",
y2 = "Reverse charge",
y3 = "Backtrack",
},
filename = "rbend-ngvng.png",
}
}
run_test(cfg, {alist = {}})
end

local function testRFMULTIPOLE()
local cfg = ref_cfg "rfmultipole" {
elm = "${element} 'rfm' {at=0.75, l=${l}, volt=0, freq=75, knl=${knl}, fringe=0}",
model = {1, 2},
method = 2..6..2,
nslice = 1..3,
energy = {1, 6500}, -- {1, 450, 6500}

element = "rfmultipole",
l = 1.5,

tol = 100,

knl = {
{0, 0, 0, 0},
{0.5, 0, 0, 0},
{0, 5, 0, 0},
{0, 0, 50, 0},
{0, 0, 0, 500},
{0.5, 5, 50, 500},
},
alist = tblcat(ref_cfg.alist, {"knl"}),
}

local equiv = object "rfm" {
multipole = object {
"element", "l",
element := {
"multipole"
},
l = {0},

n = 1,
},

alist = {"multipole"},
}
run_test(cfg, equiv)
end

testQUAD()
testSBEND()
testRBEND()
-- testRFMULTIPOLE()
Loading