xsuite 0.40.0__cp311-cp311-macosx_11_0_arm64.whl → 0.40.1__cp311-cp311-macosx_11_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of xsuite might be problematic. Click here for more details.

@@ -77,34 +77,6 @@
77
77
 
78
78
  #endif // XSTUITE_TRACK_FLAGS_H
79
79
 
80
- #ifndef XOBJ_TYPEDEF_ArrNFloat64
81
- #define XOBJ_TYPEDEF_ArrNFloat64
82
- typedef struct ArrNFloat64_s * ArrNFloat64;
83
- static inline ArrNFloat64 ArrNFloat64_getp(ArrNFloat64 restrict obj){
84
- int64_t offset=0;
85
- return (ArrNFloat64)(( char*) obj+offset);
86
- }
87
- static inline int64_t ArrNFloat64_len(ArrNFloat64 restrict obj){
88
- int64_t offset=0;
89
- int64_t* arr = ( int64_t*)(( char*) obj+offset);
90
- return arr[1];
91
- }
92
- static inline double ArrNFloat64_get(const ArrNFloat64 restrict obj, int64_t i0){
93
- int64_t offset=0;
94
- offset+=16+i0*8;
95
- return *( double*)(( char*) obj+offset);
96
- }
97
- static inline void ArrNFloat64_set(ArrNFloat64 restrict obj, int64_t i0, double value){
98
- int64_t offset=0;
99
- offset+=16+i0*8;
100
- *( double*)(( char*) obj+offset)=value;
101
- }
102
- static inline double* ArrNFloat64_getp1(ArrNFloat64 restrict obj, int64_t i0){
103
- int64_t offset=0;
104
- offset+=16+i0*8;
105
- return ( double*)(( char*) obj+offset);
106
- }
107
- #endif
108
80
  #ifndef XOBJ_TYPEDEF_ArrNInt64
109
81
  #define XOBJ_TYPEDEF_ArrNInt64
110
82
  typedef struct ArrNInt64_s * ArrNInt64;
@@ -133,22 +105,32 @@ typedef struct ArrNInt64_s * ArrNInt64;
133
105
  return ( int64_t*)(( char*) obj+offset);
134
106
  }
135
107
  #endif
