source: TRACY3/trunk/tracy/tracy/inc/tracy_global.h @ 11

Last change on this file since 11 was 11, checked in by zhangj, 11 years ago
  • Property svn:executable set to *
File size: 12.2 KB
Line 
1#define PLANES 2
2#define BPM_MAX 120
3
4typedef struct globvalrec {
5  double        dPcommon,       // dp for numerical differentiation
6                dPparticle;     // energy deviation
7  double        delta_RF;       // RF acceptance
8  Vector2       TotalTune;      // transverse tunes
9  double        Omega,
10                U0,             // energy lost per turn in keV
11                Alphac;         // alphap
12  Vector2       Chrom;          // chromaticities
13  double        Energy;         // ring energy
14  long          Cell_nLoc,      // number of elements in a cell
15                Elem_nFam,      // number of families
16                CODimax;        /* maximum number of cod search before
17                                   failing */
18  double        CODeps;         // precision for closed orbit finder
19  Vector        CODvect;        // closed orbit; beam position at the first element of lattice
20 
21  // family index for special elements
22  long int       bpm;          // family index of bpm
23  long int       hcorr;          // family index of horizontal corrector which are used for orbit correction
24  long int       vcorr;          // family index of vertical corrector which are used for orbit correction
25  long int       qt;           // family index of skew quadrupole
26  int            gs;             // family number of start girder 
27  int            ge;             // family number of end girder
28  long int       cav;          // family index of RF cavity
29 
30  // matrix
31  Matrix        OneTurnMat,     // oneturn matrix
32                Ascr,
33                Ascrinv,
34                Vr,             // real part of the eigenvectors
35                Vi;             // imaginal par of the eigenvectors
36
37  bool          MatMeth,        // matrix method
38                Cavity_on,      // if true, cavity turned on
39                radiation,      // if true, radiation turned on
40                emittance,
41                quad_fringe,    /* dipole- and quadrupole hard-edge
42                                   fringe fields. */
43                H_exact,        // "small ring" Hamiltonian.
44                pathlength,     // absolute path length
45                stable,
46                Aperture_on,
47                EPU,
48                wake_on;
49
50  double        dE,             // energy loss
51                alpha_rad[DOF], // damping coeffs.
52                D_rad[DOF],     // diffusion coeffs (Floquet space)
53                J[DOF],         // partition numbers
54                tau[DOF];       // damping times
55  bool          IBS;            // intrabeam scattering
56  double        Qb,             // bunch charge
57                D_IBS[DOF];     // diffusion matrix (Floquet space)
58  Vector        wr, wi;         // real and imaginary part of eigenvalues
59  Vector3       eps,            // 3 motion invariants, emittance?
60                epsp;           /* transverse and longitudinal projected
61                                   emittances */
62  int           RingType;       // 1 if a ring (0 if transfer line)
63 
64 long bpm_list[BPM_MAX];        /* list of position for bpms into the lattice */
65 long hcorr_list[BPM_MAX];      /* list of position for horizontal correctors */
66 long vcorr_list[BPM_MAX];      /* list of position for vertical correctors  */
67 long qt_list[BPM_MAX];        /* list of position for vertical correctors into the lattice */
68
69
70} globvalrec;
71
72
73struct DriftType {
74  Matrix D55; // Linear matrix
75};
76
77
78struct MpoleType {
79  int         Pmethod;   // Integration Method
80  int         PN;        // Number of integration steps
81  long        dipEdge_effect1; // dipole edge effect at the entrance
82  long        dipEdge_effect2; // dipole edge effect at the exit
83  long        quadFF1;         /* Entrance quadrupole Fringe field flag */
84  long        quadFF2;         /* Exit quadrupole Fringe field flag */
85  double      quadFFscaling;         /* quadrupole Fringe field scaling factor flag */
86  long        sextFF1;         /* Entrance sextupole Fringe field flag */
87  long        sextFF2;         /* Exit sextupole Fringe field flag */
88 
89  bool         Status;         /* specific for correctors used for orbit correction. If true, use the corrector
90                                  to correct orbit, if false, not use. */
91 
92  // Displacement Errors
93  Vector2     PdSsys;    // systematic displacement error[m]
94  Vector2     PdSrms;    // rms value of the displacement error[m]
95  Vector2     PdSrnd;    // (normal)random scale factor to displacement error PdSrms
96  // Roll angle
97  double      PdTpar;    // design rotation angle, if not equal zero, then skew multipole[deg]
98  double      PdTsys;    // systematic [deg]
99  double      PdTrms;    // rms rotation error of the element[deg]
100  double      PdTrnd;    // (normal)random scale factor to rotation error PdTrms
101  // Multipole strengths
102  mpolArray   PBpar;     // design field gradient; bn, and an
103  mpolArray   PBsys;     // systematic multipole errors gradient, bn and an
104  mpolArray   PBrms;     // rms multipole field errors gradient, bn and an
105  mpolArray   PBrnd;     // random scale factor of rms error PBrms gradient, bn and an
106  mpolArray   PB;        // total field strength(design,sys,rms) gradient, bn and an
107  int         Porder;    // The highest order in PB
108  int         n_design;  // multipole order (design, All = 0, Dip = 1, Quad = 2, Sext = 3, Oct = 4, Dec = 5, Dodec = 6)
109  pthicktype  Pthick;    // thick element
110  // Bending Angles
111  double PTx1;           // horizontal entrance angle [deg]
112  double PTx2;           // horizontal exit angle [deg]
113  double PH1;            // bending curvature of the entrance pole face of dipole, see P116 SAC-75.
114  double PH2;            // bending curvature of the exit pole face of dipole, see P116 SAC-75.
115  double Pgap;           // total magnet gap [m]
116  double Pirho;          // angle([radian], but in lattice definition, angle is with unit degree)/length of the dipole, 1/rho [1/m]
117  double Pc0, Pc1, Ps1;  // corrections for roll error of bend
118  Matrix AU55,           // Upstream 5x5 matrix
119    AD55;           // Downstream 5x5 matrix
120};
121
122const int  n_harm_max = 10;
123
124struct WigglerType {
125  int Pmethod;                // Integration Method
126  int PN;                     // number of integration steps
127  // Displacement Error
128  Vector2 PdSsys;             // systematic [m] 
129  Vector2 PdSrms;             // rms [m]
130  Vector2 PdSrnd;             // random number
131  // Roll angle
132  double PdTpar;              // design [deg]
133  double PdTsys;              // systematic [deg]
134  double PdTrms;              // rms [deg]
135  double PdTrnd;              // random number
136  double lambda;              // lambda
137  int    n_harm;              // no of harmonics
138  int    harm[n_harm_max];    // harmonic number
139  double BoBrhoV[n_harm_max]; // B/Brho vertical
140  double BoBrhoH[n_harm_max]; // B/Brho horizontal
141  double kxV[n_harm_max];     // vertical kx
142  double kxH[n_harm_max];     // horizontal kx
143  double phi[n_harm_max];     // phi
144  mpolArray PBW;
145  Matrix W55;                 // Transport matrix
146  int Porder;                 // The highest order in PB
147};
148
149
150const int  i_max_FM = 100, j_max_FM = 100, k_max_FM = 1000;
151
152struct FieldMapType {
153  int     n_step; // number of integration steps
154  int     n[3];                                         // no of steps
155  double  scl;
156  double  xyz[3][i_max_FM][j_max_FM][k_max_FM];         // [x, y, z]
157  double  B[3][i_max_FM][j_max_FM][k_max_FM];           // [B_x, B_y, B_z]
158  double  **AxoBrho, **AxoBrho2, **AyoBrho, **AyoBrho2; // Ax(y, s), Ay(x, s)
159};
160
161
162/* ID Laurent */
163#define IDXMAX 500
164#define IDZMAX 100
165
166struct InsertionType {
167  int Pmethod;      /* Integration Method */
168  int PN;           /* number of integration steps */
169  char fname1[100]; /* Filename for insertion description: first order */
170  char fname2[100]; /* Filename for insertion description: second order */
171  int nx1;           /* Horizontal point number */
172  int nx2;           /* Horizontal point number */
173  int nz1;           /* Vertical point number */
174  int nz2;           /* Vertical point number */
175  double scaling1;   /* static scaling factor as in BETA ESRF first order*/
176  double scaling2;   /* static scaling factor as in BETA ESRF second order*/
177  bool linear;      /* if true linear interpolation else spline */
178  bool firstorder;  /* true if first order kick map loaded */
179  bool secondorder; /* true if second order kick map loaded */
180  double tabx1[IDXMAX]; /* spacing in H-plane */
181  double tabz1[IDZMAX]; /* spacing in V-plane */
182  double tabx2[IDXMAX]; /* spacing in H-plane */
183  double tabz2[IDZMAX]; /* spacing in V-plane */
184  double thetax2[IDZMAX][IDXMAX], thetax1[IDZMAX][IDXMAX]; /* 1 for 1st order */
185  double thetaz2[IDZMAX][IDXMAX], thetaz1[IDZMAX][IDXMAX];
186  double **tx2, **tz2, **f2x2, **f2z2; // used for splie2 and splin2 (Spline interpolation)
187  double **tx1, **tz1, **f2x1, **f2z1; // used for splie2 and splin2
188  double *TabxOrd1, *TabzOrd1; // tab of x and z meshes from Radia code in increasing order
189  double *TabxOrd2, *TabzOrd2; // tab of x and z meshes from Radia code in increasing order
190 
191  /* Displacement Error */
192  Vector2 PdSsys;   /* systematic [m]  */
193  Vector2 PdSrms;   /* rms [m] */
194  Vector2 PdSrnd;   /* random number */
195  /* Roll angle */
196  double PdTpar;    /* design [deg] */
197  double PdTsys;    /* systematic [deg] */
198  double PdTrms;    /* rms [deg] */
199  double PdTrnd;    /* random number */
200  Matrix K55;        /* Transport matrix:kick part */
201  Matrix D55;        /* Transport matrix:drift part */
202  Matrix KD55;       /* Transport matrix:concatenation of kicks and drifts */
203  int Porder;        /* The highest order in PB */
204};
205
206struct CavityType {
207  double Pvolt;   // Vrf [V]
208  double Pfreq;   // Vrf [Hz]
209  double phi;     // RF phase
210  int    Ph;      // Harmonic number
211};
212
213struct CellType;
214
215const int  Spreader_max = 10;
216
217struct SpreaderType {
218  double    E_max[Spreader_max];      // energy levels in increasing order
219  CellType  *Cell_ptrs[Spreader_max];
220};
221
222struct RecombinerType {
223  double    E_min;
224  double    E_max;
225};
226
227struct SolenoidType {
228  int         N;         // Number of integration steps
229  // Displacement Errors
230  Vector2     PdSsys;    // systematic [m]
231  Vector2     PdSrms;    // rms [m]
232  Vector2     PdSrnd;    // random number
233  // Roll angle
234  double      dTpar;     // design [deg]
235  double      dTsys;     // systematic [deg]
236  double      dTrms;     // rms [deg]
237  double      dTrnd;     // random number
238  double      BoBrho;    // normalized field strength
239};
240
241struct elemtype {
242  partsName PName;   /* Element name */
243  double PL;         /* Length[m]    */
244  PartsKind Pkind;   /* Enumeration  for magnet types */
245  union
246  {
247    DriftType      *D;   // Drift
248    MpoleType      *M;   // Multipole
249    WigglerType    *W;   // Wiggler
250    FieldMapType   *FM;  // Field Map
251    InsertionType  *ID;  // Insertion
252    CavityType     *C;   // Cavity
253    SpreaderType   *Spr; // Spreader
254    RecombinerType *Rec; // Recombiner
255    SolenoidType   *Sol; // Solenoid
256  };
257};
258
259struct ElemFamType {
260  elemtype    ElemF;    /* Structure (name, type) */
261  int         nKid;         /* number of Kids in a family */
262  int         KidList[nKidMax]; /* list of kid index in the total lattice*/
263  int         NoDBN;
264  DBNameType  DBNlist[nKidMax];
265};
266
267// LEGO block structure for each element of the lattice
268struct CellType {
269  long int              Fnum;        // Element Family #
270  long int              Knum;        // Element Kid #
271  double           S;           // Position in the ring [m]
272  CellType*        next_ptr;    // pointer to next cell (for tracking)
273  Vector2          dS,          // displacement error of the element[m]
274                   dT;          // rotation error of the element[degree], dT = (cos(dT), sin(dT))
275  elemtype         Elem;        // Structure (name, type)
276  Vector2          Nu,          // Phase advances
277                   Alpha,       // Alpha functions (redundant)
278                   Beta,        // beta fonctions (redundant)
279                   Eta, Etap;   // dispersion and its derivative (redundant)
280  Vector           BeamPos;     // position of the beam at the cell;
281  Matrix           A,           // Floquet space to phase space transformation
282                   sigma;       // sigma matrix (redundant)
283  Vector2          maxampl[PLANES]; /* Horizontal and vertical physical
284                                       apertures:
285                                         maxampl[X_][0] < x < maxampl[X_][1]
286                                         maxampl[Y_][0] < y < maxampl[Y_][1] */
287};
Note: See TracBrowser for help on using the repository browser.