diff --git a/tracy/configure.ac b/tracy/configure.ac index 39b994b8086062bedbb0652e85396bd46e32b85d..9be70ceec799013aa7a4370b832782f572983344 100644 --- a/tracy/configure.ac +++ b/tracy/configure.ac @@ -1,5 +1,5 @@ # Process this file with autoconf to produce a configure script. -AC_INIT([Tracy], [3.10], [nadolski@synchrotron-soleil.fr]) +AC_INIT([Tracy], [3.11], [nadolski@synchrotron-soleil.fr]) # Set auxilliary directory for config files AC_CONFIG_AUX_DIR(config) diff --git a/tracy/tracy/inc/t2elem.h b/tracy/tracy/inc/t2elem.h index a24b7d0a3f77f74dbfd0aee41f00e39eb934ab79..127c34eb8ac40019a0bb0359986941362aa12d98 100644 --- a/tracy/tracy/inc/t2elem.h +++ b/tracy/tracy/inc/t2elem.h @@ -62,6 +62,9 @@ void Mpole_Pass(CellType &Cell, ss_vect<T> &x); template<typename T> void Marker_Pass(CellType &Cell, ss_vect<T> &X); +template<typename T> +void Aperture_Pass(CellType &Cell, ss_vect<T> &X); + template<typename T> void Cav_Pass(CellType &Cell, ss_vect<T> &X); @@ -125,6 +128,8 @@ void LinsTrans(Matrix &A, Vector &b); void Drift_Alloc(elemtype *Elem); +void Aperture_Alloc(elemtype *Elem); + void Mpole_Alloc(elemtype *Elem); void Cav_Alloc(elemtype *Elem); @@ -156,6 +161,8 @@ void Cav_Init(int Fnum1); void Marker_Init(int Fnum1); +void Aperture_Init(int Fnum1); + void Insertion_Init(int Fnum1); void Spreader_Init(int Fnum1); diff --git a/tracy/tracy/inc/tracy.h b/tracy/tracy/inc/tracy.h index 6723865bbb0d484706a62648b5b1aaf6d9d3bec3..2c3c14ab32b2871a13a6bd50d38da7f7f0271fef 100644 --- a/tracy/tracy/inc/tracy.h +++ b/tracy/tracy/inc/tracy.h @@ -75,8 +75,8 @@ const double max_ampl = 1.0; // [m] soleil enum pthicktype { thick = 0, thin = 1 }; enum PartsKind { drift = 0, Wigl = 1, Mpole = 2, Cavity = 3, marker = 4, - undef = 5, Insertion = 6, FieldMap = 7, - Spreader = 8, Recombiner = 9, Solenoid = 10 }; + undef = 5, Insertion = 6, FieldMap = 7, + Spreader = 8, Recombiner = 9, Solenoid = 10, Aperture = 11}; enum { All = 0, Dip = 1, Quad = 2, Sext = 3, Oct = 4, Dec = 5, Dodec = 6 }; diff --git a/tracy/tracy/inc/tracy_global.h b/tracy/tracy/inc/tracy_global.h index afca82afe57dd1cb230451ebccc22c5904e618bb..8e858191aac14460934b93d675dfe2724a4c4a61 100644 --- a/tracy/tracy/inc/tracy_global.h +++ b/tracy/tracy/inc/tracy_global.h @@ -1,5 +1,5 @@ #define PLANES 2 -#define BPM_MAX 120 +#define BPM_MAX 122 typedef struct globvalrec { double dPcommon, // dp for numerical differentiation @@ -74,6 +74,10 @@ struct DriftType { Matrix D55; // Linear matrix }; +struct ApertureType { + double Aper[4][3]; // Aperture +}; + struct MpoleType { int Pmethod; // Integration Method @@ -249,6 +253,7 @@ struct elemtype { SpreaderType *Spr; // Spreader RecombinerType *Rec; // Recombiner SolenoidType *Sol; // Solenoid + ApertureType *A; // Asymmetric aperture }; }; @@ -277,7 +282,7 @@ struct CellType { Matrix A, // Floquet space to phase space transformation sigma; // sigma matrix (redundant) Vector2 maxampl[PLANES]; /* Horizontal and vertical physical - apertures: - maxampl[X_][0] < x < maxampl[X_][1] - maxampl[Y_][0] < y < maxampl[Y_][1] */ + apertures: + maxampl[X_][0] < x < maxampl[X_][1] + maxampl[Y_][0] < y < maxampl[Y_][1] */ }; diff --git a/tracy/tracy/src/prtmfile.cc b/tracy/tracy/src/prtmfile.cc index 3c18d3b68ad5bb67b4d613b60d61f55633f97224..d13439b30f7f8b46e1f81226c7b55343f8c4a9b1 100644 --- a/tracy/tracy/src/prtmfile.cc +++ b/tracy/tracy/src/prtmfile.cc @@ -18,6 +18,7 @@ thin kick 3 wiggler 4 kick_map 6 + aperture 11 Integration methods: @@ -72,6 +73,7 @@ #define thinkick_ 3 #define wiggler_ 4 #define kick_map_ 6 +#define aperture_ 11 /****************************************************************************** void prtName(FILE *fp, const int i, @@ -91,6 +93,7 @@ thin kick 3 wiggler 4 kick_map 6 + aperture 11 method integrated method N number of integration steps of the element @@ -123,7 +126,7 @@ void prtName(FILE *fp, const int i, const int type, const int method, Input: fp file name n_design design order of multipole - PB multipole field components arry, format is: n Bn An + PB multipole field components array, format is: n Bn An Order maximum order of multipole Output: @@ -148,6 +151,31 @@ void prtHOM(FILE *fp, const int n_design, const mpolArray PB, const int Order) { } } +/****************************************************************************** + void prtAper(FILE *fp, const mpolArray Aper) + + Purpose: + Print out all field component for an Asymmetric aperture to a file + + Input: + fp file name + Aper Aperture definition + + Output: + None + + Comments: + Called by prtmfile() + ******************************************************************************/ +void prtAper(FILE *fp, const double (*Aper)[3]) { + int i = 0; + + for (i = 0; i <= 3; i++) { + fprintf(fp, "%23.16e %23.16e %23.16e\n", Aper[i][0], Aper[i][1], + Aper[i][2]); + } +} + /****************************************************************************** void prtmfile(const char mfile_dat[]) @@ -216,6 +244,10 @@ void prtmfile(const char mfile_dat[]) { case marker: prtName(mfile, i, marker_, 0, 0); break; + case Aperture: + prtName(mfile, i, aperture_, 0, 0); + prtAper(mfile, Cell[i].Elem.A->Aper); + break; case Insertion: prtName(mfile, i, kick_map_, Cell[i].Elem.ID->Pmethod, Cell[i].Elem.ID->PN); diff --git a/tracy/tracy/src/rdmfile.cc b/tracy/tracy/src/rdmfile.cc index b3391c0e966ebcfb889dfc75320bee36bbe569b8..11c52d4d75b8f9a5bedd5df7e0ba2e3c4f7a1d15 100644 --- a/tracy/tracy/src/rdmfile.cc +++ b/tracy/tracy/src/rdmfile.cc @@ -75,7 +75,7 @@ #define thinkick_ 3 #define wiggler_ 4 #define insertion_ 6 - +#define aperture_ 11 ifstream inf; @@ -113,6 +113,10 @@ void get_kind(const int kind, elemtype &Elem) Elem.Pkind = PartsKind(Insertion); Insertion_Alloc(&Elem); break; + case aperture_: + Elem.Pkind = PartsKind(Aperture); + Aperture_Alloc(&Elem); + break; default: cout << "get_kind: unknown type " << kind << " " << Elem.PName << endl; exit_(1); diff --git a/tracy/tracy/src/soleillib.cc b/tracy/tracy/src/soleillib.cc index d2448472e1b658d81ea176f23c10c3fcef5e0be3..726f4f6f6827e78471849ca7c0217ea86e9a3136 100644 --- a/tracy/tracy/src/soleillib.cc +++ b/tracy/tracy/src/soleillib.cc @@ -1737,7 +1737,7 @@ void TunesShiftWithEnergy(const char *NudpFile,long Nb, long Nbtour, double emax Trac_Simple6DCOD, Get_NAFF Comments: - 1 December 2010, Call to a Tracking round around the 6D and not 4D closed orbit + 1 December 2010, Call to a Tracking around the 6D and not 4D closed orbit ****************************************************************************/ void Phase(const char *phasefile, double x,double xp,double y, double yp,double energy, double ctau, long Nbtour) @@ -3464,12 +3464,6 @@ void SetSkewQuad(void) nstepm number of energy steps for negative momentum acceptance - * 1 grande section droite - * 13 entree premier bend - * 22 sortie SX4 - * 41 section droite moyenne - * 173 fin superperiode - Output: output file soleil.out : file of results output file phase.out : file of tracking results during the process diff --git a/tracy/tracy/src/t2cell.cc b/tracy/tracy/src/t2cell.cc index 925dc44413e4d68cbf83638500f1b15039b8b249..b334d7499dfb26c4d488100be79a8cfd609ae8b7 100644 --- a/tracy/tracy/src/t2cell.cc +++ b/tracy/tracy/src/t2cell.cc @@ -18,7 +18,7 @@ template<typename T> inline bool CheckAmpl(const ss_vect<T> &x, const long int loc) Purpose: - Check whether particle coordinate x are outside of + Check whether particle coordinates x are outside of the aperture limitation, then return the bool flag not_lost, if true, then beam is lost. @@ -38,13 +38,13 @@ inline bool CheckAmpl(const ss_vect<T> &x, const long int loc) if (globval.Aperture_on) not_lost = is_double<T>::cst(x[x_]) > Cell[loc].maxampl[X_][0] && is_double<T>::cst(x[x_]) < Cell[loc].maxampl[X_][1] && - is_double<T>::cst(x[y_]) > Cell[loc].maxampl[Y_][0]&& + is_double<T>::cst(x[y_]) > Cell[loc].maxampl[Y_][0] && is_double<T>::cst(x[y_]) < Cell[loc].maxampl[Y_][1]; else not_lost = is_double<T>::cst(x[x_]) > -max_ampl && - is_double<T>::cst(x[x_]) < max_ampl && - is_double<T>::cst(x[y_]) > -max_ampl&& - is_double<T>::cst(x[y_]) < max_ampl; + is_double<T>::cst(x[x_]) < +max_ampl && + is_double<T>::cst(x[y_]) > -max_ampl && + is_double<T>::cst(x[y_]) < +max_ampl; // particle lost if (!not_lost) { @@ -1009,6 +1009,10 @@ void Cell_Init(void) Marker_Init(i); break; + case Aperture: + Aperture_Init(i); + break; + case Spreader: Spreader_Init(i); break; diff --git a/tracy/tracy/src/t2elem.cc b/tracy/tracy/src/t2elem.cc index 41310c50710fecb0d567b7c749b895a3b258b905..6de56a29d7d97a8f822a8bba0be320f66e8fdbd1 100644 --- a/tracy/tracy/src/t2elem.cc +++ b/tracy/tracy/src/t2elem.cc @@ -1116,6 +1116,33 @@ void Mpole_Pass(CellType &Cell, ss_vect<T> &x) { LtoG(x, Cell.dS, Cell.dT, M->Pc0, M->Pc1, M->Ps1); } +/**************************************************************************** + * void Marker_Pass(CellType *Cell, double *X) + + Purpose: + Tracking through a marker: identity + + Input: + Cell marker element to track through + X input coordinates + + Output: + X output coordinates + + Return: + none + + Global variables: + none + + Specific functions: + none + + Comments: + none + + ****************************************************************************/ + template<typename T> void Marker_Pass(CellType &Cell, ss_vect<T> &X) { elemtype *elemp; @@ -1127,6 +1154,76 @@ void Marker_Pass(CellType &Cell, ss_vect<T> &X) { LtoG(X, Cell.dS, Cell.dT, 0.0, 0.0, 0.0); } +/**************************************************************************** + * void Aperture_Pass(CellType *Cell, double *X) + + Purpose: + Tracking through a Aperture: identity + + Input: + Cell marker element to track through + X input coordinates + + Output: + X output coordinates + + Return: + none + + Global variables: + none + + Specific functions: + none + + Comments: + none + + ****************************************************************************/ + +template<typename T> +void Aperture_Pass(CellType &Cell, ss_vect<T> &X) { + elemtype *elemp; + ApertureType *A; + bool outofrange = false; + + bool trace = true; + + elemp = &Cell.Elem; + A = elemp->A; + + /* Global -> Local */ + GtoL(X, Cell.dS, Cell.dT, 0.0, 0.0, 0.0); + + /* horizontal plane aperture */ + if (X[y_] < A->Aper[0][1] & X[y_] > A->Aper[0][2]) + if (X[x_] > A->Aper[0][0]) {outofrange = true;} + if (X[y_] < A->Aper[1][1] & X[y_] > A->Aper[1][2]) + if (X[x_] > A->Aper[1][0]) {outofrange = true;} + + if (trace) + cout << "X[y_] " << X[y_] << endl; + + if (outofrange) { + X[x_] = NAN; + return; + } + + /* vertical plane aperture */ + if (X[x_] < A->Aper[2][1] & X[x_] > A->Aper[2][2]) + if (X[y_] > A->Aper[2][0]) {outofrange = true;} + if (X[x_] < A->Aper[3][1] & X[x_] > A->Aper[3][2]) + if (X[y_] > A->Aper[3][0]) {outofrange = true;} + + if (outofrange) { + X[y_] = NAN; + return; + } + + /* Local -> Global */ + LtoG(X, Cell.dS, Cell.dT, 0.0, 0.0, 0.0); +} + /**************************************************************************** * void Cav_Pass(CellType *Cell, double *X) @@ -2019,7 +2116,7 @@ void sol_pass(const elemtype &elem, ss_vect<T> &x) { x[px_] -= dpx; x[py_] -= AyoBrho; - x[y_] += 0.5 * hd * x[py_]; + x[y_] += 0.5 * hd * x[py_]; x[ct_] += sqr(0.5) * hd * sqr(x[py_]) / (1.0 + x[delta_]); AyoBrho = elem.Sol->BoBrho * x[x_] / 2.0; @@ -3467,6 +3564,83 @@ void Drift_Alloc(elemtype *Elem) { Elem->D = (DriftType *) malloc(sizeof(DriftType)); } +/**************************************************************************** + * void Aperture_Alloc(elemtype *Elem) + + Purpose: + Dynamic memory allocation for asymmetric aperture element + + Input: + Pointer on element + + Output: + none + + Return: + none + + Global variables: + none + + Specific functions: + none + + Comments: + none + + ****************************************************************************/ + void Aperture_Alloc(elemtype *Elem) { + + ApertureType *A;; + + /* Memory allocation */ + Elem->A = (ApertureType *) malloc(sizeof(ApertureType)); + A = Elem->A; + + A->Aper[0][0] = +1.0; + A->Aper[0][1] = -1.0; + A->Aper[0][2] = +1.0; + + A->Aper[1][0] = -1.0; + A->Aper[1][1] = -1.0; + A->Aper[1][2] = +1.0; + + A->Aper[2][0] = +1.0; + A->Aper[2][1] = -1.0; + A->Aper[2][2] = +1.0; + + A->Aper[3][0] = -1.0; + A->Aper[3][1] = -1.0; + A->Aper[3][2] = +1.0; + +} + +/**************************************************************************** + * void Multipole_Alloc(elemtype *Elem) + + Purpose: + Dynamic memory allocation for multipole element + + Input: + Pointer on element + + Output: + memory space for drift in Elem->UU.D + + Return: + none + + Global variables: + none + + Specific functions: + none + + Comments: + none + + ****************************************************************************/ + void Mpole_Alloc(elemtype *Elem) { int j; MpoleType *M; @@ -4043,6 +4217,31 @@ void Cav_Init(int Fnum1) { } } +/**************************************************************************** + * void Marker_Init(long Fnum1) + + Purpose: called by Cell_Init() + Constructor for a marker + + Input: + Fnum1 Family number + + Output: + none + + Return: + none + + Global variables: + ElemFam, Cell + + Specific functions: + none + + Comments: + none + + ****************************************************************************/ void Marker_Init(int Fnum1) { int i; ElemFamType *elemfamp; @@ -4054,11 +4253,62 @@ void Marker_Init(int Fnum1) { for (i = 0; i < elemfamp->nKid; i++) { cellp = &Cell[elemfamp->KidList[i]]; cellp->Elem = elemfamp->ElemF; + cellp->dT[0] = 1.0; + cellp->dT[1] = 0.0; + cellp->dS[0] = 0.0; + cellp->dS[1] = 0.0; + } +} + +/**************************************************************************** + * void Aperture_Init(long Fnum1) + + Purpose: called by Cell_Init() + Constructor for a cavity + set aperture dimensions read from the lattice file + + Input: + Fnum1 Family number + + Output: + none + + Return: + none + + Global variables: + ElemFam, Cell + + Specific functions: + none + + Comments: + none + + ****************************************************************************/ + +void Aperture_Init(int Fnum1) { + int i; + ElemFamType *elemfamp; + CellType *cellp; + elemtype *elemp; + + /* Pointer on element */ + elemfamp = &ElemFam[Fnum1 - 1]; + elemp = &elemfamp->ElemF; + for (i = 0; i < elemfamp->nKid; i++) { + cellp = &Cell[elemfamp->KidList[i]]; + cellp->Elem = elemfamp->ElemF; + /* Memory allocation and set everything to zero */ + Aperture_Alloc(&cellp->Elem); + memcpy(cellp->Elem.PName, elemfamp->ElemF.PName, sizeof(partsName)); + cellp->dT[0] = 1.0; cellp->dT[1] = 0.0; cellp->dS[0] = 0.0; cellp->dS[1] = 0.0; } + } /**************************************************************************** diff --git a/tracy/tracy/src/t2lat.cc b/tracy/tracy/src/t2lat.cc index 3fc6f6f007d647b9f6dc988172d37e824f80ec7f..4c76fd2d8e4e8cd0aa5282a270e6506a0f8220ae 100644 --- a/tracy/tracy/src/t2lat.cc +++ b/tracy/tracy/src/t2lat.cc @@ -47,7 +47,7 @@ typedef enum gapsym, thksym, invsym, thnsym, endsym, tsksym, bemsym, corsym, prnsym, tblsym, possym, prmsym, udisym, squote, linsym, mthsym, celsym, matsym, cavsym, symsym, chmsym, - cctsym, usesym, andsym, dspsym, kicksym, wglsym, nsym, mrksym, + cctsym, usesym, aprsym, apersym, andsym, dspsym, kicksym, wglsym, nsym, mrksym, nbdsym, frgsym, latsym, mpsym, dbnsym, kssym, homsym, lmdsym, dtsym, xytsym, vrfsym, harnumsym, frqsym, gstsym, typsym, rollsym, idsym, fnamesym1, fnamesym2, scalingsym1, scalingsym2, fmsym, harmsym, sprsym, recsym, solsym, @@ -1732,7 +1732,7 @@ struct LOC_Lat_DealElement Lat_symbol *ksy; Lat_symbol *sps; jmp_buf _JL9999; - double B[HOMmax+HOMmax+1]; + double B[HOMmax+HOMmax+1], Aper[4][3]; bool BA[HOMmax+HOMmax+1]; int n_harm, harm[n_harm_max]; double kxV[n_harm_max], BoBrhoV[n_harm_max]; @@ -1824,6 +1824,31 @@ static void GetHOM(struct LOC_Lat_DealElement *LINK) GetSym__(LINK); } +/* Get asymmetric aperture from lattice file */ +static void GetAPER(struct LOC_Lat_DealElement *LINK) +{ + long i = 0L; + double lim_; + double pos_, neg_; + symset SET; + + getest__(P_expset(SET, 1 << ((long)lparent)), "<(> expected", LINK); + do { + lim_ = EVAL_(LINK); + test__(P_expset(SET, 1 << ((long)comma)), "<, > expected", LINK); + neg_ = EVAL_(LINK); + test__(P_expset(SET, 1 << ((long)comma)), "<, > expected", LINK); + pos_ = EVAL_(LINK); + LINK->Aper[i][0] = lim_; + LINK->Aper[i][1] = neg_; + LINK->Aper[i][2] = pos_; + test__(P_expset(SET, (1 << ((long)comma)) | (1 << ((long)rparent))), + "<, > or <)> expected", LINK); + i++; + } while (*LINK->sym != rparent); + GetSym__(LINK); +} + static void ClearHOMandDBN(struct LOC_Lat_DealElement *LINK) { @@ -1851,6 +1876,20 @@ static void AssignHOM(long elem, struct LOC_Lat_DealElement *LINK) } } +static void AssignAPER(long elem, struct LOC_Lat_DealElement *LINK) +{ + long i; + ApertureType *A; + + A = ElemFam[elem-1].ElemF.A; + for (i = 0; i <= 3; i++) { + A->Aper[i][0] = LINK->Aper[i][0]; + A->Aper[i][1] = LINK->Aper[i][1]; + A->Aper[i][2] = LINK->Aper[i][2]; + if (!trace) printf("Aper[%ld] = %lf\n", i, A->Aper[i][0]); + } +} + /********************* get the high order field **********************/ @@ -2023,6 +2062,10 @@ static bool Lat_DealElement(FILE **fi_, FILE **fo_, long *cc_, long *ll_, double dt, Frf, Vrf; long k1, k2, harnum, FF1, FF2; double FFscaling; + // LSN CLEAN + // double zpm = 0.0, zpp = 0.0, zmp = 0.0, zmm = 0.0; + // double xpm = 0.0, xpp = 0.0, xmp = 0.0, xmm = 0.0; + // double zplim = 0.0, zmlim = 0.0, xplim = 0.0, zmlim = 0.0; Lat_symbol sym1; symset mysys, SET; long SET1[(long)lsym / 32 + 2]; @@ -2035,8 +2078,9 @@ static bool Lat_DealElement(FILE **fi_, FILE **fo_, long *cc_, long *ll_, long SET4[(long)dbnsym / 32 + 2]; WigglerType *WITH4; FieldMapType *WITH6; - InsertionType *WITH5; /* ID Laurent */ + InsertionType *WITH5; /* ID LSN */ SolenoidType *WITH7; + ApertureType *WITH8; /* Asymmetric aperture LSN */ char str1[100] = ""; char str2[100] = ""; bool firstflag = false; // flag for first kick input @@ -2219,14 +2263,14 @@ static bool Lat_DealElement(FILE **fi_, FILE **fo_, long *cc_, long *ll_, WITH2->Pmethod = k2; WITH2->PN = k1; if (WITH1->PL != 0.0) - WITH2->Pirho = t * M_PI / 180.0 / WITH1->PL; + WITH2->Pirho = t * M_PI / 180.0 / WITH1->PL; else - WITH2->Pirho = t * M_PI / 180.0; - WITH2->PTx1 = t1; WITH2->PTx2 = t2; WITH2->Pgap = gap; - WITH2->n_design = Dip; - AssignHOM(globval.Elem_nFam, &V); - SetDBN(&V); - WITH2->PBpar[HOMmax+2] = QK; WITH2->PdTpar = dt; + WITH2->Pirho = t * M_PI / 180.0; + WITH2->PTx1 = t1; WITH2->PTx2 = t2; WITH2->Pgap = gap; + WITH2->n_design = Dip; + AssignHOM(globval.Elem_nFam, &V); + SetDBN(&V); + WITH2->PBpar[HOMmax+2] = QK; WITH2->PdTpar = dt; } else { printf("Elem_nFamMax exceeded: %ld(%ld)\n", globval.Elem_nFam, (long)Elem_nFamMax); @@ -2761,7 +2805,69 @@ static bool Lat_DealElement(FILE **fi_, FILE **fo_, long *cc_, long *ll_, break; - /************************************************************************** +/************************************************************************** + Asymmetric Aperture + *************************************************************************** + + <name>: Aperture; + + <name>:== Alphanumeric string. Up to NameLength character length. + BEGIN with an alphabet. + + Vertical limitation z=f(x) + Horizontal limitation x=f(x) + + z(>0) = zplim(>0) if x in [xpm zpm] + else + z(>0) = default value + + z(<0) = zmlim(>0) if x in [xmm zmm] + else + z(<0) = default value + + + x(>0) = xplim(>0) if z in [zpm zpp] + else + x(>0) = default value + + x(<0) = xmlim(<0) if z in [zmm zmp] + else + x(<0) = default value + + + Example + + ABS: aperture, aper=(+0.01, -0.01, 0.01, zplim, xpm, xpp + -0.02, -0.01, -0.01, zmlim, xmm, xmp + +0.02, -0.01, -0.01, xplim, zpm, zpp + -0.02, -0.01, -0.01); xmlim, zmm, zmp + + + **************************************************************************/ + + case aprsym: + getest__(P_expset(SET, 1 << ((long)comma)), "<comma> expected", &V); + getest__(P_addset(P_expset(SET1, 0), (long)apersym), "<aper> expected", &V); + getest__(P_expset(SET, 1 << ((long)eql)), "<=> expected", &V); + GetAPER(&V); /* read aperture */ + test__(P_expset(SET, 1 << ((long)semicolon)), "<;> expected", &V); + GetSym__(&V); + globval.Elem_nFam++; + if (globval.Elem_nFam <= Elem_nFamMax) { + WITH = &ElemFam[globval.Elem_nFam-1]; + WITH1 = &WITH->ElemF; + memcpy(WITH1->PName, ElementName, sizeof(partsName)); + WITH1->PL = *V.rnum; + WITH1->Pkind = PartsKind(Aperture); + Aperture_Alloc(&WITH->ElemF); + AssignAPER(globval.Elem_nFam, &V); + } else { + printf("Elem_nFamMax exceeded: %ld(%ld)\n", + globval.Elem_nFam, (long)Elem_nFamMax); + exit_(1); + } + break; +/************************************************************************** Marker *************************************************************************** @@ -2883,11 +2989,11 @@ static bool Lat_DealElement(FILE **fi_, FILE **fo_, long *cc_, long *ll_, GetSym__(&V); QL = 0.0; /* L */ QK = 0.0; /* K */ - k1 = 0; /* N */ - t = 0.0; /* T */ + k1 = 0; /* N */ + t = 0.0; /* T */ t1 = 0.0; /* T1 */ t2 = 0.0; /* T2 */ - gap = 0.0; /* gap */ + gap = 0.0; /* gap */ k2 = Meth_Linear; /* method */ dt = 0.0; ClearHOMandDBN(&V); @@ -3636,6 +3742,8 @@ static void init_reserved_words(struct LOC_Lattice_Read *LINK) MUST follow alphabetical list !!!!!!!!!!!!!!!!!!!!!!!!!!!!! --------------------------------------------------------------*/ Reg("and ", andsym, &V); + Reg("aper ", apersym, &V); /* asymetric aperture : definition */ + Reg("aperture ", aprsym, &V); /* asymmetric aperture symbol*/ Reg("beam ", bemsym, &V); Reg("bending ", bndsym, &V); Reg("cavity ", cavsym, &V); @@ -3745,13 +3853,13 @@ static void init_reserved_words(struct LOC_Lattice_Read *LINK) P_addset(LINK->elmbegsys, (long)mpsym); P_addset(LINK->elmbegsys, (long)cavsym); P_addset(LINK->elmbegsys, (long)idsym); /* ID Laurent */ + P_addset(LINK->elmbegsys, (long)aprsym); /* Asymmetric Aperture Laurent */ P_addset(LINK->elmbegsys, (long)fmsym); P_addset(LINK->elmbegsys, (long)sprsym); P_addset(LINK->elmbegsys, (long)recsym); P_addset(LINK->elmbegsys, (long)solsym); P_addset(LINK->elmbegsys, (long)fnamesym1); /* ID file name Laurent */ P_addset(LINK->elmbegsys, (long)fnamesym2); /* ID file name Laurent */ -// P_addset(LINK->elmbegsys, (long)scalingsym); /* ID scale factor Laurent */ } /* Local variables for DealWithDefns: */ diff --git a/tracy/tracy/src/tracy.cc b/tracy/tracy/src/tracy.cc index 2ca24168c21039f37aebd2fba1468b4de9bc5fad..230a31760938ff2f90d4901d6ba5d2d81bf95e23 100644 --- a/tracy/tracy/src/tracy.cc +++ b/tracy/tracy/src/tracy.cc @@ -129,6 +129,10 @@ template void Marker_Pass(CellType &, ss_vect<double> &); template void Marker_Pass(CellType &, ss_vect<tps> &); +template void Aperture_Pass(CellType &, ss_vect<double> &); + +template void Aperture_Pass(CellType &, ss_vect<tps> &); + template void Cav_Pass(CellType &, ss_vect<double> &); template void Cav_Pass(CellType &, ss_vect<tps> &);