136
- #ifndef XOBJ_TYPEDEF_ArrNString
137
- #define XOBJ_TYPEDEF_ArrNString
138
- typedef struct ArrNString_s * ArrNString;
139
- static inline ArrNString ArrNString_getp(ArrNString restrict obj){
108
+ #ifndef XOBJ_TYPEDEF_ArrNFloat64
109
+ #define XOBJ_TYPEDEF_ArrNFloat64
110
+ typedef struct ArrNFloat64_s * ArrNFloat64;
111
+ static inline ArrNFloat64 ArrNFloat64_getp(ArrNFloat64 restrict obj){
140
112
  int64_t offset=0;
141
- return (ArrNString)(( char*) obj+offset);
113
+ return (ArrNFloat64)(( char*) obj+offset);
142
114
  }
143
- static inline int64_t ArrNString_len(ArrNString restrict obj){
115
+ static inline int64_t ArrNFloat64_len(ArrNFloat64 restrict obj){
144
116
  int64_t offset=0;
145
117
  int64_t* arr = ( int64_t*)(( char*) obj+offset);
146
118
  return arr[1];
147
119
  }
148
- static inline char* ArrNString_getp1(ArrNString restrict obj, int64_t i0){
120
+ static inline double ArrNFloat64_get(const ArrNFloat64 restrict obj, int64_t i0){
149
121
  int64_t offset=0;
150
- offset=*( int64_t*)(( char*) obj+offset+16+i0*8);
151
- return ( char*)(( char*) obj+offset);
122
+ offset+=16+i0*8;
123
+ return *( double*)(( char*) obj+offset);
124
+ }
125
+ static inline void ArrNFloat64_set(ArrNFloat64 restrict obj, int64_t i0, double value){
126
+ int64_t offset=0;
127
+ offset+=16+i0*8;
128
+ *( double*)(( char*) obj+offset)=value;
129
+ }
130
+ static inline double* ArrNFloat64_getp1(ArrNFloat64 restrict obj, int64_t i0){
131
+ int64_t offset=0;
132
+ offset+=16+i0*8;
133
+ return ( double*)(( char*) obj+offset);
152
134
  }
153
135
  #endif
154
136
  #ifndef XOBJ_TYPEDEF_ArrNUint32
@@ -179,6 +161,24 @@ typedef struct ArrNUint32_s * ArrNUint32;
179
161
  return ( uint32_t*)(( char*) obj+offset);
180
162
  }
181
163
  #endif
164
+ #ifndef XOBJ_TYPEDEF_ArrNString
165
+ #define XOBJ_TYPEDEF_ArrNString
166
+ typedef struct ArrNString_s * ArrNString;
167
+ static inline ArrNString ArrNString_getp(ArrNString restrict obj){
168
+ int64_t offset=0;
169
+ return (ArrNString)(( char*) obj+offset);
170
+ }
171
+ static inline int64_t ArrNString_len(ArrNString restrict obj){
172
+ int64_t offset=0;
173
+ int64_t* arr = ( int64_t*)(( char*) obj+offset);
174
+ return arr[1];
175
+ }
176
+ static inline char* ArrNString_getp1(ArrNString restrict obj, int64_t i0){
177
+ int64_t offset=0;
178
+ offset=*( int64_t*)(( char*) obj+offset+16+i0*8);
179
+ return ( char*)(( char*) obj+offset);
180
+ }
181
+ #endif
182
182
  #ifndef XOBJ_TYPEDEF_MultiSetterData
183
183
  #define XOBJ_TYPEDEF_MultiSetterData
184
184
  typedef struct MultiSetterData_s * MultiSetterData;
@@ -3368,609 +3368,174 @@ void LocalParticle_scale_exact_xp_yp(LocalParticle* part, double value_x, double
3368
3368
  }
3369
3369
 
3370
3370
 
3371
- #ifndef XOBJ_TYPEDEF_RandomUniformData
3372
- #define XOBJ_TYPEDEF_RandomUniformData
3373
- typedef struct RandomUniformData_s * RandomUniformData;
3374
- static inline RandomUniformData RandomUniformData_getp(RandomUniformData restrict obj){
3375
- int64_t offset=0;
3376
- return (RandomUniformData)(( char*) obj+offset);
3377
- }
3378
- static inline uint8_t RandomUniformData_get__dummy(const RandomUniformData restrict obj){
3379
- int64_t offset=0;
3380
- return *(( uint8_t*) obj+offset);
3381
- }
3382
- static inline void RandomUniformData_set__dummy(RandomUniformData restrict obj, uint8_t value){
3383
- int64_t offset=0;
3384
- *(( uint8_t*) obj+offset)=value;
3385
- }
3386
- static inline uint8_t* RandomUniformData_getp__dummy(RandomUniformData restrict obj){
3371
+ #ifndef XOBJ_TYPEDEF_ParticlesMonitorData
3372
+ #define XOBJ_TYPEDEF_ParticlesMonitorData
3373
+ typedef struct ParticlesMonitorData_s * ParticlesMonitorData;
3374
+ static inline ParticlesMonitorData ParticlesMonitorData_getp(ParticlesMonitorData restrict obj){
3387
3375
  int64_t offset=0;
3388
- return ( uint8_t*)(( char*) obj+offset);
3376
+ return (ParticlesMonitorData)(( char*) obj+offset);
3389
3377
  }
3390
- static inline double RandomUniformData_get__sin_rot_s(const RandomUniformData restrict obj){
3378
+ static inline int64_t ParticlesMonitorData_get_start_at_turn(const ParticlesMonitorData restrict obj){
3391
3379
  int64_t offset=0;
3392
3380
  offset+=8;
3393
- return *( double*)(( char*) obj+offset);
3381
+ return *( int64_t*)(( char*) obj+offset);
3394
3382
  }
3395
- static inline void RandomUniformData_set__sin_rot_s(RandomUniformData restrict obj, double value){
3383
+ static inline void ParticlesMonitorData_set_start_at_turn(ParticlesMonitorData restrict obj, int64_t value){
3396
3384
  int64_t offset=0;
3397
3385
  offset+=8;
3398
- *( double*)(( char*) obj+offset)=value;
3386
+ *( int64_t*)(( char*) obj+offset)=value;
3399
3387
  }
3400
- static inline double* RandomUniformData_getp__sin_rot_s(RandomUniformData restrict obj){
3388
+ static inline int64_t* ParticlesMonitorData_getp_start_at_turn(ParticlesMonitorData restrict obj){
3401
3389
  int64_t offset=0;
3402
3390
  offset+=8;
3403
- return ( double*)(( char*) obj+offset);
3391
+ return ( int64_t*)(( char*) obj+offset);
3404
3392
  }
3405
- static inline double RandomUniformData_get__cos_rot_s(const RandomUniformData restrict obj){
3393
+ static inline int64_t ParticlesMonitorData_get_stop_at_turn(const ParticlesMonitorData restrict obj){
3406
3394
  int64_t offset=0;
3407
3395
  offset+=16;
3408
- return *( double*)(( char*) obj+offset);
3396
+ return *( int64_t*)(( char*) obj+offset);
3409
3397
  }
3410
- static inline void RandomUniformData_set__cos_rot_s(RandomUniformData restrict obj, double value){
3398
+ static inline void ParticlesMonitorData_set_stop_at_turn(ParticlesMonitorData restrict obj, int64_t value){
3411
3399
  int64_t offset=0;
3412
3400
  offset+=16;
3413
- *( double*)(( char*) obj+offset)=value;
3401
+ *( int64_t*)(( char*) obj+offset)=value;
3414
3402
  }
3415
- static inline double* RandomUniformData_getp__cos_rot_s(RandomUniformData restrict obj){
3403
+ static inline int64_t* ParticlesMonitorData_getp_stop_at_turn(ParticlesMonitorData restrict obj){
3416
3404
  int64_t offset=0;
3417
3405
  offset+=16;
3418
- return ( double*)(( char*) obj+offset);
3406
+ return ( int64_t*)(( char*) obj+offset);
3419
3407
  }
3420
- static inline double RandomUniformData_get__shift_x(const RandomUniformData restrict obj){
3408
+ static inline int64_t ParticlesMonitorData_get_part_id_start(const ParticlesMonitorData restrict obj){
3421
3409
  int64_t offset=0;
3422
3410
  offset+=24;
3423
- return *( double*)(( char*) obj+offset);
3411
+ return *( int64_t*)(( char*) obj+offset);
3424
3412
  }
3425
- static inline void RandomUniformData_set__shift_x(RandomUniformData restrict obj, double value){
3413
+ static inline void ParticlesMonitorData_set_part_id_start(ParticlesMonitorData restrict obj, int64_t value){
3426
3414
  int64_t offset=0;
3427
3415
  offset+=24;
3428
- *( double*)(( char*) obj+offset)=value;
3416
+ *( int64_t*)(( char*) obj+offset)=value;
3429
3417
  }
3430
- static inline double* RandomUniformData_getp__shift_x(RandomUniformData restrict obj){
3418
+ static inline int64_t* ParticlesMonitorData_getp_part_id_start(ParticlesMonitorData restrict obj){
3431
3419
  int64_t offset=0;
3432
3420
  offset+=24;
3433
- return ( double*)(( char*) obj+offset);
3421
+ return ( int64_t*)(( char*) obj+offset);
3434
3422
  }
3435
- static inline double RandomUniformData_get__shift_y(const RandomUniformData restrict obj){
3423
+ static inline int64_t ParticlesMonitorData_get_part_id_end(const ParticlesMonitorData restrict obj){
3436
3424
  int64_t offset=0;
3437
3425
  offset+=32;
3438
- return *( double*)(( char*) obj+offset);
3426
+ return *( int64_t*)(( char*) obj+offset);
3439
3427
  }
3440
- static inline void RandomUniformData_set__shift_y(RandomUniformData restrict obj, double value){
3428
+ static inline void ParticlesMonitorData_set_part_id_end(ParticlesMonitorData restrict obj, int64_t value){
3441
3429
  int64_t offset=0;
3442
3430
  offset+=32;
3443
- *( double*)(( char*) obj+offset)=value;
3431
+ *( int64_t*)(( char*) obj+offset)=value;
3444
3432
  }
3445
- static inline double* RandomUniformData_getp__shift_y(RandomUniformData restrict obj){
3433
+ static inline int64_t* ParticlesMonitorData_getp_part_id_end(ParticlesMonitorData restrict obj){
3446
3434
  int64_t offset=0;
3447
3435
  offset+=32;
3448
- return ( double*)(( char*) obj+offset);
3436
+ return ( int64_t*)(( char*) obj+offset);
3449
3437
  }
3450
- static inline double RandomUniformData_get__shift_s(const RandomUniformData restrict obj){
3438
+ static inline int64_t ParticlesMonitorData_get_ebe_mode(const ParticlesMonitorData restrict obj){
3451
3439
  int64_t offset=0;
3452
3440
  offset+=40;
3453
- return *( double*)(( char*) obj+offset);
3441
+ return *( int64_t*)(( char*) obj+offset);
3454
3442
  }
3455
- static inline void RandomUniformData_set__shift_s(RandomUniformData restrict obj, double value){
3443
+ static inline void ParticlesMonitorData_set_ebe_mode(ParticlesMonitorData restrict obj, int64_t value){
3456
3444
  int64_t offset=0;
3457
3445
  offset+=40;
3458
- *( double*)(( char*) obj+offset)=value;
3446
+ *( int64_t*)(( char*) obj+offset)=value;
3459
3447
  }
3460
- static inline double* RandomUniformData_getp__shift_s(RandomUniformData restrict obj){
3448
+ static inline int64_t* ParticlesMonitorData_getp_ebe_mode(ParticlesMonitorData restrict obj){
3461
3449
  int64_t offset=0;
3462
3450
  offset+=40;
3463
- return ( double*)(( char*) obj+offset);
3451
+ return ( int64_t*)(( char*) obj+offset);
3464
3452
  }
3465
- static inline double RandomUniformData_get__rot_x_rad(const RandomUniformData restrict obj){
3453
+ static inline int64_t ParticlesMonitorData_get_n_records(const ParticlesMonitorData restrict obj){
3466
3454
  int64_t offset=0;
3467
3455
  offset+=48;
3468
- return *( double*)(( char*) obj+offset);
3456
+ return *( int64_t*)(( char*) obj+offset);
3469
3457
  }
3470
- static inline void RandomUniformData_set__rot_x_rad(RandomUniformData restrict obj, double value){
3458
+ static inline void ParticlesMonitorData_set_n_records(ParticlesMonitorData restrict obj, int64_t value){
3471
3459
  int64_t offset=0;
3472
3460
  offset+=48;
3473
- *( double*)(( char*) obj+offset)=value;
3461
+ *( int64_t*)(( char*) obj+offset)=value;
3474
3462
  }
3475
- static inline double* RandomUniformData_getp__rot_x_rad(RandomUniformData restrict obj){
3463
+ static inline int64_t* ParticlesMonitorData_getp_n_records(ParticlesMonitorData restrict obj){
3476
3464
  int64_t offset=0;
3477
3465
  offset+=48;
3478
- return ( double*)(( char*) obj+offset);
3466
+ return ( int64_t*)(( char*) obj+offset);
3479
3467
  }
3480
- static inline double RandomUniformData_get__rot_y_rad(const RandomUniformData restrict obj){
3468
+ static inline int64_t ParticlesMonitorData_get_n_repetitions(const ParticlesMonitorData restrict obj){
3481
3469
  int64_t offset=0;
3482
3470
  offset+=56;
3483
- return *( double*)(( char*) obj+offset);
3471
+ return *( int64_t*)(( char*) obj+offset);
3484
3472
  }
3485
- static inline void RandomUniformData_set__rot_y_rad(RandomUniformData restrict obj, double value){
3473
+ static inline void ParticlesMonitorData_set_n_repetitions(ParticlesMonitorData restrict obj, int64_t value){
3486
3474
  int64_t offset=0;
3487
3475
  offset+=56;
3488
- *( double*)(( char*) obj+offset)=value;
3476
+ *( int64_t*)(( char*) obj+offset)=value;
3489
3477
  }
3490
- static inline double* RandomUniformData_getp__rot_y_rad(RandomUniformData restrict obj){
3478
+ static inline int64_t* ParticlesMonitorData_getp_n_repetitions(ParticlesMonitorData restrict obj){
3491
3479
  int64_t offset=0;
3492
3480
  offset+=56;
3493
- return ( double*)(( char*) obj+offset);
3481
+ return ( int64_t*)(( char*) obj+offset);
3494
3482
  }
3495
- static inline double RandomUniformData_get__rot_s_rad_no_frame(const RandomUniformData restrict obj){
3483
+ static inline int64_t ParticlesMonitorData_get_repetition_period(const ParticlesMonitorData restrict obj){
3496
3484
  int64_t offset=0;
3497
3485
  offset+=64;
3498
- return *( double*)(( char*) obj+offset);
3486
+ return *( int64_t*)(( char*) obj+offset);
3499
3487
  }
3500
- static inline void RandomUniformData_set__rot_s_rad_no_frame(RandomUniformData restrict obj, double value){
3488
+ static inline void ParticlesMonitorData_set_repetition_period(ParticlesMonitorData restrict obj, int64_t value){
3501
3489
  int64_t offset=0;
3502
3490
  offset+=64;
3503
- *( double*)(( char*) obj+offset)=value;
3491
+ *( int64_t*)(( char*) obj+offset)=value;
3504
3492
  }
3505
- static inline double* RandomUniformData_getp__rot_s_rad_no_frame(RandomUniformData restrict obj){
3493
+ static inline int64_t* ParticlesMonitorData_getp_repetition_period(ParticlesMonitorData restrict obj){
3506
3494
  int64_t offset=0;
3507
3495
  offset+=64;
3508
- return ( double*)(( char*) obj+offset);
3496
+ return ( int64_t*)(( char*) obj+offset);
3509
3497
  }
3510
- static inline double RandomUniformData_get_rot_shift_anchor(const RandomUniformData restrict obj){
3498
+ static inline int64_t ParticlesMonitorData_get_flag_auto_to_numpy(const ParticlesMonitorData restrict obj){
3511
3499
  int64_t offset=0;
3512
3500
  offset+=72;
3513
- return *( double*)(( char*) obj+offset);
3501
+ return *( int64_t*)(( char*) obj+offset);
3514
3502
  }
3515
- static inline void RandomUniformData_set_rot_shift_anchor(RandomUniformData restrict obj, double value){
3503
+ static inline void ParticlesMonitorData_set_flag_auto_to_numpy(ParticlesMonitorData restrict obj, int64_t value){
3516
3504
  int64_t offset=0;
3517
3505
  offset+=72;
3518
- *( double*)(( char*) obj+offset)=value;
3506
+ *( int64_t*)(( char*) obj+offset)=value;
3519
3507
  }
3520
- static inline double* RandomUniformData_getp_rot_shift_anchor(RandomUniformData restrict obj){
3508
+ static inline int64_t* ParticlesMonitorData_getp_flag_auto_to_numpy(ParticlesMonitorData restrict obj){
3521
3509
  int64_t offset=0;
3522
3510
  offset+=72;
3523
- return ( double*)(( char*) obj+offset);
3511
+ return ( int64_t*)(( char*) obj+offset);
3524
3512
  }
3525
- #endif
3526
- // copyright ############################### //
3527
- // This file is part of the Xtrack Package. //
3528
- // Copyright (c) CERN, 2021. //
3529
- // ######################################### //
3530
-
3531
- #ifndef XTRACK_CONSTANTS_H
3532
- #define XTRACK_CONSTANTS_H
3533
-
3534
- #if !defined( C_LIGHT )
3535
- #define C_LIGHT ( 299792458.0 )
3536
- #endif /* !defined( C_LIGHT ) */
3537
-
3538
- #if !defined( EPSILON_0 )
3539
- #define EPSILON_0 (8.854187817620e-12)
3540
- #endif /* !defined( EPSILON_0 ) */
3541
-
3542
- #if !defined( PI )
3543
- #define PI (3.1415926535897932384626433832795028841971693993751)
3544
- #endif /* !defined( PI ) */
3545
-
3546
- #if !defined( MU_0 )
3547
- #define MU_0 (PI*4.0e-7)
3548
- #endif /* !defined( MU_0 ) */
3549
-
3550
- #if !defined( DEG2RAD )
3551
- #define DEG2RAD (0.0174532925199432957692369076848861271344287188854)
3552
- #endif /* !defiend( DEG2RAD ) */
3553
-
3554
- #if !defined( RAD2DEG )
3555
- #define RAD2DEG (57.29577951308232087679815481410517033240547246656442)
3556
- #endif /* !defiend( RAD2DEG ) */
3557
-
3558
- #if !defined( SQRT_PI )
3559
- #define SQRT_PI (1.7724538509055160272981674833411451827975494561224)
3560
- #endif /* !defined( SQRT_PI ) */
3561
-
3562
- #if !defined( QELEM )
3563
- #define QELEM (1.60217662e-19)
3564
- #endif /* !defined( QELEM ) */
3565
-
3566
- #if !defined( DBL_MAX )
3567
- #define DBL_MAX (1.7976931348623158e+308)
3568
- #endif /* !defined( DBL_MAX ) */
3569
-
3570
- #if !defined( DBL_MIN )
3571
- #define DBL_MIN (2.2250738585072014e-308)
3572
- #endif /* !defined( DBL_MIN ) */
3573
-
3574
- #if !defined( DBL_EPSILON )
3575
- #define DBL_EPSILON (2.2204460492503131e-16)
3576
- #endif /* !defined( DBL_EPSILON ) */
3577
-
3578
- #if !defined( RADIUS_ELECTRON )
3579
- #define RADIUS_ELECTRON (2.8179403262e-15)
3580
- #endif /* !defined( RADIUS_ELECTRON ) */
3581
-
3582
- #if !defined( MASS_ELECTRON )
3583
- #define MASS_ELECTRON (9.1093837e-31)
3584
- #endif /* !defined( MASS_ELECTRON ) */
3585
-
3586
- #endif /* XTRACK_CONSTANTS_H */
3587
-
3588
- // copyright ############################### //
3589
- // This file is part of the Xtrack Package. //
3590
- // Copyright (c) CERN, 2023. //
3591
- // ######################################### //
3592
-
3593
- #ifndef XTRACK_FUNCTIONS_H
3594
- #define XTRACK_FUNCTIONS_H
3595
-
3596
- #include <headers/track.h>
3597
-
3598
-
3599
- GPUFUN
3600
- void kill_all_particles(LocalParticle* part0, int64_t kill_state) {
3601
- START_PER_PARTICLE_BLOCK(part0, part);
3602
- LocalParticle_kill_particle(part, kill_state);
3603
- END_PER_PARTICLE_BLOCK;
3604
- }
3605
-
3606
-
3607
- GPUFUN
3608
- int8_t assert_tracking(LocalParticle* part, int64_t kill_state){
3609
- // Whenever we are not tracking, e.g. in a twiss, the particle will be at_turn < 0.
3610
- // We test this to distinguish genuine tracking from twiss.
3611
- if (LocalParticle_get_at_turn(part) < 0){
3612
- LocalParticle_kill_particle(part, kill_state);
3613
- return 0;
3614
- }
3615
- return 1;
3616
- }
3617
-
3618
- #endif /* XTRACK_FUNCTIONS_H */
3619
-
3620
- // copyright ############################### //
3621
- // This file is part of the Xtrack Package. //
3622
- // Copyright (c) CERN, 2023. //
3623
- // ######################################### //
3624
-
3625
- #ifndef XTRACK_PARTICLE_STATES_H
3626
- #define XTRACK_PARTICLE_STATES_H
3627
-
3628
- #define XT_LOST_ON_APERTURE 0
3629
- #define XT_LOST_ON_LONG_CUT -2
3630
- #define XT_LOST_ALL_E_IN_SYNRAD -10
3631
- #define RNG_ERR_SEEDS_NOT_SET -20
3632
- #define RNG_ERR_INVALID_TRACK -21
3633
- #define RNG_ERR_RUTH_NOT_SET -22
3634
- #define XT_INVALID_SLICE_TRANSFORM -40
3635
- #define XT_INVALID_CURVED_SLICE_TRANSFORM -41
3636
-
3637
- #endif /* XTRACK_PARTICLE_STATES_H */
3638
-
3639
- // copyright ############################### //
3640
- // This file is part of the Xtrack Package. //
3641
- // Copyright (c) CERN, 2025. //
3642
- // ######################################### //
3643
- #ifndef XTRACK_TRACK_SROTATION_H
3644
- #define XTRACK_TRACK_SROTATION_H
3645
-
3646
- #include <headers/track.h>
3647
-
3648
-
3649
- GPUFUN
3650
- void SRotation_single_particle(LocalParticle* part, double sin_z, double cos_z)
3651
- {
3652
- double const x = LocalParticle_get_x(part);
3653
- double const y = LocalParticle_get_y(part);
3654
- double const px = LocalParticle_get_px(part);
3655
- double const py = LocalParticle_get_py(part);
3656
-
3657
- double const x_hat = cos_z * x + sin_z * y;
3658
- double const y_hat = -sin_z * x + cos_z * y;
3659
- double const px_hat = cos_z * px + sin_z * py;
3660
- double const py_hat = -sin_z * px + cos_z * py;
3661
-
3662
- LocalParticle_set_x(part, x_hat);
3663
- LocalParticle_set_y(part, y_hat);
3664
- LocalParticle_set_px(part, px_hat);
3665
- LocalParticle_set_py(part, py_hat);
3666
- }
3667
-
3668
- #endif
3669
- // copyright ############################### //
3670
- // This file is part of the Xtrack Package. //
3671
- // Copyright (c) CERN, 2021. //
3672
- // ######################################### //
3673
-
3674
- #ifndef XTRACK_TRACK_DRIFT_H
3675
- #define XTRACK_TRACK_DRIFT_H
3676
-
3677
-
3678
- GPUFUN
3679
- void Drift_single_particle_expanded(LocalParticle* part, double length){
3680
- double const rpp = LocalParticle_get_rpp(part);
3681
- double const rv0v = 1./LocalParticle_get_rvv(part);
3682
- double const xp = LocalParticle_get_px(part) * rpp;
3683
- double const yp = LocalParticle_get_py(part) * rpp;
3684
- double const dzeta = 1 - rv0v * ( 1. + ( xp*xp + yp*yp ) / 2. );
3685
-
3686
- LocalParticle_add_to_x(part, xp * length );
3687
- LocalParticle_add_to_y(part, yp * length );
3688
- LocalParticle_add_to_s(part, length);
3689
- LocalParticle_add_to_zeta(part, length * dzeta );
3690
- }
3691
-
3692
-
3693
- GPUFUN
3694
- void Drift_single_particle_exact(LocalParticle* part, double length){
3695
- double const px = LocalParticle_get_px(part);
3696
- double const py = LocalParticle_get_py(part);
3697
- double const rv0v = 1./LocalParticle_get_rvv(part);
3698
- double const one_plus_delta = 1. + LocalParticle_get_delta(part);
3699
-
3700
- double const one_over_pz = 1./sqrt(one_plus_delta*one_plus_delta
3701
- - px * px - py * py);
3702
- double const dzeta = 1 - rv0v * one_plus_delta * one_over_pz;
3703
-
3704
- LocalParticle_add_to_x(part, px * one_over_pz * length);
3705
- LocalParticle_add_to_y(part, py * one_over_pz * length);
3706
- LocalParticle_add_to_zeta(part, dzeta * length);
3707
- LocalParticle_add_to_s(part, length);
3708
- }
3709
-
3710
-
3711
- GPUFUN
3712
- void Drift_single_particle(LocalParticle* part, double length){
3713
- #ifndef XTRACK_USE_EXACT_DRIFTS
3714
- Drift_single_particle_expanded(part, length);
3715
- #else
3716
- Drift_single_particle_exact(part, length);
3717
- #endif
3718
- }
3719
-
3720
-
3721
- #endif /* XTRACK_TRACK_DRIFT_H */
3722
-
3723
-
3724
- #ifndef XSTUITE_TRACK_FLAGS_H
3725
- #define XSTUITE_TRACK_FLAGS_H
3726
- #define XS_FLAG_BACKTRACK (0)
3727
- #define XS_FLAG_KILL_CAVITY_KICK (2)
3728
- #define XS_FLAG_IGNORE_GLOBAL_APERTURE (3)
3729
- #define XS_FLAG_IGNORE_LOCAL_APERTURE (4)
3730
- #define XS_FLAG_SR_TAPER (5)
3731
- #define XS_FLAG_SR_KICK_SAME_AS_FIRST (6)
3732
-
3733
- #endif // XSTUITE_TRACK_FLAGS_H
3734
-
3735
- #include <random/random_src/uniform.h>
3736
-
3737
-
3738
- void sample_uniform(
3739
- RandomUniformData el,
3740
-
3741
- ParticlesData particles,
3742
- double* samples, int64_t n_samples_per_seed,
3743
- int64_t flag_increment_at_element,
3744
- int8_t* io_buffer){
3745
-
3746
- // #define CONTEXT_OPENMP //only_for_context cpu_openmp
3747
- #ifdef CONTEXT_OPENMP
3748
- const int64_t capacity = ParticlesData_get__capacity(particles);
3749
- const int num_threads = omp_get_max_threads();
3750
-
3751
- #ifndef XT_OMP_SKIP_REORGANIZE
3752
- const int64_t num_particles_to_track = ParticlesData_get__num_active_particles(particles);
3753
-
3754
- {
3755
- LocalParticle lpart;
3756
- lpart.io_buffer = io_buffer;
3757
- Particles_to_LocalParticle(particles, &lpart, 0, capacity);
3758
- check_is_active(&lpart);
3759
- count_reorganized_particles(&lpart);
3760
- LocalParticle_to_Particles(&lpart, particles, 0, capacity);
3761
- }
3762
- #else // When we skip reorganize, we cannot just batch active particles
3763
- const int64_t num_particles_to_track = capacity;
3764
- #endif
3765
-
3766
- const int64_t chunk_size = (num_particles_to_track + num_threads - 1)/num_threads; // ceil division
3767
- #endif // CONTEXT_OPENMP
3768
-
3769
- // #pragma omp parallel for //only_for_context cpu_openmp
3770
- // for (int64_t batch_id = 0; batch_id < num_threads; batch_id++) { //only_for_context cpu_openmp
3771
- LocalParticle lpart;
3772
- lpart.io_buffer = io_buffer;
3773
- lpart.track_flags = 0;
3774
- // int64_t part_id = batch_id * chunk_size; //only_for_context cpu_openmp
3775
- // int64_t end_id = (batch_id + 1) * chunk_size; //only_for_context cpu_openmp
3776
- // if (end_id > num_particles_to_track) end_id = num_particles_to_track; //only_for_context cpu_openmp
3777
-
3778
- int64_t part_id = 0; //only_for_context cpu_serial
3779
- // int64_t part_id = blockDim.x * blockIdx.x + threadIdx.x; //only_for_context cuda
3780
- // int64_t part_id = get_global_id(0); //only_for_context opencl
3781
- int64_t end_id = 0; // unused outside of openmp //only_for_context cpu_serial cuda opencl
3782
-
3783
- int64_t part_capacity = ParticlesData_get__capacity(particles);
3784
- if (part_id<part_capacity){
3785
- Particles_to_LocalParticle(particles, &lpart, part_id, end_id);
3786
- if (check_is_active(&lpart)>0){
3787
- RandomUniform_sample(el, &lpart, samples, n_samples_per_seed);
3788
-
3789
- }
3790
- if (check_is_active(&lpart)>0 && flag_increment_at_element){
3791
- increment_at_element(&lpart, 1);
3792
- }
3793
- }
3794
- // } //only_for_context cpu_openmp
3795
-
3796
- // On OpenMP we want to additionally by default reorganize all
3797
- // the particles.
3798
- // #ifndef XT_OMP_SKIP_REORGANIZE //only_for_context cpu_openmp
3799
- // LocalParticle lpart; //only_for_context cpu_openmp
3800
- // lpart.io_buffer = io_buffer; //only_for_context cpu_openmp
3801
- // Particles_to_LocalParticle(particles, &lpart, 0, capacity);//only_for_context cpu_openmp
3802
- // check_is_active(&lpart); //only_for_context cpu_openmp
3803
- // #endif //only_for_context cpu_openmp
3804
- }
3805
-
3806
- #ifndef XOBJ_TYPEDEF_ParticlesMonitorData
3807
- #define XOBJ_TYPEDEF_ParticlesMonitorData
3808
- typedef struct ParticlesMonitorData_s * ParticlesMonitorData;
3809
- static inline ParticlesMonitorData ParticlesMonitorData_getp(ParticlesMonitorData restrict obj){
3513
+ static inline ParticlesData ParticlesMonitorData_getp_data(ParticlesMonitorData restrict obj){
3810
3514
  int64_t offset=0;
3811
- return (ParticlesMonitorData)(( char*) obj+offset);
3515
+ offset+=152;
3516
+ return (ParticlesData)(( char*) obj+offset);
3812
3517
  }
3813
- static inline int64_t ParticlesMonitorData_get_start_at_turn(const ParticlesMonitorData restrict obj){
3518
+ static inline int64_t ParticlesMonitorData_get_data__capacity(const ParticlesMonitorData restrict obj){
3814
3519
  int64_t offset=0;
3815
- offset+=8;
3520
+ offset+=160;
3816
3521
  return *( int64_t*)(( char*) obj+offset);
3817
3522
  }
3818
- static inline void ParticlesMonitorData_set_start_at_turn(ParticlesMonitorData restrict obj, int64_t value){
3523
+ static inline void ParticlesMonitorData_set_data__capacity(ParticlesMonitorData restrict obj, int64_t value){
3819
3524
  int64_t offset=0;
3820
- offset+=8;
3525
+ offset+=160;
3821
3526
  *( int64_t*)(( char*) obj+offset)=value;
3822
3527
  }
3823
- static inline int64_t* ParticlesMonitorData_getp_start_at_turn(ParticlesMonitorData restrict obj){
3528
+ static inline int64_t* ParticlesMonitorData_getp_data__capacity(ParticlesMonitorData restrict obj){
3824
3529
  int64_t offset=0;
3825
- offset+=8;
3530
+ offset+=160;
3826
3531
  return ( int64_t*)(( char*) obj+offset);
3827
3532
  }
3828
- static inline int64_t ParticlesMonitorData_get_stop_at_turn(const ParticlesMonitorData restrict obj){
3533
+ static inline int64_t ParticlesMonitorData_get_data__num_active_particles(const ParticlesMonitorData restrict obj){
3829
3534
  int64_t offset=0;
3830
- offset+=16;
3535
+ offset+=168;
3831
3536
  return *( int64_t*)(( char*) obj+offset);
3832
3537
  }
3833
- static inline void ParticlesMonitorData_set_stop_at_turn(ParticlesMonitorData restrict obj, int64_t value){
3834
- int64_t offset=0;
3835
- offset+=16;
3836
- *( int64_t*)(( char*) obj+offset)=value;
3837
- }
3838
- static inline int64_t* ParticlesMonitorData_getp_stop_at_turn(ParticlesMonitorData restrict obj){
3839
- int64_t offset=0;
3840
- offset+=16;
3841
- return ( int64_t*)(( char*) obj+offset);
3842
- }
3843
- static inline int64_t ParticlesMonitorData_get_part_id_start(const ParticlesMonitorData restrict obj){
3844
- int64_t offset=0;
3845
- offset+=24;
3846
- return *( int64_t*)(( char*) obj+offset);
3847
- }
3848
- static inline void ParticlesMonitorData_set_part_id_start(ParticlesMonitorData restrict obj, int64_t value){
3849
- int64_t offset=0;
3850
- offset+=24;
3851
- *( int64_t*)(( char*) obj+offset)=value;
3852
- }
3853
- static inline int64_t* ParticlesMonitorData_getp_part_id_start(ParticlesMonitorData restrict obj){
3854
- int64_t offset=0;
3855
- offset+=24;
3856
- return ( int64_t*)(( char*) obj+offset);
3857
- }
3858
- static inline int64_t ParticlesMonitorData_get_part_id_end(const ParticlesMonitorData restrict obj){
3859
- int64_t offset=0;
3860
- offset+=32;
3861
- return *( int64_t*)(( char*) obj+offset);
3862
- }
3863
- static inline void ParticlesMonitorData_set_part_id_end(ParticlesMonitorData restrict obj, int64_t value){
3864
- int64_t offset=0;
3865
- offset+=32;
3866
- *( int64_t*)(( char*) obj+offset)=value;
3867
- }
3868
- static inline int64_t* ParticlesMonitorData_getp_part_id_end(ParticlesMonitorData restrict obj){
3869
- int64_t offset=0;
3870
- offset+=32;
3871
- return ( int64_t*)(( char*) obj+offset);
3872
- }
3873
- static inline int64_t ParticlesMonitorData_get_ebe_mode(const ParticlesMonitorData restrict obj){
3874
- int64_t offset=0;
3875
- offset+=40;
3876
- return *( int64_t*)(( char*) obj+offset);
3877
- }
3878
- static inline void ParticlesMonitorData_set_ebe_mode(ParticlesMonitorData restrict obj, int64_t value){
3879
- int64_t offset=0;
3880
- offset+=40;
3881
- *( int64_t*)(( char*) obj+offset)=value;
3882
- }
3883
- static inline int64_t* ParticlesMonitorData_getp_ebe_mode(ParticlesMonitorData restrict obj){
3884
- int64_t offset=0;
3885
- offset+=40;
3886
- return ( int64_t*)(( char*) obj+offset);
3887
- }
3888
- static inline int64_t ParticlesMonitorData_get_n_records(const ParticlesMonitorData restrict obj){
3889
- int64_t offset=0;
3890
- offset+=48;
3891
- return *( int64_t*)(( char*) obj+offset);
3892
- }
3893
- static inline void ParticlesMonitorData_set_n_records(ParticlesMonitorData restrict obj, int64_t value){
3894
- int64_t offset=0;
3895
- offset+=48;
3896
- *( int64_t*)(( char*) obj+offset)=value;
3897
- }
3898
- static inline int64_t* ParticlesMonitorData_getp_n_records(ParticlesMonitorData restrict obj){
3899
- int64_t offset=0;
3900
- offset+=48;
3901
- return ( int64_t*)(( char*) obj+offset);
3902
- }
3903
- static inline int64_t ParticlesMonitorData_get_n_repetitions(const ParticlesMonitorData restrict obj){
3904
- int64_t offset=0;
3905
- offset+=56;
3906
- return *( int64_t*)(( char*) obj+offset);
3907
- }
3908
- static inline void ParticlesMonitorData_set_n_repetitions(ParticlesMonitorData restrict obj, int64_t value){
3909
- int64_t offset=0;
3910
- offset+=56;
3911
- *( int64_t*)(( char*) obj+offset)=value;
3912
- }
3913
- static inline int64_t* ParticlesMonitorData_getp_n_repetitions(ParticlesMonitorData restrict obj){
3914
- int64_t offset=0;
3915
- offset+=56;
3916
- return ( int64_t*)(( char*) obj+offset);
3917
- }
3918
- static inline int64_t ParticlesMonitorData_get_repetition_period(const ParticlesMonitorData restrict obj){
3919
- int64_t offset=0;
3920
- offset+=64;
3921
- return *( int64_t*)(( char*) obj+offset);
3922
- }
3923
- static inline void ParticlesMonitorData_set_repetition_period(ParticlesMonitorData restrict obj, int64_t value){
3924
- int64_t offset=0;
3925
- offset+=64;
3926
- *( int64_t*)(( char*) obj+offset)=value;
3927
- }
3928
- static inline int64_t* ParticlesMonitorData_getp_repetition_period(ParticlesMonitorData restrict obj){
3929
- int64_t offset=0;
3930
- offset+=64;
3931
- return ( int64_t*)(( char*) obj+offset);
3932
- }
3933
- static inline int64_t ParticlesMonitorData_get_flag_auto_to_numpy(const ParticlesMonitorData restrict obj){
3934
- int64_t offset=0;
3935
- offset+=72;
3936
- return *( int64_t*)(( char*) obj+offset);
3937
- }
3938
- static inline void ParticlesMonitorData_set_flag_auto_to_numpy(ParticlesMonitorData restrict obj, int64_t value){
3939
- int64_t offset=0;
3940
- offset+=72;
3941
- *( int64_t*)(( char*) obj+offset)=value;
3942
- }
3943
- static inline int64_t* ParticlesMonitorData_getp_flag_auto_to_numpy(ParticlesMonitorData restrict obj){
3944
- int64_t offset=0;
3945
- offset+=72;
3946
- return ( int64_t*)(( char*) obj+offset);
3947
- }
3948
- static inline ParticlesData ParticlesMonitorData_getp_data(ParticlesMonitorData restrict obj){
3949
- int64_t offset=0;
3950
- offset+=152;
3951
- return (ParticlesData)(( char*) obj+offset);
3952
- }
3953
- static inline int64_t ParticlesMonitorData_get_data__capacity(const ParticlesMonitorData restrict obj){
3954
- int64_t offset=0;
3955
- offset+=160;
3956
- return *( int64_t*)(( char*) obj+offset);
3957
- }
3958
- static inline void ParticlesMonitorData_set_data__capacity(ParticlesMonitorData restrict obj, int64_t value){
3959
- int64_t offset=0;
3960
- offset+=160;
3961
- *( int64_t*)(( char*) obj+offset)=value;
3962
- }
3963
- static inline int64_t* ParticlesMonitorData_getp_data__capacity(ParticlesMonitorData restrict obj){
3964
- int64_t offset=0;
3965
- offset+=160;
3966
- return ( int64_t*)(( char*) obj+offset);
3967
- }
3968
- static inline int64_t ParticlesMonitorData_get_data__num_active_particles(const ParticlesMonitorData restrict obj){
3969
- int64_t offset=0;
3970
- offset+=168;
3971
- return *( int64_t*)(( char*) obj+offset);
3972
- }
3973
- static inline void ParticlesMonitorData_set_data__num_active_particles(ParticlesMonitorData restrict obj, int64_t value){
3538
+ static inline void ParticlesMonitorData_set_data__num_active_particles(ParticlesMonitorData restrict obj, int64_t value){
3974
3539
  int64_t offset=0;
3975
3540
  offset+=168;
3976
3541
  *( int64_t*)(( char*) obj+offset)=value;
@@ -5097,180 +4662,816 @@ typedef struct ParticlesMonitorData_s * ParticlesMonitorData;
5097
4662
  offset+=16+i0*4;
5098
4663
  *( uint32_t*)(( char*) obj+offset)=value;
5099
4664
  }
5100
- static inline uint32_t* ParticlesMonitorData_getp1_data__rng_s3(ParticlesMonitorData restrict obj, int64_t i0){
5101
- int64_t offset=0;
5102
- offset+=152;
5103
- offset+=*( int64_t*)(( char*) obj+offset+296);
5104
- offset+=16+i0*4;
5105
- return ( uint32_t*)(( char*) obj+offset);
4665
+ static inline uint32_t* ParticlesMonitorData_getp1_data__rng_s3(ParticlesMonitorData restrict obj, int64_t i0){
4666
+ int64_t offset=0;
4667
+ offset+=152;
4668
+ offset+=*( int64_t*)(( char*) obj+offset+296);
4669
+ offset+=16+i0*4;
4670
+ return ( uint32_t*)(( char*) obj+offset);
4671
+ }
4672
+ static inline ArrNUint32 ParticlesMonitorData_getp_data__rng_s4(ParticlesMonitorData restrict obj){
4673
+ int64_t offset=0;
4674
+ offset+=152;
4675
+ offset+=*( int64_t*)(( char*) obj+offset+304);
4676
+ return (ArrNUint32)(( char*) obj+offset);
4677
+ }
4678
+ static inline int64_t ParticlesMonitorData_len_data__rng_s4(ParticlesMonitorData restrict obj){
4679
+ int64_t offset=0;
4680
+ offset+=152;
4681
+ offset+=*( int64_t*)(( char*) obj+offset+304);
4682
+ int64_t* arr = ( int64_t*)(( char*) obj+offset);
4683
+ return arr[1];
4684
+ }
4685
+ static inline uint32_t ParticlesMonitorData_get_data__rng_s4(const ParticlesMonitorData restrict obj, int64_t i0){
4686
+ int64_t offset=0;
4687
+ offset+=152;
4688
+ offset+=*( int64_t*)(( char*) obj+offset+304);
4689
+ offset+=16+i0*4;
4690
+ return *( uint32_t*)(( char*) obj+offset);
4691
+ }
4692
+ static inline void ParticlesMonitorData_set_data__rng_s4(ParticlesMonitorData restrict obj, int64_t i0, uint32_t value){
4693
+ int64_t offset=0;
4694
+ offset+=152;
4695
+ offset+=*( int64_t*)(( char*) obj+offset+304);
4696
+ offset+=16+i0*4;
4697
+ *( uint32_t*)(( char*) obj+offset)=value;
4698
+ }
4699
+ static inline uint32_t* ParticlesMonitorData_getp1_data__rng_s4(ParticlesMonitorData restrict obj, int64_t i0){
4700
+ int64_t offset=0;
4701
+ offset+=152;
4702
+ offset+=*( int64_t*)(( char*) obj+offset+304);
4703
+ offset+=16+i0*4;
4704
+ return ( uint32_t*)(( char*) obj+offset);
4705
+ }
4706
+ static inline double ParticlesMonitorData_get__sin_rot_s(const ParticlesMonitorData restrict obj){
4707
+ int64_t offset=0;
4708
+ offset+=80;
4709
+ return *( double*)(( char*) obj+offset);
4710
+ }
4711
+ static inline void ParticlesMonitorData_set__sin_rot_s(ParticlesMonitorData restrict obj, double value){
4712
+ int64_t offset=0;
4713
+ offset+=80;
4714
+ *( double*)(( char*) obj+offset)=value;
4715
+ }
4716
+ static inline double* ParticlesMonitorData_getp__sin_rot_s(ParticlesMonitorData restrict obj){
4717
+ int64_t offset=0;
4718
+ offset+=80;
4719
+ return ( double*)(( char*) obj+offset);
4720
+ }
4721
+ static inline double ParticlesMonitorData_get__cos_rot_s(const ParticlesMonitorData restrict obj){
4722
+ int64_t offset=0;
4723
+ offset+=88;
4724
+ return *( double*)(( char*) obj+offset);
4725
+ }
4726
+ static inline void ParticlesMonitorData_set__cos_rot_s(ParticlesMonitorData restrict obj, double value){
4727
+ int64_t offset=0;
4728
+ offset+=88;
4729
+ *( double*)(( char*) obj+offset)=value;
4730
+ }
4731
+ static inline double* ParticlesMonitorData_getp__cos_rot_s(ParticlesMonitorData restrict obj){
4732
+ int64_t offset=0;
4733
+ offset+=88;
4734
+ return ( double*)(( char*) obj+offset);
4735
+ }
4736
+ static inline double ParticlesMonitorData_get__shift_x(const ParticlesMonitorData restrict obj){
4737
+ int64_t offset=0;
4738
+ offset+=96;
4739
+ return *( double*)(( char*) obj+offset);
4740
+ }
4741
+ static inline void ParticlesMonitorData_set__shift_x(ParticlesMonitorData restrict obj, double value){
4742
+ int64_t offset=0;
4743
+ offset+=96;
4744
+ *( double*)(( char*) obj+offset)=value;
4745
+ }
4746
+ static inline double* ParticlesMonitorData_getp__shift_x(ParticlesMonitorData restrict obj){
4747
+ int64_t offset=0;
4748
+ offset+=96;
4749
+ return ( double*)(( char*) obj+offset);
4750
+ }
4751
+ static inline double ParticlesMonitorData_get__shift_y(const ParticlesMonitorData restrict obj){
4752
+ int64_t offset=0;
4753
+ offset+=104;
4754
+ return *( double*)(( char*) obj+offset);
4755
+ }
4756
+ static inline void ParticlesMonitorData_set__shift_y(ParticlesMonitorData restrict obj, double value){
4757
+ int64_t offset=0;
4758
+ offset+=104;
4759
+ *( double*)(( char*) obj+offset)=value;
4760
+ }
4761
+ static inline double* ParticlesMonitorData_getp__shift_y(ParticlesMonitorData restrict obj){
4762
+ int64_t offset=0;
4763
+ offset+=104;
4764
+ return ( double*)(( char*) obj+offset);
4765
+ }
4766
+ static inline double ParticlesMonitorData_get__shift_s(const ParticlesMonitorData restrict obj){
4767
+ int64_t offset=0;
4768
+ offset+=112;
4769
+ return *( double*)(( char*) obj+offset);
4770
+ }
4771
+ static inline void ParticlesMonitorData_set__shift_s(ParticlesMonitorData restrict obj, double value){
4772
+ int64_t offset=0;
4773
+ offset+=112;
4774
+ *( double*)(( char*) obj+offset)=value;
4775
+ }
4776
+ static inline double* ParticlesMonitorData_getp__shift_s(ParticlesMonitorData restrict obj){
4777
+ int64_t offset=0;
4778
+ offset+=112;
4779
+ return ( double*)(( char*) obj+offset);
4780
+ }
4781
+ static inline double ParticlesMonitorData_get__rot_x_rad(const ParticlesMonitorData restrict obj){
4782
+ int64_t offset=0;
4783
+ offset+=120;
4784
+ return *( double*)(( char*) obj+offset);
4785
+ }
4786
+ static inline void ParticlesMonitorData_set__rot_x_rad(ParticlesMonitorData restrict obj, double value){
4787
+ int64_t offset=0;
4788
+ offset+=120;
4789
+ *( double*)(( char*) obj+offset)=value;
4790
+ }
4791
+ static inline double* ParticlesMonitorData_getp__rot_x_rad(ParticlesMonitorData restrict obj){
4792
+ int64_t offset=0;
4793
+ offset+=120;
4794
+ return ( double*)(( char*) obj+offset);
4795
+ }
4796
+ static inline double ParticlesMonitorData_get__rot_y_rad(const ParticlesMonitorData restrict obj){
4797
+ int64_t offset=0;
4798
+ offset+=128;
4799
+ return *( double*)(( char*) obj+offset);
4800
+ }
4801
+ static inline void ParticlesMonitorData_set__rot_y_rad(ParticlesMonitorData restrict obj, double value){
4802
+ int64_t offset=0;
4803
+ offset+=128;
4804
+ *( double*)(( char*) obj+offset)=value;
4805
+ }
4806
+ static inline double* ParticlesMonitorData_getp__rot_y_rad(ParticlesMonitorData restrict obj){
4807
+ int64_t offset=0;
4808
+ offset+=128;
4809
+ return ( double*)(( char*) obj+offset);
4810
+ }
4811
+ static inline double ParticlesMonitorData_get__rot_s_rad_no_frame(const ParticlesMonitorData restrict obj){
4812
+ int64_t offset=0;
4813
+ offset+=136;
4814
+ return *( double*)(( char*) obj+offset);
4815
+ }
4816
+ static inline void ParticlesMonitorData_set__rot_s_rad_no_frame(ParticlesMonitorData restrict obj, double value){
4817
+ int64_t offset=0;
4818
+ offset+=136;
4819
+ *( double*)(( char*) obj+offset)=value;
4820
+ }
4821
+ static inline double* ParticlesMonitorData_getp__rot_s_rad_no_frame(ParticlesMonitorData restrict obj){
4822
+ int64_t offset=0;
4823
+ offset+=136;
4824
+ return ( double*)(( char*) obj+offset);
4825
+ }
4826
+ static inline double ParticlesMonitorData_get_rot_shift_anchor(const ParticlesMonitorData restrict obj){
4827
+ int64_t offset=0;
4828
+ offset+=144;
4829
+ return *( double*)(( char*) obj+offset);
4830
+ }
4831
+ static inline void ParticlesMonitorData_set_rot_shift_anchor(ParticlesMonitorData restrict obj, double value){
4832
+ int64_t offset=0;
4833
+ offset+=144;
4834
+ *( double*)(( char*) obj+offset)=value;
4835
+ }
4836
+ static inline double* ParticlesMonitorData_getp_rot_shift_anchor(ParticlesMonitorData restrict obj){
4837
+ int64_t offset=0;
4838
+ offset+=144;
4839
+ return ( double*)(( char*) obj+offset);
4840
+ }
4841
+ #endif
4842
+ // copyright ############################### //
4843
+ // This file is part of the Xtrack Package. //
4844
+ // Copyright (c) CERN, 2021. //
4845
+ // ######################################### //
4846
+
4847
+ #ifndef XTRACK_CONSTANTS_H
4848
+ #define XTRACK_CONSTANTS_H
4849
+
4850
+ #if !defined( C_LIGHT )
4851
+ #define C_LIGHT ( 299792458.0 )
4852
+ #endif /* !defined( C_LIGHT ) */
4853
+
4854
+ #if !defined( EPSILON_0 )
4855
+ #define EPSILON_0 (8.854187817620e-12)
4856
+ #endif /* !defined( EPSILON_0 ) */
4857
+
4858
+ #if !defined( PI )
4859
+ #define PI (3.1415926535897932384626433832795028841971693993751)
4860
+ #endif /* !defined( PI ) */
4861
+
4862
+ #if !defined( MU_0 )
4863
+ #define MU_0 (PI*4.0e-7)
4864
+ #endif /* !defined( MU_0 ) */
4865
+
4866
+ #if !defined( DEG2RAD )
4867
+ #define DEG2RAD (0.0174532925199432957692369076848861271344287188854)
4868
+ #endif /* !defiend( DEG2RAD ) */
4869
+
4870
+ #if !defined( RAD2DEG )
4871
+ #define RAD2DEG (57.29577951308232087679815481410517033240547246656442)
4872
+ #endif /* !defiend( RAD2DEG ) */
4873
+
4874
+ #if !defined( SQRT_PI )
4875
+ #define SQRT_PI (1.7724538509055160272981674833411451827975494561224)
4876
+ #endif /* !defined( SQRT_PI ) */
4877
+
4878
+ #if !defined( QELEM )
4879
+ #define QELEM (1.60217662e-19)
4880
+ #endif /* !defined( QELEM ) */
4881
+
4882
+ #if !defined( DBL_MAX )
4883
+ #define DBL_MAX (1.7976931348623158e+308)
4884
+ #endif /* !defined( DBL_MAX ) */
4885
+
4886
+ #if !defined( DBL_MIN )
4887
+ #define DBL_MIN (2.2250738585072014e-308)
4888
+ #endif /* !defined( DBL_MIN ) */
4889
+
4890
+ #if !defined( DBL_EPSILON )
4891
+ #define DBL_EPSILON (2.2204460492503131e-16)
4892
+ #endif /* !defined( DBL_EPSILON ) */
4893
+
4894
+ #if !defined( RADIUS_ELECTRON )
4895
+ #define RADIUS_ELECTRON (2.8179403262e-15)
4896
+ #endif /* !defined( RADIUS_ELECTRON ) */
4897
+
4898
+ #if !defined( MASS_ELECTRON )
4899
+ #define MASS_ELECTRON (9.1093837e-31)
4900
+ #endif /* !defined( MASS_ELECTRON ) */
4901
+
4902
+ #endif /* XTRACK_CONSTANTS_H */
4903
+
4904
+ // copyright ############################### //
4905
+ // This file is part of the Xtrack Package. //
4906
+ // Copyright (c) CERN, 2023. //
4907
+ // ######################################### //
4908
+
4909
+ #ifndef XTRACK_FUNCTIONS_H
4910
+ #define XTRACK_FUNCTIONS_H
4911
+
4912
+ #include <headers/track.h>
4913
+
4914
+
4915
+ GPUFUN
4916
+ void kill_all_particles(LocalParticle* part0, int64_t kill_state) {
4917
+ START_PER_PARTICLE_BLOCK(part0, part);
4918
+ LocalParticle_kill_particle(part, kill_state);
4919
+ END_PER_PARTICLE_BLOCK;
4920
+ }
4921
+
4922
+
4923
+ GPUFUN
4924
+ int8_t assert_tracking(LocalParticle* part, int64_t kill_state){
4925
+ // Whenever we are not tracking, e.g. in a twiss, the particle will be at_turn < 0.
4926
+ // We test this to distinguish genuine tracking from twiss.
4927
+ if (LocalParticle_get_at_turn(part) < 0){
4928
+ LocalParticle_kill_particle(part, kill_state);
4929
+ return 0;
4930
+ }
4931
+ return 1;
4932
+ }
4933
+
4934
+ #endif /* XTRACK_FUNCTIONS_H */
4935
+
4936
+ // copyright ############################### //
4937
+ // This file is part of the Xtrack Package. //
4938
+ // Copyright (c) CERN, 2023. //
4939
+ // ######################################### //
4940
+
4941
+ #ifndef XTRACK_PARTICLE_STATES_H
4942
+ #define XTRACK_PARTICLE_STATES_H
4943
+
4944
+ #define XT_LOST_ON_APERTURE 0
4945
+ #define XT_LOST_ON_LONG_CUT -2
4946
+ #define XT_LOST_ALL_E_IN_SYNRAD -10
4947
+ #define RNG_ERR_SEEDS_NOT_SET -20
4948
+ #define RNG_ERR_INVALID_TRACK -21
4949
+ #define RNG_ERR_RUTH_NOT_SET -22
4950
+ #define XT_INVALID_SLICE_TRANSFORM -40
4951
+ #define XT_INVALID_CURVED_SLICE_TRANSFORM -41
4952
+
4953
+ #endif /* XTRACK_PARTICLE_STATES_H */
4954
+
4955
+ // copyright ############################### //
4956
+ // This file is part of the Xtrack Package. //
4957
+ // Copyright (c) CERN, 2025. //
4958
+ // ######################################### //
4959
+ #ifndef XTRACK_TRACK_SROTATION_H
4960
+ #define XTRACK_TRACK_SROTATION_H
4961
+
4962
+ #include <headers/track.h>
4963
+
4964
+
4965
+ GPUFUN
4966
+ void SRotation_single_particle(LocalParticle* part, double sin_z, double cos_z)
4967
+ {
4968
+ double const x = LocalParticle_get_x(part);
4969
+ double const y = LocalParticle_get_y(part);
4970
+ double const px = LocalParticle_get_px(part);
4971
+ double const py = LocalParticle_get_py(part);
4972
+
4973
+ double const x_hat = cos_z * x + sin_z * y;
4974
+ double const y_hat = -sin_z * x + cos_z * y;
4975
+ double const px_hat = cos_z * px + sin_z * py;
4976
+ double const py_hat = -sin_z * px + cos_z * py;
4977
+
4978
+ LocalParticle_set_x(part, x_hat);
4979
+ LocalParticle_set_y(part, y_hat);
4980
+ LocalParticle_set_px(part, px_hat);
4981
+ LocalParticle_set_py(part, py_hat);
4982
+ }
4983
+
4984
+ #endif
4985
+ // copyright ############################### //
4986
+ // This file is part of the Xtrack Package. //
4987
+ // Copyright (c) CERN, 2021. //
4988
+ // ######################################### //
4989
+
4990
+ #ifndef XTRACK_TRACK_DRIFT_H
4991
+ #define XTRACK_TRACK_DRIFT_H
4992
+
4993
+
4994
+ GPUFUN
4995
+ void Drift_single_particle_expanded(LocalParticle* part, double length){
4996
+ double const rpp = LocalParticle_get_rpp(part);
4997
+ double const rv0v = 1./LocalParticle_get_rvv(part);
4998
+ double const xp = LocalParticle_get_px(part) * rpp;
4999
+ double const yp = LocalParticle_get_py(part) * rpp;
5000
+ double const dzeta = 1 - rv0v * ( 1. + ( xp*xp + yp*yp ) / 2. );
5001
+
5002
+ LocalParticle_add_to_x(part, xp * length );
5003
+ LocalParticle_add_to_y(part, yp * length );
5004
+ LocalParticle_add_to_s(part, length);
5005
+ LocalParticle_add_to_zeta(part, length * dzeta );
5006
+ }
5007
+
5008
+
5009
+ GPUFUN
5010
+ void Drift_single_particle_exact(LocalParticle* part, double length){
5011
+ double const px = LocalParticle_get_px(part);
5012
+ double const py = LocalParticle_get_py(part);
5013
+ double const rv0v = 1./LocalParticle_get_rvv(part);
5014
+ double const one_plus_delta = 1. + LocalParticle_get_delta(part);
5015
+
5016
+ double const one_over_pz = 1./sqrt(one_plus_delta*one_plus_delta
5017
+ - px * px - py * py);
5018
+ double const dzeta = 1 - rv0v * one_plus_delta * one_over_pz;
5019
+
5020
+ LocalParticle_add_to_x(part, px * one_over_pz * length);
5021
+ LocalParticle_add_to_y(part, py * one_over_pz * length);
5022
+ LocalParticle_add_to_zeta(part, dzeta * length);
5023
+ LocalParticle_add_to_s(part, length);
5024
+ }
5025
+
5026
+
5027
+ GPUFUN
5028
+ void Drift_single_particle(LocalParticle* part, double length){
5029
+ #ifndef XTRACK_USE_EXACT_DRIFTS
5030
+ Drift_single_particle_expanded(part, length);
5031
+ #else
5032
+ Drift_single_particle_exact(part, length);
5033
+ #endif
5034
+ }
5035
+
5036
+
5037
+ #endif /* XTRACK_TRACK_DRIFT_H */
5038
+
5039
+
5040
+ #ifndef XSTUITE_TRACK_FLAGS_H
5041
+ #define XSTUITE_TRACK_FLAGS_H
5042
+ #define XS_FLAG_BACKTRACK (0)
5043
+ #define XS_FLAG_KILL_CAVITY_KICK (2)
5044
+ #define XS_FLAG_IGNORE_GLOBAL_APERTURE (3)
5045
+ #define XS_FLAG_IGNORE_LOCAL_APERTURE (4)
5046
+ #define XS_FLAG_SR_TAPER (5)
5047
+ #define XS_FLAG_SR_KICK_SAME_AS_FIRST (6)
5048
+
5049
+ #endif // XSTUITE_TRACK_FLAGS_H
5050
+
5051
+ // copyright ############################### //
5052
+ // This file is part of the Xtrack Package. //
5053
+ // Copyright (c) CERN, 2021. //
5054
+ // ######################################### //
5055
+
5056
+ #ifndef XTRACK_MONITORS_H
5057
+ #define XTRACK_MONITORS_H
5058
+
5059
+ #include <headers/track.h>
5060
+
5061
+
5062
+ GPUFUN
5063
+ void ParticlesMonitor_track_local_particle(ParticlesMonitorData el,
5064
+ LocalParticle* part0){
5065
+
5066
+ int64_t const start_at_turn = ParticlesMonitorData_get_start_at_turn(el);
5067
+ int64_t const stop_at_turn = ParticlesMonitorData_get_stop_at_turn(el);
5068
+ int64_t const part_id_start = ParticlesMonitorData_get_part_id_start(el);
5069
+ int64_t const part_id_end= ParticlesMonitorData_get_part_id_end(el);
5070
+ int64_t const ebe_mode = ParticlesMonitorData_get_ebe_mode(el);
5071
+ int64_t const n_repetitions = ParticlesMonitorData_get_n_repetitions(el);
5072
+ int64_t const repetition_period = ParticlesMonitorData_get_repetition_period(el);
5073
+ ParticlesData data = ParticlesMonitorData_getp_data(el);
5074
+
5075
+ int64_t n_turns_record = stop_at_turn - start_at_turn;
5076
+
5077
+ START_PER_PARTICLE_BLOCK(part0, part);
5078
+ int64_t at_turn;
5079
+ if (ebe_mode){
5080
+ at_turn = LocalParticle_get_at_element(part);
5081
+ }
5082
+ else{
5083
+ if (LocalParticle_check_track_flag(part, XS_FLAG_BACKTRACK)) {
5084
+ return; // do not log (only ebe monitor supported for now in backtrack)
5085
+ }
5086
+ at_turn = LocalParticle_get_at_turn(part);
5087
+ }
5088
+ if (n_repetitions == 1){
5089
+ if (at_turn>=start_at_turn && at_turn<stop_at_turn){
5090
+ int64_t const particle_id = LocalParticle_get_particle_id(part);
5091
+ if (particle_id<part_id_end && particle_id>=part_id_start){
5092
+ int64_t const store_at =
5093
+ n_turns_record * (particle_id - part_id_start)
5094
+ + at_turn - start_at_turn;
5095
+ LocalParticle_to_Particles(part, data, store_at, 0);
5096
+ }
5097
+ }
5098
+ }
5099
+ else if (n_repetitions > 1){
5100
+ if (at_turn < start_at_turn){
5101
+ // return; //only_for_context cuda opencl
5102
+ break; //only_for_context cpu_serial cpu_openmp
5103
+ }
5104
+ int64_t const i_frame = (at_turn - start_at_turn) / repetition_period;
5105
+ if (i_frame < n_repetitions
5106
+ && at_turn >= start_at_turn + i_frame*repetition_period
5107
+ && at_turn < stop_at_turn + i_frame*repetition_period
5108
+ ){
5109
+ int64_t const particle_id = LocalParticle_get_particle_id(part);
5110
+ if (particle_id<part_id_end && particle_id>=part_id_start){
5111
+ int64_t const store_at =
5112
+ n_turns_record * (part_id_end - part_id_start) * i_frame
5113
+ + n_turns_record * (particle_id - part_id_start)
5114
+ + (at_turn - i_frame * repetition_period) - start_at_turn;
5115
+ LocalParticle_to_Particles(part, data, store_at, 0);
5116
+ }
5117
+ }
5118
+ }
5119
+
5120
+ #ifdef XSUITE_RESTORE_LOSS
5121
+ LocalParticle_set_state(part, 1);
5122
+ #endif
5123
+ END_PER_PARTICLE_BLOCK;
5124
+ }
5125
+
5126
+ #endif
5127
+
5128
+
5129
+
5130
+ #include <headers/track.h>
5131
+ #include <headers/particle_states.h>
5132
+ #include <beam_elements/elements_src/track_misalignments.h>
5133
+ GPUFUN void ParticlesMonitor_track_local_particle_with_transformations(ParticlesMonitorData el, LocalParticle* part0){
5134
+ // Transform to local frame
5135
+ double const _sin_rot_s = ParticlesMonitorData_get__sin_rot_s(el);
5136
+ if (_sin_rot_s > -2.) {
5137
+ double const _cos_rot_s = ParticlesMonitorData_get__cos_rot_s(el);
5138
+ double const rot_s_rad = atan2(_sin_rot_s, _cos_rot_s);
5139
+ double const shift_x = ParticlesMonitorData_get__shift_x(el);
5140
+ double const shift_y = ParticlesMonitorData_get__shift_y(el);
5141
+ double const shift_s = ParticlesMonitorData_get__shift_s(el);
5142
+ double const rot_x_rad = ParticlesMonitorData_get__rot_x_rad(el);
5143
+ double const rot_y_rad = ParticlesMonitorData_get__rot_y_rad(el);
5144
+ double const rot_s_rad_no_frame = ParticlesMonitorData_get__rot_s_rad_no_frame(el);
5145
+ double const length = 0.;
5146
+ ;
5147
+ double const anchor = ParticlesMonitorData_get_rot_shift_anchor(el);
5148
+ int8_t const backtrack = LocalParticle_check_track_flag(part0, XS_FLAG_BACKTRACK);
5149
+
5150
+ if (!backtrack) {
5151
+ track_misalignment_entry_straight(part0, shift_x, shift_y, shift_s, rot_y_rad, rot_x_rad, rot_s_rad_no_frame, anchor, length, rot_s_rad, backtrack); } else {
5152
+ track_misalignment_exit_straight(part0, shift_x, shift_y, shift_s, rot_y_rad, rot_x_rad, rot_s_rad_no_frame, anchor, length, rot_s_rad, backtrack);
5153
+ }
5154
+
5155
+ /* Spin tracking is disabled by the synrad compile flag */
5156
+ #ifndef XTRACK_MULTIPOLE_NO_SYNRAD
5157
+ // Rotate spin
5158
+
5159
+ {
5160
+ // const int64_t XT_part_block_start_idx = part0->ipart; //only_for_context cpu_openmp
5161
+ // const int64_t XT_part_block_end_idx = part0->endpart; //only_for_context cpu_openmp
5162
+
5163
+ const int64_t XT_part_block_start_idx = 0; //only_for_context cpu_serial
5164
+ const int64_t XT_part_block_end_idx = LocalParticle_get__num_active_particles(part0); //only_for_context cpu_serial
5165
+
5166
+ //#pragma omp simd // TODO: currently does not work, needs investigating
5167
+ for (int64_t XT_part_block_ii = XT_part_block_start_idx; XT_part_block_ii<XT_part_block_end_idx; XT_part_block_ii++) { //only_for_context cpu_openmp cpu_serial
5168
+
5169
+ LocalParticle lpart = *part0; //only_for_context cpu_serial cpu_openmp
5170
+ LocalParticle* part = &lpart; //only_for_context cpu_serial cpu_openmp
5171
+ part->ipart = XT_part_block_ii; //only_for_context cpu_serial cpu_openmp
5172
+
5173
+ // LocalParticle* part = part0; //only_for_context opencl cuda
5174
+
5175
+ // if (LocalParticle_get_state(part) > 0) { //only_for_context cpu_openmp
5176
+
5177
+ double const spin_x_0 = LocalParticle_get_spin_x(part);
5178
+ double const spin_y_0 = LocalParticle_get_spin_y(part);
5179
+ if ((spin_x_0 != 0) || (spin_y_0 != 0)){
5180
+ double const spin_x_1 = _cos_rot_s*spin_x_0 + _sin_rot_s*spin_y_0;
5181
+ double const spin_y_1 = -_sin_rot_s*spin_x_0 + _cos_rot_s*spin_y_0;
5182
+ LocalParticle_set_spin_x(part, spin_x_1);
5183
+ LocalParticle_set_spin_y(part, spin_y_1);
5184
+ }
5185
+
5186
+ // } //only_for_context cpu_openmp
5187
+ } //only_for_context cpu_serial cpu_openmp
5188
+ }
5189
+
5190
+ #endif
5191
+
5192
+ }
5193
+ ParticlesMonitor_track_local_particle(el, part0);
5194
+ // Transform back to global frame
5195
+ if (_sin_rot_s > -2.) {
5196
+ double const _cos_rot_s = ParticlesMonitorData_get__cos_rot_s(el);
5197
+ double const rot_s_rad = atan2(_sin_rot_s, _cos_rot_s);
5198
+ double const shift_x = ParticlesMonitorData_get__shift_x(el);
5199
+ double const shift_y = ParticlesMonitorData_get__shift_y(el);
5200
+ double const shift_s = ParticlesMonitorData_get__shift_s(el);
5201
+ double const rot_x_rad = ParticlesMonitorData_get__rot_x_rad(el);
5202
+ double const rot_y_rad = ParticlesMonitorData_get__rot_y_rad(el);
5203
+ double const rot_s_rad_no_frame = ParticlesMonitorData_get__rot_s_rad_no_frame(el);
5204
+ double const length = 0.;
5205
+ ;
5206
+ double const anchor = ParticlesMonitorData_get_rot_shift_anchor(el);
5207
+ int8_t const backtrack = LocalParticle_check_track_flag(part0, XS_FLAG_BACKTRACK);
5208
+
5209
+ /* Spin tracking is disabled by the synrad compile flag */
5210
+ #ifndef XTRACK_MULTIPOLE_NO_SYNRAD
5211
+ // Rotate spin
5212
+
5213
+ {
5214
+ // const int64_t XT_part_block_start_idx = part0->ipart; //only_for_context cpu_openmp
5215
+ // const int64_t XT_part_block_end_idx = part0->endpart; //only_for_context cpu_openmp
5216
+
5217
+ const int64_t XT_part_block_start_idx = 0; //only_for_context cpu_serial
5218
+ const int64_t XT_part_block_end_idx = LocalParticle_get__num_active_particles(part0); //only_for_context cpu_serial
5219
+
5220
+ //#pragma omp simd // TODO: currently does not work, needs investigating
5221
+ for (int64_t XT_part_block_ii = XT_part_block_start_idx; XT_part_block_ii<XT_part_block_end_idx; XT_part_block_ii++) { //only_for_context cpu_openmp cpu_serial
5222
+
5223
+ LocalParticle lpart = *part0; //only_for_context cpu_serial cpu_openmp
5224
+ LocalParticle* part = &lpart; //only_for_context cpu_serial cpu_openmp
5225
+ part->ipart = XT_part_block_ii; //only_for_context cpu_serial cpu_openmp
5226
+
5227
+ // LocalParticle* part = part0; //only_for_context opencl cuda
5228
+
5229
+ // if (LocalParticle_get_state(part) > 0) { //only_for_context cpu_openmp
5230
+
5231
+ double const spin_x_0 = LocalParticle_get_spin_x(part);
5232
+ double const spin_y_0 = LocalParticle_get_spin_y(part);
5233
+ if ((spin_x_0 != 0) || (spin_y_0 != 0)){
5234
+ double const spin_x_1 = _cos_rot_s*spin_x_0 - _sin_rot_s*spin_y_0;
5235
+ double const spin_y_1 = _sin_rot_s*spin_x_0 + _cos_rot_s*spin_y_0;
5236
+ LocalParticle_set_spin_x(part, spin_x_1);
5237
+ LocalParticle_set_spin_y(part, spin_y_1);
5238
+ }
5239
+
5240
+ // } //only_for_context cpu_openmp
5241
+ } //only_for_context cpu_serial cpu_openmp
5242
+ }
5243
+
5244
+ #endif
5245
+
5246
+ if (!backtrack) {
5247
+ track_misalignment_exit_straight(part0, shift_x, shift_y, shift_s, rot_y_rad, rot_x_rad, rot_s_rad_no_frame, anchor, length, rot_s_rad, backtrack); } else {
5248
+ track_misalignment_entry_straight(part0, shift_x, shift_y, shift_s, rot_y_rad, rot_x_rad, rot_s_rad_no_frame, anchor, length, rot_s_rad, backtrack);
5249
+ }
5106
5250
  }
5107
- static inline ArrNUint32 ParticlesMonitorData_getp_data__rng_s4(ParticlesMonitorData restrict obj){
5108
- int64_t offset=0;
5109
- offset+=152;
5110
- offset+=*( int64_t*)(( char*) obj+offset+304);
5111
- return (ArrNUint32)(( char*) obj+offset);
5112
5251
  }
5113
- static inline int64_t ParticlesMonitorData_len_data__rng_s4(ParticlesMonitorData restrict obj){
5252
+
5253
+
5254
+
5255
+ void ParticlesMonitor_track_particles(
5256
+ ParticlesMonitorData el,
5257
+
5258
+ ParticlesData particles,
5259
+
5260
+ int64_t flag_increment_at_element,
5261
+ int8_t* io_buffer){
5262
+
5263
+ // #define CONTEXT_OPENMP //only_for_context cpu_openmp
5264
+ #ifdef CONTEXT_OPENMP
5265
+ const int64_t capacity = ParticlesData_get__capacity(particles);
5266
+ const int num_threads = omp_get_max_threads();
5267
+
5268
+ #ifndef XT_OMP_SKIP_REORGANIZE
5269
+ const int64_t num_particles_to_track = ParticlesData_get__num_active_particles(particles);
5270
+
5271
+ {
5272
+ LocalParticle lpart;
5273
+ lpart.io_buffer = io_buffer;
5274
+ Particles_to_LocalParticle(particles, &lpart, 0, capacity);
5275
+ check_is_active(&lpart);
5276
+ count_reorganized_particles(&lpart);
5277
+ LocalParticle_to_Particles(&lpart, particles, 0, capacity);
5278
+ }
5279
+ #else // When we skip reorganize, we cannot just batch active particles
5280
+ const int64_t num_particles_to_track = capacity;
5281
+ #endif
5282
+
5283
+ const int64_t chunk_size = (num_particles_to_track + num_threads - 1)/num_threads; // ceil division
5284
+ #endif // CONTEXT_OPENMP
5285
+
5286
+ // #pragma omp parallel for //only_for_context cpu_openmp
5287
+ // for (int64_t batch_id = 0; batch_id < num_threads; batch_id++) { //only_for_context cpu_openmp
5288
+ LocalParticle lpart;
5289
+ lpart.io_buffer = io_buffer;
5290
+ lpart.track_flags = 0;
5291
+ // int64_t part_id = batch_id * chunk_size; //only_for_context cpu_openmp
5292
+ // int64_t end_id = (batch_id + 1) * chunk_size; //only_for_context cpu_openmp
5293
+ // if (end_id > num_particles_to_track) end_id = num_particles_to_track; //only_for_context cpu_openmp
5294
+
5295
+ int64_t part_id = 0; //only_for_context cpu_serial
5296
+ // int64_t part_id = blockDim.x * blockIdx.x + threadIdx.x; //only_for_context cuda
5297
+ // int64_t part_id = get_global_id(0); //only_for_context opencl
5298
+ int64_t end_id = 0; // unused outside of openmp //only_for_context cpu_serial cuda opencl
5299
+
5300
+ int64_t part_capacity = ParticlesData_get__capacity(particles);
5301
+ if (part_id<part_capacity){
5302
+ Particles_to_LocalParticle(particles, &lpart, part_id, end_id);
5303
+ if (check_is_active(&lpart)>0){
5304
+ ParticlesMonitor_track_local_particle_with_transformations(el, &lpart);
5305
+
5306
+ }
5307
+ if (check_is_active(&lpart)>0 && flag_increment_at_element){
5308
+ increment_at_element(&lpart, 1);
5309
+ }
5310
+ }
5311
+ // } //only_for_context cpu_openmp
5312
+
5313
+ // On OpenMP we want to additionally by default reorganize all
5314
+ // the particles.
5315
+ // #ifndef XT_OMP_SKIP_REORGANIZE //only_for_context cpu_openmp
5316
+ // LocalParticle lpart; //only_for_context cpu_openmp
5317
+ // lpart.io_buffer = io_buffer; //only_for_context cpu_openmp
5318
+ // Particles_to_LocalParticle(particles, &lpart, 0, capacity);//only_for_context cpu_openmp
5319
+ // check_is_active(&lpart); //only_for_context cpu_openmp
5320
+ // #endif //only_for_context cpu_openmp
5321
+ }
5322
+
5323
+ #ifndef XOBJ_TYPEDEF_RandomUniformData
5324
+ #define XOBJ_TYPEDEF_RandomUniformData
5325
+ typedef struct RandomUniformData_s * RandomUniformData;
5326
+ static inline RandomUniformData RandomUniformData_getp(RandomUniformData restrict obj){
5114
5327
  int64_t offset=0;
5115
- offset+=152;
5116
- offset+=*( int64_t*)(( char*) obj+offset+304);
5117
- int64_t* arr = ( int64_t*)(( char*) obj+offset);
5118
- return arr[1];
5328
+ return (RandomUniformData)(( char*) obj+offset);
5119
5329
  }
5120
- static inline uint32_t ParticlesMonitorData_get_data__rng_s4(const ParticlesMonitorData restrict obj, int64_t i0){
5330
+ static inline uint8_t RandomUniformData_get__dummy(const RandomUniformData restrict obj){
5121
5331
  int64_t offset=0;
5122
- offset+=152;
5123
- offset+=*( int64_t*)(( char*) obj+offset+304);
5124
- offset+=16+i0*4;
5125
- return *( uint32_t*)(( char*) obj+offset);
5332
+ return *(( uint8_t*) obj+offset);
5126
5333
  }
5127
- static inline void ParticlesMonitorData_set_data__rng_s4(ParticlesMonitorData restrict obj, int64_t i0, uint32_t value){
5334
+ static inline void RandomUniformData_set__dummy(RandomUniformData restrict obj, uint8_t value){
5128
5335
  int64_t offset=0;
5129
- offset+=152;
5130
- offset+=*( int64_t*)(( char*) obj+offset+304);
5131
- offset+=16+i0*4;
5132
- *( uint32_t*)(( char*) obj+offset)=value;
5336
+ *(( uint8_t*) obj+offset)=value;
5133
5337
  }
5134
- static inline uint32_t* ParticlesMonitorData_getp1_data__rng_s4(ParticlesMonitorData restrict obj, int64_t i0){
5338
+ static inline uint8_t* RandomUniformData_getp__dummy(RandomUniformData restrict obj){
5135
5339
  int64_t offset=0;
5136
- offset+=152;
5137
- offset+=*( int64_t*)(( char*) obj+offset+304);
5138
- offset+=16+i0*4;
5139
- return ( uint32_t*)(( char*) obj+offset);
5340
+ return ( uint8_t*)(( char*) obj+offset);
5140
5341
  }
5141
- static inline double ParticlesMonitorData_get__sin_rot_s(const ParticlesMonitorData restrict obj){
5342
+ static inline double RandomUniformData_get__sin_rot_s(const RandomUniformData restrict obj){
5142
5343
  int64_t offset=0;
5143
- offset+=80;
5344
+ offset+=8;
5144
5345
  return *( double*)(( char*) obj+offset);
5145
5346
  }
5146
- static inline void ParticlesMonitorData_set__sin_rot_s(ParticlesMonitorData restrict obj, double value){
5347
+ static inline void RandomUniformData_set__sin_rot_s(RandomUniformData restrict obj, double value){
5147
5348
  int64_t offset=0;
5148
- offset+=80;
5349
+ offset+=8;
5149
5350
  *( double*)(( char*) obj+offset)=value;
5150
5351
  }
5151
- static inline double* ParticlesMonitorData_getp__sin_rot_s(ParticlesMonitorData restrict obj){
5352
+ static inline double* RandomUniformData_getp__sin_rot_s(RandomUniformData restrict obj){
5152
5353
  int64_t offset=0;
5153
- offset+=80;
5354
+ offset+=8;
5154
5355
  return ( double*)(( char*) obj+offset);
5155
5356
  }
5156
- static inline double ParticlesMonitorData_get__cos_rot_s(const ParticlesMonitorData restrict obj){
5357
+ static inline double RandomUniformData_get__cos_rot_s(const RandomUniformData restrict obj){
5157
5358
  int64_t offset=0;
5158
- offset+=88;
5359
+ offset+=16;
5159
5360
  return *( double*)(( char*) obj+offset);
5160
5361
  }
5161
- static inline void ParticlesMonitorData_set__cos_rot_s(ParticlesMonitorData restrict obj, double value){
5362
+ static inline void RandomUniformData_set__cos_rot_s(RandomUniformData restrict obj, double value){
5162
5363
  int64_t offset=0;
5163
- offset+=88;
5364
+ offset+=16;
5164
5365
  *( double*)(( char*) obj+offset)=value;
5165
5366
  }
5166
- static inline double* ParticlesMonitorData_getp__cos_rot_s(ParticlesMonitorData restrict obj){
5367
+ static inline double* RandomUniformData_getp__cos_rot_s(RandomUniformData restrict obj){
5167
5368
  int64_t offset=0;
5168
- offset+=88;
5369
+ offset+=16;
5169
5370
  return ( double*)(( char*) obj+offset);
5170
5371
  }
5171
- static inline double ParticlesMonitorData_get__shift_x(const ParticlesMonitorData restrict obj){
5372
+ static inline double RandomUniformData_get__shift_x(const RandomUniformData restrict obj){
5172
5373
  int64_t offset=0;
5173
- offset+=96;
5374
+ offset+=24;
5174
5375
  return *( double*)(( char*) obj+offset);
5175
5376
  }
5176
- static inline void ParticlesMonitorData_set__shift_x(ParticlesMonitorData restrict obj, double value){
5377
+ static inline void RandomUniformData_set__shift_x(RandomUniformData restrict obj, double value){
5177
5378
  int64_t offset=0;
5178
- offset+=96;
5379
+ offset+=24;
5179
5380
  *( double*)(( char*) obj+offset)=value;
5180
5381
  }
5181
- static inline double* ParticlesMonitorData_getp__shift_x(ParticlesMonitorData restrict obj){
5382
+ static inline double* RandomUniformData_getp__shift_x(RandomUniformData restrict obj){
5182
5383
  int64_t offset=0;
5183
- offset+=96;
5384
+ offset+=24;
5184
5385
  return ( double*)(( char*) obj+offset);
5185
5386
  }
5186
- static inline double ParticlesMonitorData_get__shift_y(const ParticlesMonitorData restrict obj){
5387
+ static inline double RandomUniformData_get__shift_y(const RandomUniformData restrict obj){
5187
5388
  int64_t offset=0;
5188
- offset+=104;
5389
+ offset+=32;
5189
5390
  return *( double*)(( char*) obj+offset);
5190
5391
  }
5191
- static inline void ParticlesMonitorData_set__shift_y(ParticlesMonitorData restrict obj, double value){
5392
+ static inline void RandomUniformData_set__shift_y(RandomUniformData restrict obj, double value){
5192
5393
  int64_t offset=0;
5193
- offset+=104;
5394
+ offset+=32;
5194
5395
  *( double*)(( char*) obj+offset)=value;
5195
5396
  }
5196
- static inline double* ParticlesMonitorData_getp__shift_y(ParticlesMonitorData restrict obj){
5397
+ static inline double* RandomUniformData_getp__shift_y(RandomUniformData restrict obj){
5197
5398
  int64_t offset=0;
5198
- offset+=104;
5399
+ offset+=32;
5199
5400
  return ( double*)(( char*) obj+offset);
5200
5401
  }
5201
- static inline double ParticlesMonitorData_get__shift_s(const ParticlesMonitorData restrict obj){
5402
+ static inline double RandomUniformData_get__shift_s(const RandomUniformData restrict obj){
5202
5403
  int64_t offset=0;
5203
- offset+=112;
5404
+ offset+=40;
5204
5405
  return *( double*)(( char*) obj+offset);
5205
5406
  }
5206
- static inline void ParticlesMonitorData_set__shift_s(ParticlesMonitorData restrict obj, double value){
5407
+ static inline void RandomUniformData_set__shift_s(RandomUniformData restrict obj, double value){
5207
5408
  int64_t offset=0;
5208
- offset+=112;
5409
+ offset+=40;
5209
5410
  *( double*)(( char*) obj+offset)=value;
5210
5411
  }
5211
- static inline double* ParticlesMonitorData_getp__shift_s(ParticlesMonitorData restrict obj){
5412
+ static inline double* RandomUniformData_getp__shift_s(RandomUniformData restrict obj){
5212
5413
  int64_t offset=0;
5213
- offset+=112;
5414
+ offset+=40;
5214
5415
  return ( double*)(( char*) obj+offset);
5215
5416
  }
5216
- static inline double ParticlesMonitorData_get__rot_x_rad(const ParticlesMonitorData restrict obj){
5417
+ static inline double RandomUniformData_get__rot_x_rad(const RandomUniformData restrict obj){
5217
5418
  int64_t offset=0;
5218
- offset+=120;
5419
+ offset+=48;
5219
5420
  return *( double*)(( char*) obj+offset);
5220
5421
  }
5221
- static inline void ParticlesMonitorData_set__rot_x_rad(ParticlesMonitorData restrict obj, double value){
5422
+ static inline void RandomUniformData_set__rot_x_rad(RandomUniformData restrict obj, double value){
5222
5423
  int64_t offset=0;
5223
- offset+=120;
5424
+ offset+=48;
5224
5425
  *( double*)(( char*) obj+offset)=value;
5225
5426
  }
5226
- static inline double* ParticlesMonitorData_getp__rot_x_rad(ParticlesMonitorData restrict obj){
5427
+ static inline double* RandomUniformData_getp__rot_x_rad(RandomUniformData restrict obj){
5227
5428
  int64_t offset=0;
5228
- offset+=120;
5429
+ offset+=48;
5229
5430
  return ( double*)(( char*) obj+offset);
5230
5431
  }
5231
- static inline double ParticlesMonitorData_get__rot_y_rad(const ParticlesMonitorData restrict obj){
5432
+ static inline double RandomUniformData_get__rot_y_rad(const RandomUniformData restrict obj){
5232
5433
  int64_t offset=0;
5233
- offset+=128;
5434
+ offset+=56;
5234
5435
  return *( double*)(( char*) obj+offset);
5235
5436
  }
5236
- static inline void ParticlesMonitorData_set__rot_y_rad(ParticlesMonitorData restrict obj, double value){
5437
+ static inline void RandomUniformData_set__rot_y_rad(RandomUniformData restrict obj, double value){
5237
5438
  int64_t offset=0;
5238
- offset+=128;
5439
+ offset+=56;
5239
5440
  *( double*)(( char*) obj+offset)=value;
5240
5441
  }
5241
- static inline double* ParticlesMonitorData_getp__rot_y_rad(ParticlesMonitorData restrict obj){
5442
+ static inline double* RandomUniformData_getp__rot_y_rad(RandomUniformData restrict obj){
5242
5443
  int64_t offset=0;
5243
- offset+=128;
5444
+ offset+=56;
5244
5445
  return ( double*)(( char*) obj+offset);
5245
5446
  }
5246
- static inline double ParticlesMonitorData_get__rot_s_rad_no_frame(const ParticlesMonitorData restrict obj){
5447
+ static inline double RandomUniformData_get__rot_s_rad_no_frame(const RandomUniformData restrict obj){
5247
5448
  int64_t offset=0;
5248
- offset+=136;
5449
+ offset+=64;
5249
5450
  return *( double*)(( char*) obj+offset);
5250
5451
  }
5251
- static inline void ParticlesMonitorData_set__rot_s_rad_no_frame(ParticlesMonitorData restrict obj, double value){
5452
+ static inline void RandomUniformData_set__rot_s_rad_no_frame(RandomUniformData restrict obj, double value){
5252
5453
  int64_t offset=0;
5253
- offset+=136;
5454
+ offset+=64;
5254
5455
  *( double*)(( char*) obj+offset)=value;
5255
5456
  }
5256
- static inline double* ParticlesMonitorData_getp__rot_s_rad_no_frame(ParticlesMonitorData restrict obj){
5457
+ static inline double* RandomUniformData_getp__rot_s_rad_no_frame(RandomUniformData restrict obj){
5257
5458
  int64_t offset=0;
5258
- offset+=136;
5459
+ offset+=64;
5259
5460
  return ( double*)(( char*) obj+offset);
5260
5461
  }
5261
- static inline double ParticlesMonitorData_get_rot_shift_anchor(const ParticlesMonitorData restrict obj){
5462
+ static inline double RandomUniformData_get_rot_shift_anchor(const RandomUniformData restrict obj){
5262
5463
  int64_t offset=0;
5263
- offset+=144;
5464
+ offset+=72;
5264
5465
  return *( double*)(( char*) obj+offset);
5265
5466
  }
5266
- static inline void ParticlesMonitorData_set_rot_shift_anchor(ParticlesMonitorData restrict obj, double value){
5467
+ static inline void RandomUniformData_set_rot_shift_anchor(RandomUniformData restrict obj, double value){
5267
5468
  int64_t offset=0;
5268
- offset+=144;
5469
+ offset+=72;
5269
5470
  *( double*)(( char*) obj+offset)=value;
5270
5471
  }
5271
- static inline double* ParticlesMonitorData_getp_rot_shift_anchor(ParticlesMonitorData restrict obj){
5472
+ static inline double* RandomUniformData_getp_rot_shift_anchor(RandomUniformData restrict obj){
5272
5473
  int64_t offset=0;
5273
- offset+=144;
5474
+ offset+=72;
5274
5475
  return ( double*)(( char*) obj+offset);
5275
5476
  }
5276
5477
  #endif
@@ -5397,301 +5598,100 @@ int8_t assert_tracking(LocalParticle* part, int64_t kill_state){
5397
5598
  #include <headers/track.h>
5398
5599
 
5399
5600
 
5400
- GPUFUN
5401
- void SRotation_single_particle(LocalParticle* part, double sin_z, double cos_z)
5402
- {
5403
- double const x = LocalParticle_get_x(part);
5404
- double const y = LocalParticle_get_y(part);
5405
- double const px = LocalParticle_get_px(part);
5406
- double const py = LocalParticle_get_py(part);
5407
-
5408
- double const x_hat = cos_z * x + sin_z * y;
5409
- double const y_hat = -sin_z * x + cos_z * y;
5410
- double const px_hat = cos_z * px + sin_z * py;
5411
- double const py_hat = -sin_z * px + cos_z * py;
5412
-
5413
- LocalParticle_set_x(part, x_hat);
5414
- LocalParticle_set_y(part, y_hat);
5415
- LocalParticle_set_px(part, px_hat);
5416
- LocalParticle_set_py(part, py_hat);
5417
- }
5418
-
5419
- #endif
5420
- // copyright ############################### //
5421
- // This file is part of the Xtrack Package. //
5422
- // Copyright (c) CERN, 2021. //
5423
- // ######################################### //
5424
-
5425
- #ifndef XTRACK_TRACK_DRIFT_H
5426
- #define XTRACK_TRACK_DRIFT_H
5427
-
5428
-
5429
- GPUFUN
5430
- void Drift_single_particle_expanded(LocalParticle* part, double length){
5431
- double const rpp = LocalParticle_get_rpp(part);
5432
- double const rv0v = 1./LocalParticle_get_rvv(part);
5433
- double const xp = LocalParticle_get_px(part) * rpp;
5434
- double const yp = LocalParticle_get_py(part) * rpp;
5435
- double const dzeta = 1 - rv0v * ( 1. + ( xp*xp + yp*yp ) / 2. );
5436
-
5437
- LocalParticle_add_to_x(part, xp * length );
5438
- LocalParticle_add_to_y(part, yp * length );
5439
- LocalParticle_add_to_s(part, length);
5440
- LocalParticle_add_to_zeta(part, length * dzeta );
5441
- }
5442
-
5443
-
5444
- GPUFUN
5445
- void Drift_single_particle_exact(LocalParticle* part, double length){
5446
- double const px = LocalParticle_get_px(part);
5447
- double const py = LocalParticle_get_py(part);
5448
- double const rv0v = 1./LocalParticle_get_rvv(part);
5449
- double const one_plus_delta = 1. + LocalParticle_get_delta(part);
5450
-
5451
- double const one_over_pz = 1./sqrt(one_plus_delta*one_plus_delta
5452
- - px * px - py * py);
5453
- double const dzeta = 1 - rv0v * one_plus_delta * one_over_pz;
5454
-
5455
- LocalParticle_add_to_x(part, px * one_over_pz * length);
5456
- LocalParticle_add_to_y(part, py * one_over_pz * length);
5457
- LocalParticle_add_to_zeta(part, dzeta * length);
5458
- LocalParticle_add_to_s(part, length);
5459
- }
5460
-
5461
-
5462
- GPUFUN
5463
- void Drift_single_particle(LocalParticle* part, double length){
5464
- #ifndef XTRACK_USE_EXACT_DRIFTS
5465
- Drift_single_particle_expanded(part, length);
5466
- #else
5467
- Drift_single_particle_exact(part, length);
5468
- #endif
5469
- }
5470
-
5471
-
5472
- #endif /* XTRACK_TRACK_DRIFT_H */
5473
-
5474
-
5475
- #ifndef XSTUITE_TRACK_FLAGS_H
5476
- #define XSTUITE_TRACK_FLAGS_H
5477
- #define XS_FLAG_BACKTRACK (0)
5478
- #define XS_FLAG_KILL_CAVITY_KICK (2)
5479
- #define XS_FLAG_IGNORE_GLOBAL_APERTURE (3)
5480
- #define XS_FLAG_IGNORE_LOCAL_APERTURE (4)
5481
- #define XS_FLAG_SR_TAPER (5)
5482
- #define XS_FLAG_SR_KICK_SAME_AS_FIRST (6)
5483
-
5484
- #endif // XSTUITE_TRACK_FLAGS_H
5485
-
5486
- // copyright ############################### //
5487
- // This file is part of the Xtrack Package. //
5488
- // Copyright (c) CERN, 2021. //
5489
- // ######################################### //
5490
-
5491
- #ifndef XTRACK_MONITORS_H
5492
- #define XTRACK_MONITORS_H
5493
-
5494
- #include <headers/track.h>
5495
-
5496
-
5497
- GPUFUN
5498
- void ParticlesMonitor_track_local_particle(ParticlesMonitorData el,
5499
- LocalParticle* part0){
5500
-
5501
- int64_t const start_at_turn = ParticlesMonitorData_get_start_at_turn(el);
5502
- int64_t const stop_at_turn = ParticlesMonitorData_get_stop_at_turn(el);
5503
- int64_t const part_id_start = ParticlesMonitorData_get_part_id_start(el);
5504
- int64_t const part_id_end= ParticlesMonitorData_get_part_id_end(el);
5505
- int64_t const ebe_mode = ParticlesMonitorData_get_ebe_mode(el);
5506
- int64_t const n_repetitions = ParticlesMonitorData_get_n_repetitions(el);
5507
- int64_t const repetition_period = ParticlesMonitorData_get_repetition_period(el);
5508
- ParticlesData data = ParticlesMonitorData_getp_data(el);
5509
-
5510
- int64_t n_turns_record = stop_at_turn - start_at_turn;
5511
-
5512
- START_PER_PARTICLE_BLOCK(part0, part);
5513
- int64_t at_turn;
5514
- if (ebe_mode){
5515
- at_turn = LocalParticle_get_at_element(part);
5516
- }
5517
- else{
5518
- if (LocalParticle_check_track_flag(part, XS_FLAG_BACKTRACK)) {
5519
- return; // do not log (only ebe monitor supported for now in backtrack)
5520
- }
5521
- at_turn = LocalParticle_get_at_turn(part);
5522
- }
5523
- if (n_repetitions == 1){
5524
- if (at_turn>=start_at_turn && at_turn<stop_at_turn){
5525
- int64_t const particle_id = LocalParticle_get_particle_id(part);
5526
- if (particle_id<part_id_end && particle_id>=part_id_start){
5527
- int64_t const store_at =
5528
- n_turns_record * (particle_id - part_id_start)
5529
- + at_turn - start_at_turn;
5530
- LocalParticle_to_Particles(part, data, store_at, 0);
5531
- }
5532
- }
5533
- }
5534
- else if (n_repetitions > 1){
5535
- if (at_turn < start_at_turn){
5536
- // return; //only_for_context cuda opencl
5537
- break; //only_for_context cpu_serial cpu_openmp
5538
- }
5539
- int64_t const i_frame = (at_turn - start_at_turn) / repetition_period;
5540
- if (i_frame < n_repetitions
5541
- && at_turn >= start_at_turn + i_frame*repetition_period
5542
- && at_turn < stop_at_turn + i_frame*repetition_period
5543
- ){
5544
- int64_t const particle_id = LocalParticle_get_particle_id(part);
5545
- if (particle_id<part_id_end && particle_id>=part_id_start){
5546
- int64_t const store_at =
5547
- n_turns_record * (part_id_end - part_id_start) * i_frame
5548
- + n_turns_record * (particle_id - part_id_start)
5549
- + (at_turn - i_frame * repetition_period) - start_at_turn;
5550
- LocalParticle_to_Particles(part, data, store_at, 0);
5551
- }
5552
- }
5553
- }
5554
-
5555
- #ifdef XSUITE_RESTORE_LOSS
5556
- LocalParticle_set_state(part, 1);
5557
- #endif
5558
- END_PER_PARTICLE_BLOCK;
5559
- }
5560
-
5561
- #endif
5562
-
5563
-
5564
-
5565
- #include <headers/track.h>
5566
- #include <headers/particle_states.h>
5567
- #include <beam_elements/elements_src/track_misalignments.h>
5568
- GPUFUN void ParticlesMonitor_track_local_particle_with_transformations(ParticlesMonitorData el, LocalParticle* part0){
5569
- // Transform to local frame
5570
- double const _sin_rot_s = ParticlesMonitorData_get__sin_rot_s(el);
5571
- if (_sin_rot_s > -2.) {
5572
- double const _cos_rot_s = ParticlesMonitorData_get__cos_rot_s(el);
5573
- double const rot_s_rad = atan2(_sin_rot_s, _cos_rot_s);
5574
- double const shift_x = ParticlesMonitorData_get__shift_x(el);
5575
- double const shift_y = ParticlesMonitorData_get__shift_y(el);
5576
- double const shift_s = ParticlesMonitorData_get__shift_s(el);
5577
- double const rot_x_rad = ParticlesMonitorData_get__rot_x_rad(el);
5578
- double const rot_y_rad = ParticlesMonitorData_get__rot_y_rad(el);
5579
- double const rot_s_rad_no_frame = ParticlesMonitorData_get__rot_s_rad_no_frame(el);
5580
- double const length = 0.;
5581
- ;
5582
- double const anchor = ParticlesMonitorData_get_rot_shift_anchor(el);
5583
- int8_t const backtrack = LocalParticle_check_track_flag(part0, XS_FLAG_BACKTRACK);
5584
-
5585
- if (!backtrack) {
5586
- track_misalignment_entry_straight(part0, shift_x, shift_y, shift_s, rot_y_rad, rot_x_rad, rot_s_rad_no_frame, anchor, length, rot_s_rad, backtrack); } else {
5587
- track_misalignment_exit_straight(part0, shift_x, shift_y, shift_s, rot_y_rad, rot_x_rad, rot_s_rad_no_frame, anchor, length, rot_s_rad, backtrack);
5588
- }
5589
-
5590
- /* Spin tracking is disabled by the synrad compile flag */
5591
- #ifndef XTRACK_MULTIPOLE_NO_SYNRAD
5592
- // Rotate spin
5593
-
5594
- {
5595
- // const int64_t XT_part_block_start_idx = part0->ipart; //only_for_context cpu_openmp
5596
- // const int64_t XT_part_block_end_idx = part0->endpart; //only_for_context cpu_openmp
5597
-
5598
- const int64_t XT_part_block_start_idx = 0; //only_for_context cpu_serial
5599
- const int64_t XT_part_block_end_idx = LocalParticle_get__num_active_particles(part0); //only_for_context cpu_serial
5600
-
5601
- //#pragma omp simd // TODO: currently does not work, needs investigating
5602
- for (int64_t XT_part_block_ii = XT_part_block_start_idx; XT_part_block_ii<XT_part_block_end_idx; XT_part_block_ii++) { //only_for_context cpu_openmp cpu_serial
5601
+ GPUFUN
5602
+ void SRotation_single_particle(LocalParticle* part, double sin_z, double cos_z)
5603
+ {
5604
+ double const x = LocalParticle_get_x(part);
5605
+ double const y = LocalParticle_get_y(part);
5606
+ double const px = LocalParticle_get_px(part);
5607
+ double const py = LocalParticle_get_py(part);
5603
5608
 
5604
- LocalParticle lpart = *part0; //only_for_context cpu_serial cpu_openmp
5605
- LocalParticle* part = &lpart; //only_for_context cpu_serial cpu_openmp
5606
- part->ipart = XT_part_block_ii; //only_for_context cpu_serial cpu_openmp
5609
+ double const x_hat = cos_z * x + sin_z * y;
5610
+ double const y_hat = -sin_z * x + cos_z * y;
5611
+ double const px_hat = cos_z * px + sin_z * py;
5612
+ double const py_hat = -sin_z * px + cos_z * py;
5607
5613
 
5608
- // LocalParticle* part = part0; //only_for_context opencl cuda
5614
+ LocalParticle_set_x(part, x_hat);
5615
+ LocalParticle_set_y(part, y_hat);
5616
+ LocalParticle_set_px(part, px_hat);
5617
+ LocalParticle_set_py(part, py_hat);
5618
+ }
5609
5619
 
5610
- // if (LocalParticle_get_state(part) > 0) { //only_for_context cpu_openmp
5620
+ #endif
5621
+ // copyright ############################### //
5622
+ // This file is part of the Xtrack Package. //
5623
+ // Copyright (c) CERN, 2021. //
5624
+ // ######################################### //
5611
5625
 
5612
- double const spin_x_0 = LocalParticle_get_spin_x(part);
5613
- double const spin_y_0 = LocalParticle_get_spin_y(part);
5614
- if ((spin_x_0 != 0) || (spin_y_0 != 0)){
5615
- double const spin_x_1 = _cos_rot_s*spin_x_0 + _sin_rot_s*spin_y_0;
5616
- double const spin_y_1 = -_sin_rot_s*spin_x_0 + _cos_rot_s*spin_y_0;
5617
- LocalParticle_set_spin_x(part, spin_x_1);
5618
- LocalParticle_set_spin_y(part, spin_y_1);
5619
- }
5626
+ #ifndef XTRACK_TRACK_DRIFT_H
5627
+ #define XTRACK_TRACK_DRIFT_H
5620
5628
 
5621
- // } //only_for_context cpu_openmp
5622
- } //only_for_context cpu_serial cpu_openmp
5623
- }
5624
5629
 
5625
- #endif
5630
+ GPUFUN
5631
+ void Drift_single_particle_expanded(LocalParticle* part, double length){
5632
+ double const rpp = LocalParticle_get_rpp(part);
5633
+ double const rv0v = 1./LocalParticle_get_rvv(part);
5634
+ double const xp = LocalParticle_get_px(part) * rpp;
5635
+ double const yp = LocalParticle_get_py(part) * rpp;
5636
+ double const dzeta = 1 - rv0v * ( 1. + ( xp*xp + yp*yp ) / 2. );
5626
5637
 
5638
+ LocalParticle_add_to_x(part, xp * length );
5639
+ LocalParticle_add_to_y(part, yp * length );
5640
+ LocalParticle_add_to_s(part, length);
5641
+ LocalParticle_add_to_zeta(part, length * dzeta );
5627
5642
  }
5628
- ParticlesMonitor_track_local_particle(el, part0);
5629
- // Transform back to global frame
5630
- if (_sin_rot_s > -2.) {
5631
- double const _cos_rot_s = ParticlesMonitorData_get__cos_rot_s(el);
5632
- double const rot_s_rad = atan2(_sin_rot_s, _cos_rot_s);
5633
- double const shift_x = ParticlesMonitorData_get__shift_x(el);
5634
- double const shift_y = ParticlesMonitorData_get__shift_y(el);
5635
- double const shift_s = ParticlesMonitorData_get__shift_s(el);
5636
- double const rot_x_rad = ParticlesMonitorData_get__rot_x_rad(el);
5637
- double const rot_y_rad = ParticlesMonitorData_get__rot_y_rad(el);
5638
- double const rot_s_rad_no_frame = ParticlesMonitorData_get__rot_s_rad_no_frame(el);
5639
- double const length = 0.;
5640
- ;
5641
- double const anchor = ParticlesMonitorData_get_rot_shift_anchor(el);
5642
- int8_t const backtrack = LocalParticle_check_track_flag(part0, XS_FLAG_BACKTRACK);
5643
5643
 
5644
- /* Spin tracking is disabled by the synrad compile flag */
5645
- #ifndef XTRACK_MULTIPOLE_NO_SYNRAD
5646
- // Rotate spin
5647
5644
 
5648
- {
5649
- // const int64_t XT_part_block_start_idx = part0->ipart; //only_for_context cpu_openmp
5650
- // const int64_t XT_part_block_end_idx = part0->endpart; //only_for_context cpu_openmp
5645
+ GPUFUN
5646
+ void Drift_single_particle_exact(LocalParticle* part, double length){
5647
+ double const px = LocalParticle_get_px(part);
5648
+ double const py = LocalParticle_get_py(part);
5649
+ double const rv0v = 1./LocalParticle_get_rvv(part);
5650
+ double const one_plus_delta = 1. + LocalParticle_get_delta(part);
5651
5651
 
5652
- const int64_t XT_part_block_start_idx = 0; //only_for_context cpu_serial
5653
- const int64_t XT_part_block_end_idx = LocalParticle_get__num_active_particles(part0); //only_for_context cpu_serial
5652
+ double const one_over_pz = 1./sqrt(one_plus_delta*one_plus_delta
5653
+ - px * px - py * py);
5654
+ double const dzeta = 1 - rv0v * one_plus_delta * one_over_pz;
5654
5655
 
5655
- //#pragma omp simd // TODO: currently does not work, needs investigating
5656
- for (int64_t XT_part_block_ii = XT_part_block_start_idx; XT_part_block_ii<XT_part_block_end_idx; XT_part_block_ii++) { //only_for_context cpu_openmp cpu_serial
5656
+ LocalParticle_add_to_x(part, px * one_over_pz * length);
5657
+ LocalParticle_add_to_y(part, py * one_over_pz * length);
5658
+ LocalParticle_add_to_zeta(part, dzeta * length);
5659
+ LocalParticle_add_to_s(part, length);
5660
+ }
5657
5661
 
5658
- LocalParticle lpart = *part0; //only_for_context cpu_serial cpu_openmp
5659
- LocalParticle* part = &lpart; //only_for_context cpu_serial cpu_openmp
5660
- part->ipart = XT_part_block_ii; //only_for_context cpu_serial cpu_openmp
5661
5662
 
5662
- // LocalParticle* part = part0; //only_for_context opencl cuda
5663
+ GPUFUN
5664
+ void Drift_single_particle(LocalParticle* part, double length){
5665
+ #ifndef XTRACK_USE_EXACT_DRIFTS
5666
+ Drift_single_particle_expanded(part, length);
5667
+ #else
5668
+ Drift_single_particle_exact(part, length);
5669
+ #endif
5670
+ }
5663
5671
 
5664
- // if (LocalParticle_get_state(part) > 0) { //only_for_context cpu_openmp
5665
5672
 
5666
- double const spin_x_0 = LocalParticle_get_spin_x(part);
5667
- double const spin_y_0 = LocalParticle_get_spin_y(part);
5668
- if ((spin_x_0 != 0) || (spin_y_0 != 0)){
5669
- double const spin_x_1 = _cos_rot_s*spin_x_0 - _sin_rot_s*spin_y_0;
5670
- double const spin_y_1 = _sin_rot_s*spin_x_0 + _cos_rot_s*spin_y_0;
5671
- LocalParticle_set_spin_x(part, spin_x_1);
5672
- LocalParticle_set_spin_y(part, spin_y_1);
5673
- }
5673
+ #endif /* XTRACK_TRACK_DRIFT_H */
5674
5674
 
5675
- // } //only_for_context cpu_openmp
5676
- } //only_for_context cpu_serial cpu_openmp
5677
- }
5678
5675
 
5679
- #endif
5676
+ #ifndef XSTUITE_TRACK_FLAGS_H
5677
+ #define XSTUITE_TRACK_FLAGS_H
5678
+ #define XS_FLAG_BACKTRACK (0)
5679
+ #define XS_FLAG_KILL_CAVITY_KICK (2)
5680
+ #define XS_FLAG_IGNORE_GLOBAL_APERTURE (3)
5681
+ #define XS_FLAG_IGNORE_LOCAL_APERTURE (4)
5682
+ #define XS_FLAG_SR_TAPER (5)
5683
+ #define XS_FLAG_SR_KICK_SAME_AS_FIRST (6)
5680
5684
 
5681
- if (!backtrack) {
5682
- track_misalignment_exit_straight(part0, shift_x, shift_y, shift_s, rot_y_rad, rot_x_rad, rot_s_rad_no_frame, anchor, length, rot_s_rad, backtrack); } else {
5683
- track_misalignment_entry_straight(part0, shift_x, shift_y, shift_s, rot_y_rad, rot_x_rad, rot_s_rad_no_frame, anchor, length, rot_s_rad, backtrack);
5684
- }
5685
- }
5686
- }
5685
+ #endif // XSTUITE_TRACK_FLAGS_H
5687
5686
 
5687
+ #include <random/random_src/uniform.h>
5688
5688
 
5689
5689
 
5690
- void ParticlesMonitor_track_particles(
5691
- ParticlesMonitorData el,
5690
+ void sample_uniform(
5691
+ RandomUniformData el,
5692
5692
 
5693
5693
  ParticlesData particles,
5694
-
5694
+ double* samples, int64_t n_samples_per_seed,
5695
5695
  int64_t flag_increment_at_element,
5696
5696
  int8_t* io_buffer){
5697
5697
 
@@ -5736,7 +5736,7 @@ if (_sin_rot_s > -2.) {
5736
5736
  if (part_id<part_capacity){
5737
5737
  Particles_to_LocalParticle(particles, &lpart, part_id, end_id);
5738
5738
  if (check_is_active(&lpart)>0){
5739
- ParticlesMonitor_track_local_particle_with_transformations(el, &lpart);
5739
+ RandomUniform_sample(el, &lpart, samples, n_samples_per_seed);
5740
5740
 
5741
5741
  }
5742
5742
  if (check_is_active(&lpart)>0 && flag_increment_at_element){
@@ -5755,6 +5755,25 @@ if (_sin_rot_s > -2.) {
5755
5755
  // #endif //only_for_context cpu_openmp
5756
5756
  }
5757
5757
 
5758
+ #ifndef XOBJ_TYPEDEF_ElementRefClass
5759
+ #define XOBJ_TYPEDEF_ElementRefClass
5760
+ typedef struct ElementRefClass_s * ElementRefClass;
5761
+ enum ElementRefClass_e{ElementRefClass_ParticlesMonitorData_t};
5762
+ static inline ElementRefClass ElementRefClass_getp(ElementRefClass restrict obj){
5763
+ int64_t offset=0;
5764
+ return (ElementRefClass)(( char*) obj+offset);
5765
+ }
5766
+ static inline int64_t ElementRefClass_typeid(const ElementRefClass restrict obj){
5767
+ int64_t offset=0;
5768
+ offset+=8;
5769
+ return *( int64_t*)(( char*) obj+offset);
5770
+ }
5771
+ static inline void* ElementRefClass_member(const ElementRefClass restrict obj){
5772
+ int64_t offset=0;
5773
+ offset+=*( int64_t*)(( char*) obj+offset);
5774
+ return ( void*)(( char*) obj+offset);
5775
+ }
5776
+ #endif
5758
5777
  #ifndef XOBJ_TYPEDEF_RandomNormalData
5759
5778
  #define XOBJ_TYPEDEF_RandomNormalData
5760
5779
  typedef struct RandomNormalData_s * RandomNormalData;
@@ -6190,158 +6209,218 @@ void Drift_single_particle(LocalParticle* part, double length){
6190
6209
  // #endif //only_for_context cpu_openmp
6191
6210
  }
6192
6211
 
6193
- #ifndef XOBJ_TYPEDEF_RandomExponentialData
6194
- #define XOBJ_TYPEDEF_RandomExponentialData
6195
- typedef struct RandomExponentialData_s * RandomExponentialData;
6196
- static inline RandomExponentialData RandomExponentialData_getp(RandomExponentialData restrict obj){
6212
+ #ifndef XOBJ_TYPEDEF_RandomRutherfordData
6213
+ #define XOBJ_TYPEDEF_RandomRutherfordData
6214
+ typedef struct RandomRutherfordData_s * RandomRutherfordData;
6215
+ static inline RandomRutherfordData RandomRutherfordData_getp(RandomRutherfordData restrict obj){
6197
6216
  int64_t offset=0;
6198
- return (RandomExponentialData)(( char*) obj+offset);
6217
+ return (RandomRutherfordData)(( char*) obj+offset);
6199
6218
  }
6200
- static inline uint8_t RandomExponentialData_get__dummy(const RandomExponentialData restrict obj){
6219
+ static inline double RandomRutherfordData_get_lower_val(const RandomRutherfordData restrict obj){
6201
6220
  int64_t offset=0;
6202
- return *(( uint8_t*) obj+offset);
6221
+ return *( double*)(( char*) obj+offset);
6203
6222
  }
6204
- static inline void RandomExponentialData_set__dummy(RandomExponentialData restrict obj, uint8_t value){
6223
+ static inline void RandomRutherfordData_set_lower_val(RandomRutherfordData restrict obj, double value){
6205
6224
  int64_t offset=0;
6206
- *(( uint8_t*) obj+offset)=value;
6225
+ *( double*)(( char*) obj+offset)=value;
6207
6226
  }
6208
- static inline uint8_t* RandomExponentialData_getp__dummy(RandomExponentialData restrict obj){
6227
+ static inline double* RandomRutherfordData_getp_lower_val(RandomRutherfordData restrict obj){
6209
6228
  int64_t offset=0;
6210
- return ( uint8_t*)(( char*) obj+offset);
6229
+ return ( double*)(( char*) obj+offset);
6211
6230
  }
6212
- static inline double RandomExponentialData_get__sin_rot_s(const RandomExponentialData restrict obj){
6231
+ static inline double RandomRutherfordData_get_upper_val(const RandomRutherfordData restrict obj){
6213
6232
  int64_t offset=0;
6214
6233
  offset+=8;
6215
6234
  return *( double*)(( char*) obj+offset);
6216
6235
  }
6217
- static inline void RandomExponentialData_set__sin_rot_s(RandomExponentialData restrict obj, double value){
6236
+ static inline void RandomRutherfordData_set_upper_val(RandomRutherfordData restrict obj, double value){
6218
6237
  int64_t offset=0;
6219
6238
  offset+=8;
6220
6239
  *( double*)(( char*) obj+offset)=value;
6221
6240
  }
6222
- static inline double* RandomExponentialData_getp__sin_rot_s(RandomExponentialData restrict obj){
6241
+ static inline double* RandomRutherfordData_getp_upper_val(RandomRutherfordData restrict obj){
6223
6242
  int64_t offset=0;
6224
6243
  offset+=8;
6225
6244
  return ( double*)(( char*) obj+offset);
6226
6245
  }
6227
- static inline double RandomExponentialData_get__cos_rot_s(const RandomExponentialData restrict obj){
6246
+ static inline double RandomRutherfordData_get_A(const RandomRutherfordData restrict obj){
6228
6247
  int64_t offset=0;
6229
6248
  offset+=16;
6230
6249
  return *( double*)(( char*) obj+offset);
6231
6250
  }
6232
- static inline void RandomExponentialData_set__cos_rot_s(RandomExponentialData restrict obj, double value){
6251
+ static inline void RandomRutherfordData_set_A(RandomRutherfordData restrict obj, double value){
6233
6252
  int64_t offset=0;
6234
6253
  offset+=16;
6235
6254
  *( double*)(( char*) obj+offset)=value;
6236
6255
  }
6237
- static inline double* RandomExponentialData_getp__cos_rot_s(RandomExponentialData restrict obj){
6256
+ static inline double* RandomRutherfordData_getp_A(RandomRutherfordData restrict obj){
6238
6257
  int64_t offset=0;
6239
6258
  offset+=16;
6240
6259
  return ( double*)(( char*) obj+offset);
6241
6260
  }
6242
- static inline double RandomExponentialData_get__shift_x(const RandomExponentialData restrict obj){
6261
+ static inline double RandomRutherfordData_get_B(const RandomRutherfordData restrict obj){
6243
6262
  int64_t offset=0;
6244
6263
  offset+=24;
6245
6264
  return *( double*)(( char*) obj+offset);
6246
6265
  }
6247
- static inline void RandomExponentialData_set__shift_x(RandomExponentialData restrict obj, double value){
6266
+ static inline void RandomRutherfordData_set_B(RandomRutherfordData restrict obj, double value){
6267
+ int64_t offset=0;
6268
+ offset+=24;
6269
+ *( double*)(( char*) obj+offset)=value;
6270
+ }
6271
+ static inline double* RandomRutherfordData_getp_B(RandomRutherfordData restrict obj){
6272
+ int64_t offset=0;
6273
+ offset+=24;
6274
+ return ( double*)(( char*) obj+offset);
6275
+ }
6276
+ static inline int8_t RandomRutherfordData_get_Newton_iterations(const RandomRutherfordData restrict obj){
6277
+ int64_t offset=0;
6278
+ offset+=32;
6279
+ return *(( int8_t*) obj+offset);
6280
+ }
6281
+ static inline void RandomRutherfordData_set_Newton_iterations(RandomRutherfordData restrict obj, int8_t value){
6282
+ int64_t offset=0;
6283
+ offset+=32;
6284
+ *(( int8_t*) obj+offset)=value;
6285
+ }
6286
+ static inline int8_t* RandomRutherfordData_getp_Newton_iterations(RandomRutherfordData restrict obj){
6287
+ int64_t offset=0;
6288
+ offset+=32;
6289
+ return ( int8_t*)(( char*) obj+offset);
6290
+ }
6291
+ static inline double RandomRutherfordData_get__sin_rot_s(const RandomRutherfordData restrict obj){
6292
+ int64_t offset=0;
6293
+ offset+=40;
6294
+ return *( double*)(( char*) obj+offset);
6295
+ }
6296
+ static inline void RandomRutherfordData_set__sin_rot_s(RandomRutherfordData restrict obj, double value){
6297
+ int64_t offset=0;
6298
+ offset+=40;
6299
+ *( double*)(( char*) obj+offset)=value;
6300
+ }
6301
+ static inline double* RandomRutherfordData_getp__sin_rot_s(RandomRutherfordData restrict obj){
6302
+ int64_t offset=0;
6303
+ offset+=40;
6304
+ return ( double*)(( char*) obj+offset);
6305
+ }
6306
+ static inline double RandomRutherfordData_get__cos_rot_s(const RandomRutherfordData restrict obj){
6307
+ int64_t offset=0;
6308
+ offset+=48;
6309
+ return *( double*)(( char*) obj+offset);
6310
+ }
6311
+ static inline void RandomRutherfordData_set__cos_rot_s(RandomRutherfordData restrict obj, double value){
6312
+ int64_t offset=0;
6313
+ offset+=48;
6314
+ *( double*)(( char*) obj+offset)=value;
6315
+ }
6316
+ static inline double* RandomRutherfordData_getp__cos_rot_s(RandomRutherfordData restrict obj){
6317
+ int64_t offset=0;
6318
+ offset+=48;
6319
+ return ( double*)(( char*) obj+offset);
6320
+ }
6321
+ static inline double RandomRutherfordData_get__shift_x(const RandomRutherfordData restrict obj){
6322
+ int64_t offset=0;
6323
+ offset+=56;
6324
+ return *( double*)(( char*) obj+offset);
6325
+ }
6326
+ static inline void RandomRutherfordData_set__shift_x(RandomRutherfordData restrict obj, double value){
6248
6327
  int64_t offset=0;
6249
- offset+=24;
6328
+ offset+=56;
6250
6329
  *( double*)(( char*) obj+offset)=value;
6251
6330
  }
6252
- static inline double* RandomExponentialData_getp__shift_x(RandomExponentialData restrict obj){
6331
+ static inline double* RandomRutherfordData_getp__shift_x(RandomRutherfordData restrict obj){
6253
6332
  int64_t offset=0;
6254
- offset+=24;
6333
+ offset+=56;
6255
6334
  return ( double*)(( char*) obj+offset);
6256
6335
  }
6257
- static inline double RandomExponentialData_get__shift_y(const RandomExponentialData restrict obj){
6336
+ static inline double RandomRutherfordData_get__shift_y(const RandomRutherfordData restrict obj){
6258
6337
  int64_t offset=0;
6259
- offset+=32;
6338
+ offset+=64;
6260
6339
  return *( double*)(( char*) obj+offset);
6261
6340
  }
6262
- static inline void RandomExponentialData_set__shift_y(RandomExponentialData restrict obj, double value){
6341
+ static inline void RandomRutherfordData_set__shift_y(RandomRutherfordData restrict obj, double value){
6263
6342
  int64_t offset=0;
6264
- offset+=32;
6343
+ offset+=64;
6265
6344
  *( double*)(( char*) obj+offset)=value;
6266
6345
  }
6267
- static inline double* RandomExponentialData_getp__shift_y(RandomExponentialData restrict obj){
6346
+ static inline double* RandomRutherfordData_getp__shift_y(RandomRutherfordData restrict obj){
6268
6347
  int64_t offset=0;
6269
- offset+=32;
6348
+ offset+=64;
6270
6349
  return ( double*)(( char*) obj+offset);
6271
6350
  }
6272
- static inline double RandomExponentialData_get__shift_s(const RandomExponentialData restrict obj){
6351
+ static inline double RandomRutherfordData_get__shift_s(const RandomRutherfordData restrict obj){
6273
6352
  int64_t offset=0;
6274
- offset+=40;
6353
+ offset+=72;
6275
6354
  return *( double*)(( char*) obj+offset);
6276
6355
  }
6277
- static inline void RandomExponentialData_set__shift_s(RandomExponentialData restrict obj, double value){
6356
+ static inline void RandomRutherfordData_set__shift_s(RandomRutherfordData restrict obj, double value){
6278
6357
  int64_t offset=0;
6279
- offset+=40;
6358
+ offset+=72;
6280
6359
  *( double*)(( char*) obj+offset)=value;
6281
6360
  }
6282
- static inline double* RandomExponentialData_getp__shift_s(RandomExponentialData restrict obj){
6361
+ static inline double* RandomRutherfordData_getp__shift_s(RandomRutherfordData restrict obj){
6283
6362
  int64_t offset=0;
6284
- offset+=40;
6363
+ offset+=72;
6285
6364
  return ( double*)(( char*) obj+offset);
6286
6365
  }
6287
- static inline double RandomExponentialData_get__rot_x_rad(const RandomExponentialData restrict obj){
6366
+ static inline double RandomRutherfordData_get__rot_x_rad(const RandomRutherfordData restrict obj){
6288
6367
  int64_t offset=0;
6289
- offset+=48;
6368
+ offset+=80;
6290
6369
  return *( double*)(( char*) obj+offset);
6291
6370
  }
6292
- static inline void RandomExponentialData_set__rot_x_rad(RandomExponentialData restrict obj, double value){
6371
+ static inline void RandomRutherfordData_set__rot_x_rad(RandomRutherfordData restrict obj, double value){
6293
6372
  int64_t offset=0;
6294
- offset+=48;
6373
+ offset+=80;
6295
6374
  *( double*)(( char*) obj+offset)=value;
6296
6375
  }
6297
- static inline double* RandomExponentialData_getp__rot_x_rad(RandomExponentialData restrict obj){
6376
+ static inline double* RandomRutherfordData_getp__rot_x_rad(RandomRutherfordData restrict obj){
6298
6377
  int64_t offset=0;
6299
- offset+=48;
6378
+ offset+=80;
6300
6379
  return ( double*)(( char*) obj+offset);
6301
6380
  }
6302
- static inline double RandomExponentialData_get__rot_y_rad(const RandomExponentialData restrict obj){
6381
+ static inline double RandomRutherfordData_get__rot_y_rad(const RandomRutherfordData restrict obj){
6303
6382
  int64_t offset=0;
6304
- offset+=56;
6383
+ offset+=88;
6305
6384
  return *( double*)(( char*) obj+offset);
6306
6385
  }
6307
- static inline void RandomExponentialData_set__rot_y_rad(RandomExponentialData restrict obj, double value){
6386
+ static inline void RandomRutherfordData_set__rot_y_rad(RandomRutherfordData restrict obj, double value){
6308
6387
  int64_t offset=0;
6309
- offset+=56;
6388
+ offset+=88;
6310
6389
  *( double*)(( char*) obj+offset)=value;
6311
6390
  }
6312
- static inline double* RandomExponentialData_getp__rot_y_rad(RandomExponentialData restrict obj){
6391
+ static inline double* RandomRutherfordData_getp__rot_y_rad(RandomRutherfordData restrict obj){
6313
6392
  int64_t offset=0;
6314
- offset+=56;
6393
+ offset+=88;
6315
6394
  return ( double*)(( char*) obj+offset);
6316
6395
  }
6317
- static inline double RandomExponentialData_get__rot_s_rad_no_frame(const RandomExponentialData restrict obj){
6396
+ static inline double RandomRutherfordData_get__rot_s_rad_no_frame(const RandomRutherfordData restrict obj){
6318
6397
  int64_t offset=0;
6319
- offset+=64;
6398
+ offset+=96;
6320
6399
  return *( double*)(( char*) obj+offset);
6321
6400
  }
6322
- static inline void RandomExponentialData_set__rot_s_rad_no_frame(RandomExponentialData restrict obj, double value){
6401
+ static inline void RandomRutherfordData_set__rot_s_rad_no_frame(RandomRutherfordData restrict obj, double value){
6323
6402
  int64_t offset=0;
6324
- offset+=64;
6403
+ offset+=96;
6325
6404
  *( double*)(( char*) obj+offset)=value;
6326
6405
  }
6327
- static inline double* RandomExponentialData_getp__rot_s_rad_no_frame(RandomExponentialData restrict obj){
6406
+ static inline double* RandomRutherfordData_getp__rot_s_rad_no_frame(RandomRutherfordData restrict obj){
6328
6407
  int64_t offset=0;
6329
- offset+=64;
6408
+ offset+=96;
6330
6409
  return ( double*)(( char*) obj+offset);
6331
6410
  }
6332
- static inline double RandomExponentialData_get_rot_shift_anchor(const RandomExponentialData restrict obj){
6411
+ static inline double RandomRutherfordData_get_rot_shift_anchor(const RandomRutherfordData restrict obj){
6333
6412
  int64_t offset=0;
6334
- offset+=72;
6413
+ offset+=104;
6335
6414
  return *( double*)(( char*) obj+offset);
6336
6415
  }
6337
- static inline void RandomExponentialData_set_rot_shift_anchor(RandomExponentialData restrict obj, double value){
6416
+ static inline void RandomRutherfordData_set_rot_shift_anchor(RandomRutherfordData restrict obj, double value){
6338
6417
  int64_t offset=0;
6339
- offset+=72;
6418
+ offset+=104;
6340
6419
  *( double*)(( char*) obj+offset)=value;
6341
6420
  }
6342
- static inline double* RandomExponentialData_getp_rot_shift_anchor(RandomExponentialData restrict obj){
6421
+ static inline double* RandomRutherfordData_getp_rot_shift_anchor(RandomRutherfordData restrict obj){
6343
6422
  int64_t offset=0;
6344
- offset+=72;
6423
+ offset+=104;
6345
6424
  return ( double*)(( char*) obj+offset);
6346
6425
  }
6347
6426
  #endif
@@ -6554,11 +6633,11 @@ void Drift_single_particle(LocalParticle* part, double length){
6554
6633
 
6555
6634
  #endif // XSTUITE_TRACK_FLAGS_H
6556
6635
 
6557
- #include <random/random_src/exponential.h>
6636
+ #include <random/random_src/rutherford.h>
6558
6637
 
6559
6638
 
6560
- void sample_exp(
6561
- RandomExponentialData el,
6639
+ void sample_ruth(
6640
+ RandomRutherfordData el,
6562
6641
 
6563
6642
  ParticlesData particles,
6564
6643
  double* samples, int64_t n_samples_per_seed,
@@ -6606,7 +6685,7 @@ void Drift_single_particle(LocalParticle* part, double length){
6606
6685
  if (part_id<part_capacity){
6607
6686
  Particles_to_LocalParticle(particles, &lpart, part_id, end_id);
6608
6687
  if (check_is_active(&lpart)>0){
6609
- RandomExponential_sample(el, &lpart, samples, n_samples_per_seed);
6688
+ RandomRutherford_sample(el, &lpart, samples, n_samples_per_seed);
6610
6689
 
6611
6690
  }
6612
6691
  if (check_is_active(&lpart)>0 && flag_increment_at_element){
@@ -6625,219 +6704,159 @@ void Drift_single_particle(LocalParticle* part, double length){
6625
6704
  // #endif //only_for_context cpu_openmp
6626
6705
  }
6627
6706
 
6628
- #ifndef XOBJ_TYPEDEF_RandomRutherfordData
6629
- #define XOBJ_TYPEDEF_RandomRutherfordData
6630
- typedef struct RandomRutherfordData_s * RandomRutherfordData;
6631
- static inline RandomRutherfordData RandomRutherfordData_getp(RandomRutherfordData restrict obj){
6707
+ #ifndef XOBJ_TYPEDEF_RandomExponentialData
6708
+ #define XOBJ_TYPEDEF_RandomExponentialData
6709
+ typedef struct RandomExponentialData_s * RandomExponentialData;
6710
+ static inline RandomExponentialData RandomExponentialData_getp(RandomExponentialData restrict obj){
6632
6711
  int64_t offset=0;
6633
- return (RandomRutherfordData)(( char*) obj+offset);
6712
+ return (RandomExponentialData)(( char*) obj+offset);
6634
6713
  }
6635
- static inline double RandomRutherfordData_get_lower_val(const RandomRutherfordData restrict obj){
6714
+ static inline uint8_t RandomExponentialData_get__dummy(const RandomExponentialData restrict obj){
6636
6715
  int64_t offset=0;
6637
- return *( double*)(( char*) obj+offset);
6716
+ return *(( uint8_t*) obj+offset);
6638
6717
  }
6639
- static inline void RandomRutherfordData_set_lower_val(RandomRutherfordData restrict obj, double value){
6718
+ static inline void RandomExponentialData_set__dummy(RandomExponentialData restrict obj, uint8_t value){
6640
6719
  int64_t offset=0;
6641
- *( double*)(( char*) obj+offset)=value;
6720
+ *(( uint8_t*) obj+offset)=value;
6642
6721
  }
6643
- static inline double* RandomRutherfordData_getp_lower_val(RandomRutherfordData restrict obj){
6722
+ static inline uint8_t* RandomExponentialData_getp__dummy(RandomExponentialData restrict obj){
6644
6723
  int64_t offset=0;
6645
- return ( double*)(( char*) obj+offset);
6724
+ return ( uint8_t*)(( char*) obj+offset);
6646
6725
  }
6647
- static inline double RandomRutherfordData_get_upper_val(const RandomRutherfordData restrict obj){
6726
+ static inline double RandomExponentialData_get__sin_rot_s(const RandomExponentialData restrict obj){
6648
6727
  int64_t offset=0;
6649
6728
  offset+=8;
6650
6729
  return *( double*)(( char*) obj+offset);
6651
6730
  }
6652
- static inline void RandomRutherfordData_set_upper_val(RandomRutherfordData restrict obj, double value){
6731
+ static inline void RandomExponentialData_set__sin_rot_s(RandomExponentialData restrict obj, double value){
6653
6732
  int64_t offset=0;
6654
6733
  offset+=8;
6655
6734
  *( double*)(( char*) obj+offset)=value;
6656
6735
  }
6657
- static inline double* RandomRutherfordData_getp_upper_val(RandomRutherfordData restrict obj){
6736
+ static inline double* RandomExponentialData_getp__sin_rot_s(RandomExponentialData restrict obj){
6658
6737
  int64_t offset=0;
6659
6738
  offset+=8;
6660
6739
  return ( double*)(( char*) obj+offset);
6661
6740
  }
6662
- static inline double RandomRutherfordData_get_A(const RandomRutherfordData restrict obj){
6741
+ static inline double RandomExponentialData_get__cos_rot_s(const RandomExponentialData restrict obj){
6663
6742
  int64_t offset=0;
6664
6743
  offset+=16;
6665
6744
  return *( double*)(( char*) obj+offset);
6666
6745
  }
6667
- static inline void RandomRutherfordData_set_A(RandomRutherfordData restrict obj, double value){
6746
+ static inline void RandomExponentialData_set__cos_rot_s(RandomExponentialData restrict obj, double value){
6668
6747
  int64_t offset=0;
6669
6748
  offset+=16;
6670
6749
  *( double*)(( char*) obj+offset)=value;
6671
6750
  }
6672
- static inline double* RandomRutherfordData_getp_A(RandomRutherfordData restrict obj){
6751
+ static inline double* RandomExponentialData_getp__cos_rot_s(RandomExponentialData restrict obj){
6673
6752
  int64_t offset=0;
6674
6753
  offset+=16;
6675
6754
  return ( double*)(( char*) obj+offset);
6676
6755
  }
6677
- static inline double RandomRutherfordData_get_B(const RandomRutherfordData restrict obj){
6756
+ static inline double RandomExponentialData_get__shift_x(const RandomExponentialData restrict obj){
6678
6757
  int64_t offset=0;
6679
6758
  offset+=24;
6680
6759
  return *( double*)(( char*) obj+offset);
6681
6760
  }
6682
- static inline void RandomRutherfordData_set_B(RandomRutherfordData restrict obj, double value){
6761
+ static inline void RandomExponentialData_set__shift_x(RandomExponentialData restrict obj, double value){
6683
6762
  int64_t offset=0;
6684
6763
  offset+=24;
6685
6764
  *( double*)(( char*) obj+offset)=value;
6686
6765
  }
6687
- static inline double* RandomRutherfordData_getp_B(RandomRutherfordData restrict obj){
6766
+ static inline double* RandomExponentialData_getp__shift_x(RandomExponentialData restrict obj){
6688
6767
  int64_t offset=0;
6689
6768
  offset+=24;
6690
6769
  return ( double*)(( char*) obj+offset);
6691
6770
  }
6692
- static inline int8_t RandomRutherfordData_get_Newton_iterations(const RandomRutherfordData restrict obj){
6771
+ static inline double RandomExponentialData_get__shift_y(const RandomExponentialData restrict obj){
6693
6772
  int64_t offset=0;
6694
6773
  offset+=32;
6695
- return *(( int8_t*) obj+offset);
6774
+ return *( double*)(( char*) obj+offset);
6696
6775
  }
6697
- static inline void RandomRutherfordData_set_Newton_iterations(RandomRutherfordData restrict obj, int8_t value){
6776
+ static inline void RandomExponentialData_set__shift_y(RandomExponentialData restrict obj, double value){
6698
6777
  int64_t offset=0;
6699
6778
  offset+=32;
6700
- *(( int8_t*) obj+offset)=value;
6779
+ *( double*)(( char*) obj+offset)=value;
6701
6780
  }
6702
- static inline int8_t* RandomRutherfordData_getp_Newton_iterations(RandomRutherfordData restrict obj){
6781
+ static inline double* RandomExponentialData_getp__shift_y(RandomExponentialData restrict obj){
6703
6782
  int64_t offset=0;
6704
6783
  offset+=32;
6705
- return ( int8_t*)(( char*) obj+offset);
6784
+ return ( double*)(( char*) obj+offset);
6706
6785
  }
6707
- static inline double RandomRutherfordData_get__sin_rot_s(const RandomRutherfordData restrict obj){
6786
+ static inline double RandomExponentialData_get__shift_s(const RandomExponentialData restrict obj){
6708
6787
  int64_t offset=0;
6709
6788
  offset+=40;
6710
6789
  return *( double*)(( char*) obj+offset);
6711
6790
  }
6712
- static inline void RandomRutherfordData_set__sin_rot_s(RandomRutherfordData restrict obj, double value){
6791
+ static inline void RandomExponentialData_set__shift_s(RandomExponentialData restrict obj, double value){
6713
6792
  int64_t offset=0;
6714
6793
  offset+=40;
6715
6794
  *( double*)(( char*) obj+offset)=value;
6716
6795
  }
6717
- static inline double* RandomRutherfordData_getp__sin_rot_s(RandomRutherfordData restrict obj){
6796
+ static inline double* RandomExponentialData_getp__shift_s(RandomExponentialData restrict obj){
6718
6797
  int64_t offset=0;
6719
6798
  offset+=40;
6720
6799
  return ( double*)(( char*) obj+offset);
6721
6800
  }
6722
- static inline double RandomRutherfordData_get__cos_rot_s(const RandomRutherfordData restrict obj){
6801
+ static inline double RandomExponentialData_get__rot_x_rad(const RandomExponentialData restrict obj){
6723
6802
  int64_t offset=0;
6724
6803
  offset+=48;
6725
6804
  return *( double*)(( char*) obj+offset);
6726
6805
  }
6727
- static inline void RandomRutherfordData_set__cos_rot_s(RandomRutherfordData restrict obj, double value){
6806
+ static inline void RandomExponentialData_set__rot_x_rad(RandomExponentialData restrict obj, double value){
6728
6807
  int64_t offset=0;
6729
6808
  offset+=48;
6730
6809
  *( double*)(( char*) obj+offset)=value;
6731
6810
  }
6732
- static inline double* RandomRutherfordData_getp__cos_rot_s(RandomRutherfordData restrict obj){
6811
+ static inline double* RandomExponentialData_getp__rot_x_rad(RandomExponentialData restrict obj){
6733
6812
  int64_t offset=0;
6734
6813
  offset+=48;
6735
6814
  return ( double*)(( char*) obj+offset);
6736
6815
  }
6737
- static inline double RandomRutherfordData_get__shift_x(const RandomRutherfordData restrict obj){
6816
+ static inline double RandomExponentialData_get__rot_y_rad(const RandomExponentialData restrict obj){
6738
6817
  int64_t offset=0;
6739
6818
  offset+=56;
6740
6819
  return *( double*)(( char*) obj+offset);
6741
6820
  }
6742
- static inline void RandomRutherfordData_set__shift_x(RandomRutherfordData restrict obj, double value){
6821
+ static inline void RandomExponentialData_set__rot_y_rad(RandomExponentialData restrict obj, double value){
6743
6822
  int64_t offset=0;
6744
6823
  offset+=56;
6745
6824
  *( double*)(( char*) obj+offset)=value;
6746
6825
  }
6747
- static inline double* RandomRutherfordData_getp__shift_x(RandomRutherfordData restrict obj){
6826
+ static inline double* RandomExponentialData_getp__rot_y_rad(RandomExponentialData restrict obj){
6748
6827
  int64_t offset=0;
6749
6828
  offset+=56;
6750
6829
  return ( double*)(( char*) obj+offset);
6751
6830
  }
6752
- static inline double RandomRutherfordData_get__shift_y(const RandomRutherfordData restrict obj){
6831
+ static inline double RandomExponentialData_get__rot_s_rad_no_frame(const RandomExponentialData restrict obj){
6753
6832
  int64_t offset=0;
6754
6833
  offset+=64;
6755
6834
  return *( double*)(( char*) obj+offset);
6756
6835
  }
6757
- static inline void RandomRutherfordData_set__shift_y(RandomRutherfordData restrict obj, double value){
6836
+ static inline void RandomExponentialData_set__rot_s_rad_no_frame(RandomExponentialData restrict obj, double value){
6758
6837
  int64_t offset=0;
6759
6838
  offset+=64;
6760
6839
  *( double*)(( char*) obj+offset)=value;
6761
6840
  }
6762
- static inline double* RandomRutherfordData_getp__shift_y(RandomRutherfordData restrict obj){
6841
+ static inline double* RandomExponentialData_getp__rot_s_rad_no_frame(RandomExponentialData restrict obj){
6763
6842
  int64_t offset=0;
6764
6843
  offset+=64;
6765
6844
  return ( double*)(( char*) obj+offset);
6766
6845
  }
6767
- static inline double RandomRutherfordData_get__shift_s(const RandomRutherfordData restrict obj){
6846
+ static inline double RandomExponentialData_get_rot_shift_anchor(const RandomExponentialData restrict obj){
6768
6847
  int64_t offset=0;
6769
6848
  offset+=72;
6770
6849
  return *( double*)(( char*) obj+offset);
6771
6850
  }
6772
- static inline void RandomRutherfordData_set__shift_s(RandomRutherfordData restrict obj, double value){
6851
+ static inline void RandomExponentialData_set_rot_shift_anchor(RandomExponentialData restrict obj, double value){
6773
6852
  int64_t offset=0;
6774
6853
  offset+=72;
6775
6854
  *( double*)(( char*) obj+offset)=value;
6776
6855
  }
6777
- static inline double* RandomRutherfordData_getp__shift_s(RandomRutherfordData restrict obj){
6856
+ static inline double* RandomExponentialData_getp_rot_shift_anchor(RandomExponentialData restrict obj){
6778
6857
  int64_t offset=0;
6779
6858
  offset+=72;
6780
6859
  return ( double*)(( char*) obj+offset);
6781
- }
6782
- static inline double RandomRutherfordData_get__rot_x_rad(const RandomRutherfordData restrict obj){
6783
- int64_t offset=0;
6784
- offset+=80;
6785
- return *( double*)(( char*) obj+offset);
6786
- }
6787
- static inline void RandomRutherfordData_set__rot_x_rad(RandomRutherfordData restrict obj, double value){
6788
- int64_t offset=0;
6789
- offset+=80;
6790
- *( double*)(( char*) obj+offset)=value;
6791
- }
6792
- static inline double* RandomRutherfordData_getp__rot_x_rad(RandomRutherfordData restrict obj){
6793
- int64_t offset=0;
6794
- offset+=80;
6795
- return ( double*)(( char*) obj+offset);
6796
- }
6797
- static inline double RandomRutherfordData_get__rot_y_rad(const RandomRutherfordData restrict obj){
6798
- int64_t offset=0;
6799
- offset+=88;
6800
- return *( double*)(( char*) obj+offset);
6801
- }
6802
- static inline void RandomRutherfordData_set__rot_y_rad(RandomRutherfordData restrict obj, double value){
6803
- int64_t offset=0;
6804
- offset+=88;
6805
- *( double*)(( char*) obj+offset)=value;
6806
- }
6807
- static inline double* RandomRutherfordData_getp__rot_y_rad(RandomRutherfordData restrict obj){
6808
- int64_t offset=0;
6809
- offset+=88;
6810
- return ( double*)(( char*) obj+offset);
6811
- }
6812
- static inline double RandomRutherfordData_get__rot_s_rad_no_frame(const RandomRutherfordData restrict obj){
6813
- int64_t offset=0;
6814
- offset+=96;
6815
- return *( double*)(( char*) obj+offset);
6816
- }
6817
- static inline void RandomRutherfordData_set__rot_s_rad_no_frame(RandomRutherfordData restrict obj, double value){
6818
- int64_t offset=0;
6819
- offset+=96;
6820
- *( double*)(( char*) obj+offset)=value;
6821
- }
6822
- static inline double* RandomRutherfordData_getp__rot_s_rad_no_frame(RandomRutherfordData restrict obj){
6823
- int64_t offset=0;
6824
- offset+=96;
6825
- return ( double*)(( char*) obj+offset);
6826
- }
6827
- static inline double RandomRutherfordData_get_rot_shift_anchor(const RandomRutherfordData restrict obj){
6828
- int64_t offset=0;
6829
- offset+=104;
6830
- return *( double*)(( char*) obj+offset);
6831
- }
6832
- static inline void RandomRutherfordData_set_rot_shift_anchor(RandomRutherfordData restrict obj, double value){
6833
- int64_t offset=0;
6834
- offset+=104;
6835
- *( double*)(( char*) obj+offset)=value;
6836
- }
6837
- static inline double* RandomRutherfordData_getp_rot_shift_anchor(RandomRutherfordData restrict obj){
6838
- int64_t offset=0;
6839
- offset+=104;
6840
- return ( double*)(( char*) obj+offset);
6841
6860
  }
6842
6861
  #endif
6843
6862
  // copyright ############################### //
@@ -7049,11 +7068,11 @@ void Drift_single_particle(LocalParticle* part, double length){
7049
7068
 
7050
7069
  #endif // XSTUITE_TRACK_FLAGS_H
7051
7070
 
7052
- #include <random/random_src/rutherford.h>
7071
+ #include <random/random_src/exponential.h>
7053
7072
 
7054
7073
 
7055
- void sample_ruth(
7056
- RandomRutherfordData el,
7074
+ void sample_exp(
7075
+ RandomExponentialData el,
7057
7076
 
7058
7077
  ParticlesData particles,
7059
7078
  double* samples, int64_t n_samples_per_seed,
@@ -7101,7 +7120,7 @@ void Drift_single_particle(LocalParticle* part, double length){
7101
7120
  if (part_id<part_capacity){
7102
7121
  Particles_to_LocalParticle(particles, &lpart, part_id, end_id);
7103
7122
  if (check_is_active(&lpart)>0){
7104
- RandomRutherford_sample(el, &lpart, samples, n_samples_per_seed);
7123
+ RandomExponential_sample(el, &lpart, samples, n_samples_per_seed);
7105
7124
 
7106
7125
  }
7107
7126
  if (check_is_active(&lpart)>0 && flag_increment_at_element){
@@ -7120,25 +7139,6 @@ void Drift_single_particle(LocalParticle* part, double length){
7120
7139
  // #endif //only_for_context cpu_openmp
7121
7140
  }
7122
7141
 
7123
- #ifndef XOBJ_TYPEDEF_ElementRefClass
7124
- #define XOBJ_TYPEDEF_ElementRefClass
7125
- typedef struct ElementRefClass_s * ElementRefClass;
7126
- enum ElementRefClass_e{ElementRefClass_ParticlesMonitorData_t};
7127
- static inline ElementRefClass ElementRefClass_getp(ElementRefClass restrict obj){
7128
- int64_t offset=0;
7129
- return (ElementRefClass)(( char*) obj+offset);
7130
- }
7131
- static inline int64_t ElementRefClass_typeid(const ElementRefClass restrict obj){
7132
- int64_t offset=0;
7133
- offset+=8;
7134
- return *( int64_t*)(( char*) obj+offset);
7135
- }
7136
- static inline void* ElementRefClass_member(const ElementRefClass restrict obj){
7137
- int64_t offset=0;
7138
- offset+=*( int64_t*)(( char*) obj+offset);
7139
- return ( void*)(( char*) obj+offset);
7140
- }
7141
- #endif
7142
7142
  #ifndef XOBJ_TYPEDEF_ArrNElementRefClass
7143
7143
  #define XOBJ_TYPEDEF_ArrNElementRefClass
7144
7144
  typedef struct ArrNElementRefClass_s * ArrNElementRefClass;