source: PSPA/madxPSPA/tests/test-match/test-match.madx @ 457

Last change on this file since 457 was 430, checked in by touze, 11 years ago

import madx-5.01.00

File size: 4.0 KB
Line 
1! 2011/11/22 R. De Maria Generate optimized triplet layouts
2
3Option, -warn,-info,-echo;
4
5lq1=0.50;
6lq2=0.50;
7endseq=165;
8ffocus: sequence,refer = CENTRE, L := endseq;
9q11 :quadrupole,l:=l1/2,k1:= k1,at:=lstar+l1/4;
10q12 :quadrupole,l:=l1/2,k1:= k1,at:=lstar+l1*3/4+lq1;
11q2a1:quadrupole,l:=l2/2,k1:=-k2,at:=lstar+l1+lq1+d12+l2/4;
12q2a2:quadrupole,l:=l2/2,k1:=-k2,at:=lstar+l1+lq1+lq2+d12+l2*3/4;
13q2b1:quadrupole,l:=l2/2,k1:=-k2,at:=lstar+l1+lq1+lq2+d12+d22+l2*5/4;
14q2b2:quadrupole,l:=l2/2,k1:=-k2,at:=lstar+l1+lq1+2*lq2+d12+d22+l2*7/4;
15q31 :quadrupole,l:=l3/2,k1:= k3,at:=lstar+l1+lq1+2*lq2+d12+2*l2+d22+d23+l3/4;
16q32 :quadrupole,l:=l3/2,k1:= k3,at:=lstar+l1+2*lq1+2*lq2+d12+2*l2+d22+d23+l3*3/4;
17endsequence;
18beam;
19
20r_tol_IT=0.0006;
21h_tol_IT=0.0010;
22v_tol_IT=0.0010;
23
24calc_triplet(bxs,bys): macro= {
25   use,sequence=ffocus;
26   twiss,betx=bxs,bety=bys;
27   bq2a1=table(twiss,q2a1,betymax);
28   bq2a2=table(twiss,q2a2,betymax);
29   bq2b1=table(twiss,q2b1,betymax);
30   bq2b2=table(twiss,q2b2,betymax);
31   bq31=table(twiss,q31,betxmax);
32   bq32=table(twiss,q32,betxmax);
33   bq2max=bq2a1;
34   if (bq2a2>bq2max){ bq2max=bq2a2;};
35   if (bq2b1>bq2max){ bq2max=bq2b1;};
36   if (bq2b2>bq2max){ bq2max=bq2b2;};
37   bq3max=bq32;
38   alfxend=table(twiss,FFOCUS$END,alfx);
39   alfyend=table(twiss,FFOCUS$END,alfy);
40   betxend=table(twiss,FFOCUS$END,betx);
41   betyend=table(twiss,FFOCUS$END,bety);
42};
43
44mk_triplet(bxs,bys,grad,posq4,betxq4,betyq4): macro={
45imbmax=1;
46endseq=posq4;
47
48tbetx:=table(twiss,betx); tbety:=table(twiss,bety);
49talfx:=table(twiss,alfx); talfy:=table(twiss,alfy);
50tk1l :=table(twiss,k1l); tl:=table(twiss,l);
51betxmax:=tbetx+talfx^2/tbetx/abs(tk1l/tl);
52betymax:=tbety+talfy^2/tbety/abs(tk1l/tl);
53select,flag=twiss,clear;
54select,flag=twiss,column=name,s,l,angle,k1l,hkick,vkick,kick,betx,bety,alfx,alfy,dx,dpx,dy,dpy,mux,muy,x,y,px,py,betxmax,betymax;
55
56brho=7e12/clight; k=grad/brho;
57
58lstar=23;
59
60l1=7.145; l2=6.735;
61if (grad<120 )  { l1=9.145; l2=7.735; };
62d12:=d23; l3:=l1;
63
64k1:=k; k2:=k; k3:=k;
65match,use_macro;
66vary,name=l1;
67vary,name=l2;
68vary,name=k3;
69use_macro,name=calc_triplet(bxs,bys);
70constraint, expr= bq3max = imbmax*bq2max;
71constraint, expr= betxend  =betxq4;
72constraint, expr= betyend  =betyq4;
73constraint, expr= 1e5*alfxend    >2e5;
74constraint, expr= 1e5*alfyend    >2e5;
75jacobian,calls=60,tolerance=1e-14,bisec=9;
76endmatch;
77
78if (k3>k) {
79k1:=k; k2=k; k3=k;
80match,use_macro;
81vary,name=l1;
82vary,name=l2;
83vary,name=k1;
84use_macro,name=calc_triplet(bxs,bys);
85constraint, expr= bq3max = imbmax*bq2max;
86constraint, expr= betxend  =betxq4;
87constraint, expr= betyend  =betyq4;
88constraint, expr= 1e5*alfxend    >2e5;
89constraint, expr= 1e5*alfyend    >2e5;
90jacobian,calls=60,tolerance=1e-14,bisec=9;
91endmatch;
92};
93
94if (tar>1e-10){stop;};
95
96bq3orig=bq3max;
97
98exec,round(l1,1000);
99exec,round(l2,1000);
100exec,round(l3,1000);
101exec,round(d12,1000);
102exec,round(d22,1000);
103exec,round(d23,1000);
104
105match,use_macro;
106vary,name=k1;
107vary,name=k2;
108vary,name=k3;
109use_macro,name=calc_triplet(bxs,bys);
110constraint, expr= bq3max = imbmax*bq2max;
111constraint, expr= betxend  =betxq4;
112constraint, expr= betyend  =betyq4;
113constraint, expr= 1e5*alfxend    >2e5;
114constraint, expr= 1e5*alfyend    >2e5;
115jacobian,calls=60,tolerance=1e-14,bisec=9;
116endmatch;
117
118l.mqxl:=l1;l.mqx:=l2;
119dq1q2a:=d12;dq2aq2b:=d22;dq2bq3:=d23;dq1aq1b=d11;
120kqx1.l1 =-k1;  kqx1.r1=k1;  kqx1.l5=-k1;  kqx1.r5=k1;
121kqx2a.l1=-k2; kqx2a.r1=k2; kqx2a.l5=-k2; kqx2a.r5=k2;
122kqx2b.l1=-k2; kqx2b.r1=k2; kqx2b.l5=-k2; kqx2b.r5=k2;
123kqx3.l1 =-k3;  kqx3.r1=k3;  kqx3.l5=-k3;  kqx3.r5=k3;
124exec,calc_triplet(bxs,bys);
125g1=kqx1.r1*brho;g2=kqx2a.r1*brho; g3=kqx3.r5*brho;
126value,g1,g2,g3;
127totlen:=lstar+l1+d12+2*l2+d22+d23+l3+4*lqq;
128show,l.mqxl,l.mqx,totlen;
129value,l.mqxl,l.mqx,dq1q2a,dq2aq2b,dq2bq3,lqq,totlen;
130value,bq3orig,bq3max;
131value,bq2a1,bq2a2,bq2b1,bq2b2,bq31,bq32;
132value,alfxend;
133value,alfyend;
134value,bq3max*bxs;
135};
136
137__round(xv,xn): macro={ if ( xv-xn > 0.5) { xv=xn+1; } else { xv=xn; }; };
138round(xv,digits): macro={
139  xtmp=xv*digits;
140  exec,__round(xtmp,$xtmp);
141  xv=xtmp/digits;
142};
143
144exec,mk_triplet(0.60,0.60,150,120,1913,1234);
145
Note: See TracBrowser for help on using the repository browser.