source: TRACY3/trunk/tracy/tracy/src/tracy.cc @ 11

Last change on this file since 11 was 11, checked in by zhangj, 11 years ago
  • Property svn:executable set to *
File size: 7.2 KB
Line 
1/* Tracy-2
2
3 J. Bengtsson, CBP, LBL      1990 - 1994   Pascal version
4               SLS, PSI      1995 - 1997
5 M. Boege      SLS, PSI      1998          C translation
6 L. Nadolski   SOLEIL        2002          Link to NAFF, Radia field maps
7 J. Bengtsson  NSLS-II, BNL  2004 -
8
9 */
10
11#include "tracy_lib.h"
12
13#include "field.cc"
14
15#if ORDER == 1
16// linear TPSA
17#include "tpsa_lin.cc"
18#include "tpsa_lin_pm.cc"
19#else
20// interface to M. Berz' TPSA
21#include "tpsa_for_pm.cc"
22#endif
23
24#include "mathlib.cc"
25
26#include "ety.cc"
27#include "eigenv.cc"
28
29#include "t2lat.cc"
30#include "t2elem.cc"
31#include "t2cell.cc"
32#include "t2ring.cc"
33
34#include "pascalio.cc"
35
36#include "lsoc.cc" //for COD correction
37#include "prtmfile.cc"
38#include "rdmfile.cc"
39
40#include "fft.cc"
41
42#include "physlib.cc"
43
44#include "naffutils.cc"
45
46#include "modnaff.cc"
47#include "radia2tracy.cc"
48#include "soleillib.cc"
49
50#include "nsls-ii_lib.cc"
51
52/* new added since 2010 at soleil */
53#include "max4_lib.cc"
54#include "soleilcommon.cc"
55#include "read_script.cc"
56
57// Truncated Power Series Algebra (TPSA)
58const int nv_tps = ss_dim, // no of variables
59    nd_tps = 3, // no of degrees of freedom
60    ndpt_tps = 5, // index for delta, 0 for 6-D dynamics
61    iref_tps = 0; /* file with resonances to be excluded from
62 the map normal form: fort.7 */
63double eps_tps = 1e-25; // floating point truncation
64
65
66// instantiate templates
67
68template class ss_vect<double> ;
69
70template class ss_vect<tps> ;
71
72template void GtoL(ss_vect<double> &, Vector2 &, Vector2 &, const double,
73    const double, const double);
74
75template void GtoL(ss_vect<tps> &, Vector2 &, Vector2 &, const double,
76    const double, const double);
77
78template void
79    LtoG(ss_vect<tps> &, Vector2 &, Vector2 &, double, double, double);
80
81template void LtoG(ss_vect<double> &, Vector2 &, Vector2 &, double, double,
82    double);
83
84template void p_rot(double, ss_vect<double> &);
85
86template void p_rot(double, ss_vect<tps> &);
87
88template void get_B2(const double, const double[], const ss_vect<double> &,
89    double &, double &);
90
91template void get_B2(const double, const tps[], const ss_vect<tps> &, tps &,
92    tps &);
93
94template void radiate(ss_vect<double> &, const double, const double,
95    const double[]);
96
97template void radiate(ss_vect<tps> &, const double, const double, const tps[]);
98
99template void Drift(double, double, ss_vect<double> &);
100
101template void Drift(double, double, ss_vect<tps> &);
102
103template void Drift(double, ss_vect<double> &);
104
105template void Drift(double, ss_vect<tps> &);
106
107template void bend_fringe(double, ss_vect<double> &);
108
109template void bend_fringe(double, ss_vect<tps> &);
110
111template void bend_fringe(double, double, ss_vect<double> &);
112
113template void bend_fringe(double, double, ss_vect<tps> &);
114
115template static void BendCurvature(double, double, ss_vect<double> &);
116
117template static void BendCurvature(double, double, ss_vect<tps> &);
118
119template static void EdgeFocus(double, double, double, ss_vect<double> &, bool);
120
121template static void EdgeFocus(double, double, double, ss_vect<tps> &,bool);
122
123template void quad_fringe(double, ss_vect<double> &);
124
125template void quad_fringe(double, ss_vect<tps> &);
126
127template void Drift_Pass(CellType &, ss_vect<double> &);
128
129template void Drift_Pass(CellType &, ss_vect<tps> &);
130
131
132template void dipole_kick(double, double, double, ss_vect<double> &);
133template void dipole_kick(double, double, double, ss_vect<tps> &);
134template void multipole_kick(int, double[], double, double, ss_vect<double> &);
135template void multipole_kick(int, double[], double, double, ss_vect<tps> &);
136
137template void thin_kick(int, double[], double, double, double,
138    ss_vect<double> &);
139
140template void thin_kick(int, double[], double, double, double, ss_vect<tps> &);
141
142template void Mpole_Pass(CellType &, ss_vect<double> &);
143
144template void Mpole_Pass(CellType &, ss_vect<tps> &);
145
146template void Marker_Pass(CellType &, ss_vect<double> &);
147
148template void Marker_Pass(CellType &, ss_vect<tps> &);
149
150template void Cav_Pass(CellType &, ss_vect<double> &);
151
152template void Cav_Pass(CellType &, ss_vect<tps> &);
153
154template void Wiggler_pass_EF(const elemtype &elem, ss_vect<double> &x);
155
156template void Wiggler_pass_EF(const elemtype &elem, ss_vect<tps> &x);
157
158template void Wiggler_pass_EF2(int nstep, double L, double kxV, double kxH,
159    double kz, double BoBrhoV, double BoBrhoH, double phi, ss_vect<double> &x);
160
161template void Wiggler_pass_EF2(int nstep, double L, double kxV, double kxH,
162    double kz, double BoBrhoV, double BoBrhoH, double phi, ss_vect<tps> &x);
163
164template void Wiggler_pass_EF3(const elemtype &elem, ss_vect<double> &x);
165
166template void Wiggler_pass_EF3(const elemtype &elem, ss_vect<tps> &x);
167
168template void Wiggler_Pass(CellType &, ss_vect<double> &);
169
170template void Wiggler_Pass(CellType &, ss_vect<tps> &);
171
172template void FieldMap_Pass(CellType &, ss_vect<double> &);
173
174template void FieldMap_Pass(CellType &, ss_vect<tps> &);
175
176template void sol_pass(const elemtype &, ss_vect<double> &);
177
178template void sol_pass(const elemtype &, ss_vect<tps> &);
179
180template void Solenoid_Pass(CellType &, ss_vect<double> &);
181
182template void Solenoid_Pass(CellType &, ss_vect<tps> &);
183
184template void LinearInterpolation2(double &, double &, double &, double &,
185    CellType &, bool &, int);
186
187template void LinearInterpolation2(tps &, tps &, tps &, tps &, CellType &,
188    bool &, int);
189
190template void SplineInterpolation2(double &, double &, double &, double &,
191    CellType &, bool &, int);
192
193template void SplineInterpolation2(tps &, tps &, tps &, tps &, CellType &,
194    bool &, int);
195
196template void spline(const double[], const double[], int const, double const,
197    const double, double[]);
198
199template void spline(const double[], const tps[], int const, double const,
200    const double, tps[]);
201
202template void splint(const double[], const double[], const double[], const int,
203    const double &, double &);
204
205template void splint(const double[], const double[], const double[], const int,
206    const tps &, tps &);
207
208template void splint(const double[], const tps[], const tps[], const int,
209    const tps &, tps &);
210
211template void splin2(const double[], const double[], double **, double **,
212    const int, const int, const double &, const double &, double &);
213
214template void splin2(const double[], const double[], double **, double **,
215    const int, const int, const tps &, const tps &, tps &);
216
217template void Insertion_Pass(CellType &, ss_vect<double> &);
218
219template void Insertion_Pass(CellType &, ss_vect<tps> &);
220
221template void Elem_Pass(const long, ss_vect<double> &);
222
223template void Elem_Pass(const long, ss_vect<tps> &);
224
225template void Cell_Pass(const long, const long, ss_vect<double> &, long &);
226
227template void Cell_Pass(const long, const long, ss_vect<tps> &, long &);
228
229/* Global variable used through the code */
230globvalrec globval;
231
232statusrec status;
233bool trace, traceID;
234bool cellconcat;
235
236/* Random stuff */
237long rseed0, rseed;
238double normcut_;
239
240double d_sign(double a, double b) {
241  double x;
242
243  x = (a >= 0 ? a : -a);
244  return (b >= 0 ? x : -x);
245}
246
247int P_eof(FILE *f) {
248  register int ch;
249
250  if (feof(f))
251    return 1;
252  if (f == stdin)
253    return 0; /* not safe to look-ahead on the keyboard! */
254  ch = getc(f);
255  if (ch == EOF)
256    return 1;
257  ungetc(ch, f);
258
259  return 0;
260}
261
262/* Check if at end of line (or end of entire file). */
263
264int P_eoln(FILE *f) {
265  register int ch;
266
267  ch = getc(f);
268  if (ch == EOF)
269    return 1;
270  ungetc(ch, f);
271  return (ch == '\n');
272}
Note: See TracBrowser for help on using the repository browser.