1 | !The Polymorphic Tracking Code |
---|
2 | !Copyright (C) Etienne Forest and CERN |
---|
3 | ! The concept of the fibre and the concept of the |
---|
4 | ! integration node, with their resulting link list types, |
---|
5 | ! the layout and the node_layout, |
---|
6 | ! are based on concepts first ellaborated with J. Bengtsson. |
---|
7 | ! The node_layout is similar to the Lagrangian class that |
---|
8 | ! Bengtsson and Forest contemplated around 1990 for the |
---|
9 | ! C++ collaboration later known as CLASSIC. |
---|
10 | |
---|
11 | |
---|
12 | TYPE girder |
---|
13 | INTEGER, pointer :: i |
---|
14 | INTEGER, pointer :: pos |
---|
15 | INTEGER, pointer :: mul ! number of magnets in the girder |
---|
16 | INTEGER, pointer :: added |
---|
17 | INTEGER, pointer :: discarded |
---|
18 | real(dp), pointer:: a(:),ent(:,:) |
---|
19 | TYPE (girder_info),POINTER :: info |
---|
20 | TYPE (girder),POINTER :: PREVIOUS ! Terminated link list |
---|
21 | TYPE (girder),POINTER :: NEXT |
---|
22 | END TYPE girder |
---|
23 | |
---|
24 | TYPE girder_info |
---|
25 | CHARACTER(nlp), POINTER :: NAME ! Identification |
---|
26 | real(dp), POINTER :: d(:) |
---|
27 | type (element), pointer :: mag |
---|
28 | real(dp), pointer:: a(:),ent(:,:) |
---|
29 | type (girder), pointer :: parent_girder |
---|
30 | TYPE (girder_info),POINTER :: NEXT ! Terminated link list |
---|
31 | end TYPE girder_info |
---|
32 | |
---|
33 | TYPE girder_list |
---|
34 | CHARACTER(120), POINTER :: NAME ! IDENTIFICATION |
---|
35 | INTEGER, POINTER :: N ! TOTAL ELEMENT IN THE CHAIN |
---|
36 | |
---|
37 | INTEGER, POINTER :: discarded ! duplicate magnets |
---|
38 | INTEGER, POINTER :: LASTPOS ! POSITION OF LAST VISITED |
---|
39 | TYPE (girder), POINTER :: LAST ! LAST VISITED |
---|
40 | ! |
---|
41 | TYPE (girder), POINTER :: END |
---|
42 | TYPE (girder), POINTER :: START |
---|
43 | type (fibre), pointer :: lastfibre |
---|
44 | |
---|
45 | END TYPE girder_list |
---|
46 | |
---|
47 | |
---|
48 | |
---|
49 | TYPE MUL_BLOCK |
---|
50 | ! stuff for setting multipole |
---|
51 | real(dp) AN(NMAX),BN(NMAX) |
---|
52 | INTEGER NMUL,NATURAL,ADD |
---|
53 | END TYPE MUL_BLOCK |
---|
54 | |
---|
55 | type work |
---|
56 | real(dp) beta0,energy,kinetic,p0c,brho,gamma0I,gambet |
---|
57 | real(dp) mass |
---|
58 | LOGICAL(lp) rescale |
---|
59 | integer power |
---|
60 | end type work |
---|
61 | |
---|
62 | |
---|
63 | TYPE INTERNAL_STATE |
---|
64 | INTEGER TOTALPATH |
---|
65 | ! LOGICAL(LP) TIME,RADIATION,NOCAVITY,FRINGE,EXACTMIS,STOCHASTIC,ENVELOPE |
---|
66 | LOGICAL(LP) TIME,RADIATION,NOCAVITY,FRINGE,STOCHASTIC,ENVELOPE |
---|
67 | LOGICAL(LP) PARA_IN,ONLY_4D,DELTA |
---|
68 | LOGICAL(LP) SPIN,MODULATION |
---|
69 | END TYPE INTERNAL_STATE |
---|
70 | |
---|
71 | |
---|
72 | |
---|
73 | TYPE POL_BLOCK |
---|
74 | CHARACTER(nlp) NAME |
---|
75 | integer n_name |
---|
76 | CHARACTER(vp) VORNAME |
---|
77 | ! STUFF FOR SETTING MAGNET USING GLOBAL ARRAY TPSAFIT |
---|
78 | real(dp),DIMENSION(:), POINTER :: TPSAFIT |
---|
79 | LOGICAL(lp), POINTER :: SET_TPSAFIT |
---|
80 | LOGICAL(lp), POINTER :: SET_ELEMENT |
---|
81 | ! STUFF FOR PARAMETER DEPENDENCE |
---|
82 | INTEGER NPARA |
---|
83 | INTEGER IAN(NMAX),IBN(NMAX) |
---|
84 | real(dp) SAN(NMAX),SBN(NMAX) |
---|
85 | INTEGER IVOLT, IFREQ,IPHAS |
---|
86 | INTEGER IB_SOL |
---|
87 | real(dp) SVOLT, SFREQ,SPHAS |
---|
88 | real(dp) SB_SOL |
---|
89 | integer g,np,nb ! group index number of blocks |
---|
90 | ! User defined Functions |
---|
91 | TYPE(POL_BLOCK_sagan) sagan |
---|
92 | END TYPE POL_BLOCK |
---|
93 | |
---|
94 | TYPE POL_BLOCK_INICOND |
---|
95 | INTEGER :: BETA(3) |
---|
96 | INTEGER :: ALFA(3) |
---|
97 | INTEGER :: DISPERSION(4) |
---|
98 | END TYPE POL_BLOCK_INICOND |
---|
99 | |
---|
100 | |
---|
101 | TYPE MADX_APERTURE |
---|
102 | INTEGER,pointer :: KIND ! 1,2,3,4 |
---|
103 | REAL(DP),pointer :: R(:) |
---|
104 | REAL(DP),pointer :: X,Y,DX,DY |
---|
105 | END TYPE MADX_APERTURE |
---|
106 | |
---|
107 | TYPE S_APERTURE |
---|
108 | type(MADX_APERTURE), pointer:: APERTURE |
---|
109 | END TYPE S_APERTURE |
---|
110 | |
---|
111 | |
---|
112 | TYPE MAGNET_CHART |
---|
113 | type(magnet_frame), pointer:: f |
---|
114 | type(MADX_APERTURE), pointer:: APERTURE |
---|
115 | type(S_APERTURE), pointer:: A(:) |
---|
116 | real(dp),pointer :: charge ! propagator |
---|
117 | integer,pointer :: dir ! propagator |
---|
118 | real(dp), POINTER :: BETA0,GAMMA0I,GAMBET,MASS,ag |
---|
119 | real(dp), POINTER :: P0C |
---|
120 | real(dp), POINTER :: LD,B0,LC ! |
---|
121 | real(dp), POINTER :: TILTD ! INTERNAL FRAME |
---|
122 | real(dp), DIMENSION(:), POINTER :: EDGE ! INTERNAL FRAME |
---|
123 | |
---|
124 | ! |
---|
125 | LOGICAL(lp), POINTER :: EXACT |
---|
126 | LOGICAL(lp), POINTER :: KILL_ENT_FRINGE,KILL_EXI_FRINGE, bend_fringe,permFRINGE ! |
---|
127 | ! |
---|
128 | INTEGER, POINTER :: METHOD,NST ! METHOD OF INTEGRATION 2,4,OR 6 YOSHIDA |
---|
129 | INTEGER, POINTER :: NMUL ! NUMBER OF MULTIPOLE |
---|
130 | |
---|
131 | END TYPE MAGNET_CHART |
---|
132 | |
---|
133 | TYPE tilting |
---|
134 | real(dp) tilt(0:nmax) |
---|
135 | LOGICAL(lp) natural ! for mad-like |
---|
136 | END TYPE tilting |
---|
137 | |
---|
138 | TYPE time_energy |
---|
139 | real(dp),pointer :: time |
---|
140 | real(dp),pointer :: energy |
---|
141 | real(dp),pointer :: an(:),bn(:) |
---|
142 | real(dp),pointer :: b_t |
---|
143 | END TYPE time_energy |
---|
144 | |
---|
145 | TYPE ramping |
---|
146 | integer,pointer :: n |
---|
147 | real(dp), pointer :: r,t_max !, unit_time |
---|
148 | type(time_energy),pointer :: table(:) |
---|
149 | character(255), pointer :: file |
---|
150 | END TYPE ramping |
---|
151 | |
---|
152 | |
---|
153 | |
---|
154 | ! Element |
---|
155 | TYPE ELEMENT |
---|
156 | INTEGER, POINTER :: KIND |
---|
157 | logical(lp), POINTER :: recut,even |
---|
158 | LOGICAL(LP), POINTER :: PLOT |
---|
159 | LOGICAL(LP), POINTER :: electric |
---|
160 | |
---|
161 | ! common stuff to all element |
---|
162 | type(MAGNET_CHART), pointer :: P |
---|
163 | CHARACTER(nlp), POINTER :: NAME ! Identification |
---|
164 | CHARACTER(vp), POINTER :: VORNAME ! Identification |
---|
165 | ! |
---|
166 | ! |
---|
167 | ! Length is common although certain things like Markers should not have a length |
---|
168 | ! Well let us say it is zero |
---|
169 | real(dp), POINTER :: L ! Length of integration often same as LD |
---|
170 | ! |
---|
171 | real(dp), DIMENSION(:), POINTER:: AN,BN !Multipole component |
---|
172 | real(dp), POINTER:: FINT,HGAP !FRINGE FUDGE FOR MAD |
---|
173 | real(dp), POINTER:: H1,H2 !FRINGE FUDGE FOR MAD |
---|
174 | real(dp), POINTER:: VA,VS !valishev-like multipole |
---|
175 | ! |
---|
176 | real(dp), POINTER :: VOLT, FREQ,PHAS,DELTA_E,LAG ! Cavity information |
---|
177 | real(dp), POINTER :: DC_ac,A_ac,theta_ac,D_AC ! slow RF: amplitude and phase |
---|
178 | real(dp), DIMENSION(:), POINTER:: D_AN,D_BN,D0_AN,D0_BN !Multipole component |
---|
179 | logical(lp), POINTER :: THIN,slow_ac |
---|
180 | real(dp), POINTER :: B_SOL ! Solenoidal field |
---|
181 | ! misalignements and rotation |
---|
182 | logical(lp), POINTER :: MIS |
---|
183 | ! real(dp), DIMENSION(:), POINTER ::d,r ! Misalignements |
---|
184 | !storage space |
---|
185 | !integer twiss ! |
---|
186 | ! TYPES OF MAGNETS |
---|
187 | TYPE(DRIFT1), POINTER :: D0 ! DRIFT |
---|
188 | TYPE(DKD2), POINTER :: K2 ! INTEGRATOR |
---|
189 | TYPE(KICKT3), POINTER :: K3 ! THIN KICK |
---|
190 | TYPE(CAV4), POINTER :: C4 ! CAVITY |
---|
191 | TYPE(SOL5), POINTER :: S5 ! solenoid |
---|
192 | TYPE(KTK), POINTER :: T6 ! INTEGRATOR thick slow |
---|
193 | TYPE(TKTF), POINTER :: T7 ! INTEGRATOR thick fast |
---|
194 | TYPE(NSMI), POINTER :: S8 ! NORMAL SMI |
---|
195 | TYPE(SSMI), POINTER :: S9 ! SKEW SMI |
---|
196 | TYPE(TEAPOT), POINTER :: TP10 ! sector teapot |
---|
197 | TYPE(MON), POINTER :: MON14 ! MONITOR OR INSTRUMENT |
---|
198 | TYPE(ESEPTUM), POINTER :: SEP15 ! MONITOR OR INSTRUMENT |
---|
199 | TYPE(STREX), POINTER :: K16 ! EXACT STRAIGHT INTEGRATOR |
---|
200 | TYPE(ENGE), POINTER :: ENGE17 ! SOLENOID SIXTRACK STYLE |
---|
201 | TYPE(RCOL), POINTER :: RCOL18 ! RCOLLIMATOR |
---|
202 | TYPE(ECOL), POINTER :: ECOL19 ! ECOLLIMATOR |
---|
203 | TYPE(CAV_TRAV), POINTER :: CAV21 ! CAVITY TRAVELLING WAVE |
---|
204 | TYPE(SAGAN), POINTER :: WI ! USER DEFINED |
---|
205 | TYPE(PANCAKE), POINTER :: PA ! GENERAL B |
---|
206 | TYPE(HELICAL_DIPOLE), POINTER :: HE22 ! GENERAL B |
---|
207 | TYPE(FIBRE), POINTER :: PARENT_FIBRE |
---|
208 | TYPE(fibre_appearance), POINTER :: doko |
---|
209 | type(element), pointer :: siamese |
---|
210 | type(element), pointer :: girders |
---|
211 | TYPE(AFFINE_FRAME), POINTER :: SIAMESE_FRAME |
---|
212 | TYPE(AFFINE_FRAME), POINTER :: girder_FRAME |
---|
213 | ! integer, POINTER ::girder_index |
---|
214 | type(girder),pointer :: assembly |
---|
215 | type(ramping), pointer :: ramp |
---|
216 | |
---|
217 | END TYPE ELEMENT |
---|
218 | |
---|
219 | |
---|
220 | TYPE ELEMENTP |
---|
221 | INTEGER, POINTER :: KIND ! WHAT IT IS |
---|
222 | logical(lp), POINTER :: KNOB ! FALSE IF NO KNOB |
---|
223 | CHARACTER(nlp), POINTER :: NAME ! Identification |
---|
224 | CHARACTER(vp), POINTER :: VORNAME ! Identification |
---|
225 | LOGICAL(LP), POINTER :: electric |
---|
226 | ! |
---|
227 | ! |
---|
228 | ! |
---|
229 | TYPE(REAL_8), POINTER :: L ! LENGTH OF INTEGRATION OFTEN SAME AS LD, CAN BE ZERO |
---|
230 | TYPE(REAL_8), DIMENSION(:), POINTER :: AN,BN !MULTIPOLE COMPONENT |
---|
231 | TYPE(REAL_8), POINTER:: FINT,HGAP !FRINGE FUDGE FOR MAD |
---|
232 | TYPE(REAL_8), POINTER:: H1,H2 !FRINGE FUDGE FOR MAD |
---|
233 | TYPE(REAL_8), POINTER:: VA,VS !valishev-like multipole |
---|
234 | ! |
---|
235 | TYPE(REAL_8), POINTER :: VOLT, FREQ,PHAS ! CAVITY INFORMATION |
---|
236 | real(dp), POINTER :: DELTA_E ! CAVITY ENERGY GAIN |
---|
237 | TYPE(REAL_8), POINTER :: DC_ac,A_ac,theta_ac,D_AC ! slow RF: amplitude and phase |
---|
238 | TYPE(REAL_8), DIMENSION(:), POINTER:: D_AN,D_BN,D0_AN,D0_BN !Multipole component |
---|
239 | ! |
---|
240 | TYPE(REAL_8), POINTER :: B_SOL |
---|
241 | logical(lp), POINTER :: THIN,slow_ac |
---|
242 | |
---|
243 | ! MISALIGNEMENTS AND ROTATION |
---|
244 | logical(lp), POINTER :: MIS |
---|
245 | ! real(dp), DIMENSION(:), POINTER :: D,R |
---|
246 | |
---|
247 | TYPE(MAGNET_CHART), POINTER :: P |
---|
248 | |
---|
249 | ! TYPES OF POLYMORPHIC MAGNETS |
---|
250 | TYPE(DRIFT1P), POINTER :: D0 ! DRIFT |
---|
251 | TYPE(DKD2P), POINTER :: K2 ! INTEGRATOR |
---|
252 | TYPE(KICKT3P), POINTER :: K3 ! THIN KICK |
---|
253 | TYPE(CAV4P), POINTER :: C4 ! DRIFT |
---|
254 | TYPE(SOL5P), POINTER :: S5 ! CAVITY |
---|
255 | TYPE(KTKP), POINTER :: T6 ! INTEGRATOR |
---|
256 | TYPE(TKTFP), POINTER :: T7 ! INTEGRATOR THICK FAST |
---|
257 | TYPE(NSMIP), POINTER :: S8 ! NORMAL SMI |
---|
258 | TYPE(SSMIP), POINTER :: S9 ! SKEW SMI |
---|
259 | TYPE(TEAPOTP), POINTER :: TP10 ! SECTOR BEND WITH CYLINDRICAL GEOMETRY |
---|
260 | TYPE(MONP), POINTER :: MON14 ! MONITOR OR INSTRUMENT |
---|
261 | TYPE(ESEPTUMP), POINTER :: SEP15 ! MONITOR OR INSTRUMENT |
---|
262 | TYPE(STREXP), POINTER :: K16 ! EXACT STRAIGHT INTEGRATOR |
---|
263 | TYPE(ENGEP), POINTER :: ENGE17 ! SOLENOID SIXTRACK STYLE |
---|
264 | TYPE(RCOLP), POINTER :: RCOL18 ! RCOLLIMATOR |
---|
265 | TYPE(ECOLP), POINTER :: ECOL19 ! ECOLLIMATOR |
---|
266 | TYPE(CAV_TRAVP), POINTER :: CAV21 ! CAVITY TRAVELLING WAVE |
---|
267 | TYPE(HELICAL_DIPOLEP), POINTER :: HE22 ! GENERAL B |
---|
268 | TYPE(SAGANP), POINTER :: WI ! USER DEFINED |
---|
269 | TYPE(PANCAKEP), POINTER :: PA ! GENERAL B |
---|
270 | TYPE(FIBRE), POINTER :: PARENT_FIBRE |
---|
271 | ! TYPE(fibre_appearance), POINTER :: doko |
---|
272 | type(ramping), pointer :: ramp |
---|
273 | END TYPE ELEMENTP |
---|
274 | |
---|
275 | type fibre_appearance |
---|
276 | TYPE(FIBRE), POINTER :: PARENT_FIBRE |
---|
277 | TYPE(fibre_appearance), POINTER :: next |
---|
278 | end type fibre_appearance |
---|
279 | |
---|
280 | type info |
---|
281 | real(sp),pointer :: s |
---|
282 | real(sp),pointer :: beta(:) |
---|
283 | real(sp),pointer :: fix0(:) |
---|
284 | real(sp),pointer :: fix(:) |
---|
285 | real(sp), pointer:: pos(:) |
---|
286 | END type info |
---|
287 | |
---|
288 | TYPE FIBRE |
---|
289 | ! BELOW ARE THE DATA CARRIED BY THE NODE |
---|
290 | INTEGER,POINTER ::DIR |
---|
291 | TYPE(PATCH),POINTER ::PATCH |
---|
292 | TYPE(CHART),POINTER ::CHART |
---|
293 | TYPE (ELEMENT), POINTER :: MAG |
---|
294 | TYPE (ELEMENTP),POINTER :: MAGP |
---|
295 | ! END OF DATA |
---|
296 | ! POINTER TO THE MAGNETS ON EACH SIDE OF THIS NODE |
---|
297 | TYPE (FIBRE),POINTER :: PREVIOUS |
---|
298 | TYPE (FIBRE),POINTER :: NEXT |
---|
299 | ! POINTING TO PARENT LAYOUT AND PARENT FIBRE DATA |
---|
300 | TYPE (LAYOUT),POINTER :: PARENT_LAYOUT |
---|
301 | type(info),pointer ::i |
---|
302 | TYPE(INTEGRATION_NODE),POINTER :: T1,T2 ! FIRST AND LAST INTEGRATION_NODE CHILDREN CORRESPOUNDING TO PATCHES |
---|
303 | TYPE(INTEGRATION_NODE),POINTER :: TM ! MIDDLE INTEGRATION_NODE |
---|
304 | INTEGER,POINTER ::pos ! POSITION IN LAYOUT |
---|
305 | ! NEW STUFF.... |
---|
306 | real(dp), POINTER :: BETA0,GAMMA0I,GAMBET,MASS !,P0C |
---|
307 | real(dp), POINTER :: CHARGE |
---|
308 | real(dp), POINTER :: AG ! spin g-2 |
---|
309 | ! TO TIE LAYOUTS |
---|
310 | TYPE (FIBRE),POINTER :: P |
---|
311 | TYPE (FIBRE),POINTER :: N |
---|
312 | INTEGER,POINTER :: loc |
---|
313 | |
---|
314 | END TYPE FIBRE |
---|
315 | |
---|
316 | TYPE LAYOUT |
---|
317 | CHARACTER(120), POINTER :: NAME ! IDENTIFICATION |
---|
318 | INTEGER, POINTER :: INDEX,HARMONIC_NUMBER ! IDENTIFICATION, CHARGE SIGN |
---|
319 | logical(lp),POINTER ::CLOSED |
---|
320 | INTEGER, POINTER :: N ! TOTAL ELEMENT IN THE CHAIN |
---|
321 | INTEGER,POINTER ::NTHIN ! NUMBER IF THIN LENSES IN COLLECTION (FOR SPEED ESTIMATES) |
---|
322 | REAL(DP), POINTER :: THIN ! PARAMETER USED FOR AUTOMATIC CUTTING INTO THIN LENS |
---|
323 | !POINTERS OF LINK LAYOUT |
---|
324 | INTEGER, POINTER :: LASTPOS ! POSITION OF LAST VISITED |
---|
325 | TYPE (FIBRE), POINTER :: LAST ! LAST VISITED |
---|
326 | ! |
---|
327 | TYPE (FIBRE), POINTER :: END |
---|
328 | TYPE (FIBRE), POINTER :: START |
---|
329 | TYPE (FIBRE), POINTER :: START_GROUND ! STORE THE GROUNDED VALUE OF START DURING CIRCULAR SCANNING |
---|
330 | TYPE (FIBRE), POINTER :: END_GROUND ! STORE THE GROUNDED VALUE OF END DURING CIRCULAR SCANNING |
---|
331 | TYPE (LAYOUT), POINTER :: NEXT |
---|
332 | TYPE (LAYOUT), POINTER :: PREVIOUS |
---|
333 | type(NODE_LAYOUT), pointer :: T ! ASSOCIATED CHILD THIN LENS LAYOUT |
---|
334 | TYPE (MAD_UNIVERSE), POINTER :: parent_universe |
---|
335 | TYPE(layout_array), POINTER :: DNA(:) |
---|
336 | END TYPE LAYOUT |
---|
337 | |
---|
338 | type layout_array |
---|
339 | type(layout), pointer :: L |
---|
340 | integer :: counter |
---|
341 | END type layout_array |
---|
342 | |
---|
343 | type girder_siamese |
---|
344 | type(element), pointer :: mag |
---|
345 | END type girder_siamese |
---|
346 | |
---|
347 | TYPE MAD_UNIVERSE ! THE MOTHER OF ALL STRUCTURES |
---|
348 | INTEGER, POINTER :: N ! NUMBERS OF LAYOUT |
---|
349 | INTEGER, POINTER :: SHARED ! NUMBERS OF REPOSITORY LAYOUTS |
---|
350 | TYPE (LAYOUT), POINTER :: END |
---|
351 | TYPE (LAYOUT), POINTER :: START |
---|
352 | !POINTERS OF UNIVERSE IN CONJUNCTION WITH THE POINTERS N AND P OF THE FIBRES |
---|
353 | INTEGER, POINTER :: NF ! number of fibres in tied layouts |
---|
354 | INTEGER, POINTER :: LASTPOS ! POSITION OF LAST VISITED |
---|
355 | TYPE (FIBRE), POINTER :: LAST ! LAST VISITED |
---|
356 | END TYPE MAD_UNIVERSE |
---|
357 | |
---|
358 | TYPE BEAM |
---|
359 | REAL(DP), POINTER :: X(:,:) |
---|
360 | LOGICAL(LP), POINTER :: U(:) |
---|
361 | TYPE(BEAM_LOCATION), POINTER::POS(:) |
---|
362 | INTEGER, POINTER :: N,LOST |
---|
363 | REAL(DP), POINTER :: A(:),D(:) |
---|
364 | END TYPE BEAM |
---|
365 | |
---|
366 | TYPE INTEGRATION_NODE |
---|
367 | INTEGER, POINTER :: pos_in_fibre, CAS |
---|
368 | INTEGER, POINTER :: pos,lost |
---|
369 | real(dp), POINTER :: S(:) |
---|
370 | real(dp), POINTER :: ds_ac |
---|
371 | real(dp), POINTER :: ref(:) |
---|
372 | real(dp), pointer :: ent(:,:),a(:) |
---|
373 | real(dp), pointer :: exi(:,:),b(:) |
---|
374 | real(dp), POINTER :: delta_rad_in |
---|
375 | real(dp), POINTER :: delta_rad_out |
---|
376 | INTEGER, POINTER :: TEAPOT_LIKE |
---|
377 | TYPE (INTEGRATION_NODE), POINTER :: NEXT |
---|
378 | TYPE (INTEGRATION_NODE), POINTER :: PREVIOUS |
---|
379 | TYPE (NODE_LAYOUT), POINTER :: PARENT_NODE_LAYOUT |
---|
380 | TYPE(FIBRE), POINTER :: PARENT_FIBRE |
---|
381 | ! TYPE(EXTRA_WORK), POINTER :: WORK |
---|
382 | TYPE(BEAM_BEAM_NODE), POINTER :: BB |
---|
383 | TYPE(tree_element), POINTER :: T |
---|
384 | END TYPE INTEGRATION_NODE |
---|
385 | |
---|
386 | TYPE BEAM_LOCATION |
---|
387 | TYPE (INTEGRATION_NODE), POINTER :: NODE |
---|
388 | END TYPE BEAM_LOCATION |
---|
389 | |
---|
390 | TYPE NODE_LAYOUT |
---|
391 | CHARACTER(120), POINTER :: NAME ! IDENTIFICATION |
---|
392 | INTEGER, POINTER :: INDEX ! IDENTIFICATION |
---|
393 | logical(lp),POINTER ::CLOSED |
---|
394 | INTEGER, POINTER :: N ! TOTAL ELEMENT IN THE CHAIN |
---|
395 | !POINTERS OF LINK LAYOUT |
---|
396 | INTEGER, POINTER :: LASTPOS ! POSITION OF LAST VISITED |
---|
397 | TYPE (INTEGRATION_NODE), POINTER :: LAST ! LAST VISITED |
---|
398 | ! |
---|
399 | TYPE (INTEGRATION_NODE), POINTER :: END |
---|
400 | TYPE (INTEGRATION_NODE), POINTER :: START |
---|
401 | TYPE (INTEGRATION_NODE), POINTER :: START_GROUND ! STORE THE GROUNDED VALUE OF START DURING CIRCULAR SCANNING |
---|
402 | TYPE (INTEGRATION_NODE), POINTER :: END_GROUND ! STORE THE GROUNDED VALUE OF END DURING CIRCULAR SCANNING |
---|
403 | TYPE (LAYOUT), POINTER :: PARENT_LAYOUT |
---|
404 | TYPE(ORBIT_LATTICE), POINTER :: ORBIT_LATTICE |
---|
405 | END TYPE NODE_LAYOUT |
---|
406 | |
---|
407 | TYPE ORBIT_NODE |
---|
408 | TYPE (INTEGRATION_NODE), POINTER :: NODE |
---|
409 | REAL(DP), POINTER :: LATTICE(:) |
---|
410 | integer, POINTER :: DPOS |
---|
411 | integer, POINTER :: ENTERING_TASK |
---|
412 | integer, POINTER :: PTC_TASK |
---|
413 | logical, POINTER :: cavity |
---|
414 | END TYPE ORBIT_NODE |
---|
415 | |
---|
416 | TYPE ORBIT_LATTICE |
---|
417 | TYPE(ORBIT_NODE), pointer :: ORBIT_NODES(:) |
---|
418 | INTEGER, pointer :: ORBIT_N_NODE ! GET_N_NODE |
---|
419 | LOGICAL(lp), pointer :: ORBIT_USE_ORBIT_UNITS,accel |
---|
420 | INTEGER, pointer :: ORBIT_WARNING |
---|
421 | REAL(DP), pointer :: ORBIT_LMAX ! GET_LMAX |
---|
422 | REAL(DP), pointer :: ORBIT_MAX_PATCH_TZ |
---|
423 | REAL(DP), pointer :: ORBIT_mass_in_amu ! GET_MASS_AMU |
---|
424 | REAL(DP), pointer :: ORBIT_gammat ! GET_GAMMAT |
---|
425 | REAL(DP), pointer :: ORBIT_harmonic ! GET_HARMONIC |
---|
426 | REAL(DP), pointer :: ORBIT_L ! GET_CIRCUMFERENCE |
---|
427 | real(dp),pointer :: ORBIT_CHARGE ! GET_CHARGE |
---|
428 | REAL(DP), pointer :: ORBIT_OMEGA ! GET_omega |
---|
429 | REAL(DP), pointer :: ORBIT_P0C ! GET_P0C |
---|
430 | REAL(DP), pointer :: ORBIT_BETA0 ! GET_BETA0 |
---|
431 | REAL(DP), pointer :: orbit_kinetic ! GET_kinetic |
---|
432 | REAL(DP), pointer :: orbit_brho ! GET_brho |
---|
433 | REAL(DP), pointer :: orbit_energy ! GET_total_energy |
---|
434 | REAL(DP), pointer :: orbit_gamma ! GET_gamma |
---|
435 | ! REAL(DP), pointer :: orbit_dppfac ! GET_dppfac |
---|
436 | REAL(DP), pointer :: orbit_deltae ! GET_deltae |
---|
437 | REAL(DP), pointer :: ORBIT_OMEGA_after |
---|
438 | ! REAL(DP), pointer :: freqb,freqa,voltb,volta,phasa,phasb,xs6,dxs6 |
---|
439 | TYPE(INTERNAL_STATE),pointer :: STATE |
---|
440 | TYPE(INTEGRATION_NODE), pointer :: tp |
---|
441 | TYPE(layout), pointer :: parent_layout |
---|
442 | real(dp), pointer :: dt(:) |
---|
443 | END TYPE ORBIT_LATTICE |
---|
444 | |
---|
445 | |
---|
446 | ! BEAM BEAM |
---|
447 | |
---|
448 | TYPE BEAM_BEAM_NODE |
---|
449 | REAL(DP), POINTER :: S |
---|
450 | REAL(DP), POINTER :: SX,SY,FK |
---|
451 | REAL(DP), POINTER :: XM,YM ! trivial transverse displacement: not needed |
---|
452 | REAL(DP), POINTER :: BBK(:) ! kick on closed orbit |
---|
453 | ! REAL(DP), pointer :: MID(:,:),O(:) |
---|
454 | REAL(DP), POINTER :: A(:) ! patch angles |
---|
455 | REAL(DP), POINTER :: D(:) ! patch translation |
---|
456 | INTEGER, POINTER :: A_X1,A_X2 ! patch inverse propagator (not needed) |
---|
457 | LOGICAL(LP), POINTER :: PATCH ! true= patch |
---|
458 | END TYPE BEAM_BEAM_NODE |
---|
459 | |
---|
460 | ! Additional work at node |
---|
461 | TYPE EXTRA_WORK |
---|
462 | INTEGER, POINTER :: KIND |
---|
463 | TYPE(INTEGRATION_NODE), POINTER :: NODE |
---|
464 | TYPE(BEAM_BEAM_NODE), POINTER :: BB |
---|
465 | TYPE(MADX_APERTURE), POINTER :: A |
---|
466 | REAL(DP), POINTER :: ORB(:) |
---|
467 | END TYPE EXTRA_WORK |
---|
468 | |
---|
469 | TYPE fibre_array |
---|
470 | type(fibre), pointer :: p |
---|
471 | integer, pointer :: pos |
---|
472 | END TYPE fibre_array |
---|
473 | |
---|
474 | !!!! graphical arrays used in Su_hiromi only now |
---|
475 | real(sp), allocatable :: z_hiromi(:,:),z_hiromi0(:,:) |
---|
476 | integer n_hiromi,above_kicker,n_hiromi_lost |
---|
477 | logical(lp) :: fill_hiromi =my_false |
---|
478 | real(dp) :: r_hiromi=10.0,h_hiromi=10.0,kicker_hiromi=0.4d0,angle_hiromi(3)=0.d0 |
---|
479 | real(dp) :: ent_hiromi(3,3),x0_hiromi(6),t0_hiromi,dt_hiromi |
---|
480 | type(internal_state) state_hiromi |
---|