xsuite 0.41.0__cp313-cp313-macosx_11_0_arm64.whl → 0.41.2__cp313-cp313-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.
- xsuite/lib/default_base_config.c +34743 -34743
- xsuite/lib/default_base_config.cpython-313-darwin.so +0 -0
- xsuite/lib/default_base_config.json +3 -3
- xsuite/lib/default_no_config.c +29743 -29743
- xsuite/lib/default_no_config.cpython-313-darwin.so +0 -0
- xsuite/lib/default_no_config.json +3 -3
- xsuite/lib/non_tracking_kernels.c +1081 -1081
- xsuite/lib/non_tracking_kernels.cpython-313-darwin.so +0 -0
- xsuite/lib/non_tracking_kernels.json +3 -3
- xsuite/lib/only_xtrack_with_synrad.c +21206 -21206
- xsuite/lib/only_xtrack_with_synrad.cpython-313-darwin.so +0 -0
- xsuite/lib/only_xtrack_with_synrad.json +3 -3
- {xsuite-0.41.0.dist-info → xsuite-0.41.2.dist-info}/METADATA +4 -4
- xsuite-0.41.2.dist-info/RECORD +23 -0
- xsuite-0.41.0.dist-info/RECORD +0 -23
- {xsuite-0.41.0.dist-info → xsuite-0.41.2.dist-info}/WHEEL +0 -0
- {xsuite-0.41.0.dist-info → xsuite-0.41.2.dist-info}/entry_points.txt +0 -0
- {xsuite-0.41.0.dist-info → xsuite-0.41.2.dist-info}/licenses/LICENSE +0 -0
- {xsuite-0.41.0.dist-info → xsuite-0.41.2.dist-info}/top_level.txt +0 -0
|
@@ -133,6 +133,24 @@ typedef struct ArrNInt64_s * ArrNInt64;
|
|
|
133
133
|
return ( int64_t*)(( char*) obj+offset);
|
|
134
134
|
}
|
|
135
135
|
#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){
|
|
140
|
+
int64_t offset=0;
|
|
141
|
+
return (ArrNString)(( char*) obj+offset);
|
|
142
|
+
}
|
|
143
|
+
static inline int64_t ArrNString_len(ArrNString restrict obj){
|
|
144
|
+
int64_t offset=0;
|
|
145
|
+
int64_t* arr = ( int64_t*)(( char*) obj+offset);
|
|
146
|
+
return arr[1];
|
|
147
|
+
}
|
|
148
|
+
static inline char* ArrNString_getp1(ArrNString restrict obj, int64_t i0){
|
|
149
|
+
int64_t offset=0;
|
|
150
|
+
offset=*( int64_t*)(( char*) obj+offset+16+i0*8);
|
|
151
|
+
return ( char*)(( char*) obj+offset);
|
|
152
|
+
}
|
|
153
|
+
#endif
|
|
136
154
|
#ifndef XOBJ_TYPEDEF_ArrNUint32
|
|
137
155
|
#define XOBJ_TYPEDEF_ArrNUint32
|
|
138
156
|
typedef struct ArrNUint32_s * ArrNUint32;
|
|
@@ -161,24 +179,6 @@ typedef struct ArrNUint32_s * ArrNUint32;
|
|
|
161
179
|
return ( uint32_t*)(( char*) obj+offset);
|
|
162
180
|
}
|
|
163
181
|
#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,652 +3368,217 @@ void LocalParticle_scale_exact_xp_yp(LocalParticle* part, double value_x, double
|
|
|
3368
3368
|
}
|
|
3369
3369
|
|
|
3370
3370
|
|
|
3371
|
-
#ifndef
|
|
3372
|
-
#define
|
|
3373
|
-
typedef struct
|
|
3374
|
-
static inline
|
|
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 (
|
|
3376
|
+
return (ParticlesMonitorData)(( char*) obj+offset);
|
|
3389
3377
|
}
|
|
3390
|
-
static inline
|
|
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 *(
|
|
3381
|
+
return *( int64_t*)(( char*) obj+offset);
|
|
3394
3382
|
}
|
|
3395
|
-
static inline void
|
|
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
|
-
*(
|
|
3386
|
+
*( int64_t*)(( char*) obj+offset)=value;
|
|
3399
3387
|
}
|
|
3400
|
-
static inline
|
|
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 (
|
|
3391
|
+
return ( int64_t*)(( char*) obj+offset);
|
|
3404
3392
|
}
|
|
3405
|
-
static inline
|
|
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 *(
|
|
3396
|
+
return *( int64_t*)(( char*) obj+offset);
|
|
3409
3397
|
}
|
|
3410
|
-
static inline void
|
|
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
|
-
*(
|
|
3401
|
+
*( int64_t*)(( char*) obj+offset)=value;
|
|
3414
3402
|
}
|
|
3415
|
-
static inline
|
|
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 (
|
|
3406
|
+
return ( int64_t*)(( char*) obj+offset);
|
|
3419
3407
|
}
|
|
3420
|
-
static inline
|
|
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 *(
|
|
3411
|
+
return *( int64_t*)(( char*) obj+offset);
|
|
3424
3412
|
}
|
|
3425
|
-
static inline void
|
|
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
|
-
*(
|
|
3416
|
+
*( int64_t*)(( char*) obj+offset)=value;
|
|
3429
3417
|
}
|
|
3430
|
-
static inline
|
|
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 (
|
|
3421
|
+
return ( int64_t*)(( char*) obj+offset);
|
|
3434
3422
|
}
|
|
3435
|
-
static inline
|
|
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 *(
|
|
3426
|
+
return *( int64_t*)(( char*) obj+offset);
|
|
3439
3427
|
}
|
|
3440
|
-
static inline void
|
|
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
|
-
*(
|
|
3431
|
+
*( int64_t*)(( char*) obj+offset)=value;
|
|
3444
3432
|
}
|
|
3445
|
-
static inline
|
|
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 (
|
|
3436
|
+
return ( int64_t*)(( char*) obj+offset);
|
|
3449
3437
|
}
|
|
3450
|
-
static inline
|
|
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 *(
|
|
3441
|
+
return *( int64_t*)(( char*) obj+offset);
|
|
3454
3442
|
}
|
|
3455
|
-
static inline void
|
|
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
|
-
*(
|
|
3446
|
+
*( int64_t*)(( char*) obj+offset)=value;
|
|
3459
3447
|
}
|
|
3460
|
-
static inline
|
|
3448
|
+
static inline int64_t* ParticlesMonitorData_getp_ebe_mode(ParticlesMonitorData restrict obj){
|
|
3461
3449
|
int64_t offset=0;
|
|
3462
3450
|
offset+=40;
|
|
3463
|
-
return (
|
|
3451
|
+
return ( int64_t*)(( char*) obj+offset);
|
|
3464
3452
|
}
|
|
3465
|
-
static inline
|
|
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 *(
|
|
3456
|
+
return *( int64_t*)(( char*) obj+offset);
|
|
3469
3457
|
}
|
|
3470
|
-
static inline void
|
|
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
|
-
*(
|
|
3461
|
+
*( int64_t*)(( char*) obj+offset)=value;
|
|
3474
3462
|
}
|
|
3475
|
-
static inline
|
|
3463
|
+
static inline int64_t* ParticlesMonitorData_getp_n_records(ParticlesMonitorData restrict obj){
|
|
3476
3464
|
int64_t offset=0;
|
|
3477
3465
|
offset+=48;
|
|
3478
|
-
return (
|
|
3466
|
+
return ( int64_t*)(( char*) obj+offset);
|
|
3479
3467
|
}
|
|
3480
|
-
static inline
|
|
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 *(
|
|
3471
|
+
return *( int64_t*)(( char*) obj+offset);
|
|
3484
3472
|
}
|
|
3485
|
-
static inline void
|
|
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
|
-
*(
|
|
3476
|
+
*( int64_t*)(( char*) obj+offset)=value;
|
|
3489
3477
|
}
|
|
3490
|
-
static inline
|
|
3478
|
+
static inline int64_t* ParticlesMonitorData_getp_n_repetitions(ParticlesMonitorData restrict obj){
|
|
3491
3479
|
int64_t offset=0;
|
|
3492
3480
|
offset+=56;
|
|
3493
|
-
return (
|
|
3481
|
+
return ( int64_t*)(( char*) obj+offset);
|
|
3494
3482
|
}
|
|
3495
|
-
static inline
|
|
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 *(
|
|
3486
|
+
return *( int64_t*)(( char*) obj+offset);
|
|
3499
3487
|
}
|
|
3500
|
-
static inline void
|
|
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
|
-
*(
|
|
3491
|
+
*( int64_t*)(( char*) obj+offset)=value;
|
|
3504
3492
|
}
|
|
3505
|
-
static inline
|
|
3493
|
+
static inline int64_t* ParticlesMonitorData_getp_repetition_period(ParticlesMonitorData restrict obj){
|
|
3506
3494
|
int64_t offset=0;
|
|
3507
3495
|
offset+=64;
|
|
3508
|
-
return (
|
|
3496
|
+
return ( int64_t*)(( char*) obj+offset);
|
|
3509
3497
|
}
|
|
3510
|
-
static inline
|
|
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 *(
|
|
3501
|
+
return *( int64_t*)(( char*) obj+offset);
|
|
3514
3502
|
}
|
|
3515
|
-
static inline void
|
|
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
|
-
*(
|
|
3506
|
+
*( int64_t*)(( char*) obj+offset)=value;
|
|
3519
3507
|
}
|
|
3520
|
-
static inline
|
|
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 (
|
|
3511
|
+
return ( int64_t*)(( char*) obj+offset);
|
|
3524
3512
|
}
|
|
3525
|
-
|
|
3526
|
-
|
|
3527
|
-
|
|
3528
|
-
|
|
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;
|
|
3513
|
+
static inline ParticlesData ParticlesMonitorData_getp_data(ParticlesMonitorData restrict obj){
|
|
3514
|
+
int64_t offset=0;
|
|
3515
|
+
offset+=152;
|
|
3516
|
+
return (ParticlesData)(( char*) obj+offset);
|
|
3604
3517
|
}
|
|
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){
|
|
3810
|
-
int64_t offset=0;
|
|
3811
|
-
return (ParticlesMonitorData)(( char*) obj+offset);
|
|
3812
|
-
}
|
|
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+=
|
|
3520
|
+
offset+=160;
|
|
3816
3521
|
return *( int64_t*)(( char*) obj+offset);
|
|
3817
3522
|
}
|
|
3818
|
-
static inline void
|
|
3523
|
+
static inline void ParticlesMonitorData_set_data__capacity(ParticlesMonitorData restrict obj, int64_t value){
|
|
3819
3524
|
int64_t offset=0;
|
|
3820
|
-
offset+=
|
|
3525
|
+
offset+=160;
|
|
3821
3526
|
*( int64_t*)(( char*) obj+offset)=value;
|
|
3822
3527
|
}
|
|
3823
|
-
static inline int64_t*
|
|
3528
|
+
static inline int64_t* ParticlesMonitorData_getp_data__capacity(ParticlesMonitorData restrict obj){
|
|
3824
3529
|
int64_t offset=0;
|
|
3825
|
-
offset+=
|
|
3530
|
+
offset+=160;
|
|
3826
3531
|
return ( int64_t*)(( char*) obj+offset);
|
|
3827
3532
|
}
|
|
3828
|
-
static inline int64_t
|
|
3533
|
+
static inline int64_t ParticlesMonitorData_get_data__num_active_particles(const ParticlesMonitorData restrict obj){
|
|
3829
3534
|
int64_t offset=0;
|
|
3830
|
-
offset+=
|
|
3535
|
+
offset+=168;
|
|
3831
3536
|
return *( int64_t*)(( char*) obj+offset);
|
|
3832
3537
|
}
|
|
3833
|
-
static inline void
|
|
3538
|
+
static inline void ParticlesMonitorData_set_data__num_active_particles(ParticlesMonitorData restrict obj, int64_t value){
|
|
3834
3539
|
int64_t offset=0;
|
|
3835
|
-
offset+=
|
|
3540
|
+
offset+=168;
|
|
3836
3541
|
*( int64_t*)(( char*) obj+offset)=value;
|
|
3837
3542
|
}
|
|
3838
|
-
static inline int64_t*
|
|
3543
|
+
static inline int64_t* ParticlesMonitorData_getp_data__num_active_particles(ParticlesMonitorData restrict obj){
|
|
3839
3544
|
int64_t offset=0;
|
|
3840
|
-
offset+=
|
|
3545
|
+
offset+=168;
|
|
3841
3546
|
return ( int64_t*)(( char*) obj+offset);
|
|
3842
3547
|
}
|
|
3843
|
-
static inline int64_t
|
|
3548
|
+
static inline int64_t ParticlesMonitorData_get_data__num_lost_particles(const ParticlesMonitorData restrict obj){
|
|
3844
3549
|
int64_t offset=0;
|
|
3845
|
-
offset+=
|
|
3550
|
+
offset+=176;
|
|
3846
3551
|
return *( int64_t*)(( char*) obj+offset);
|
|
3847
3552
|
}
|
|
3848
|
-
static inline void
|
|
3553
|
+
static inline void ParticlesMonitorData_set_data__num_lost_particles(ParticlesMonitorData restrict obj, int64_t value){
|
|
3849
3554
|
int64_t offset=0;
|
|
3850
|
-
offset+=
|
|
3555
|
+
offset+=176;
|
|
3851
3556
|
*( int64_t*)(( char*) obj+offset)=value;
|
|
3852
3557
|
}
|
|
3853
|
-
static inline int64_t*
|
|
3558
|
+
static inline int64_t* ParticlesMonitorData_getp_data__num_lost_particles(ParticlesMonitorData restrict obj){
|
|
3854
3559
|
int64_t offset=0;
|
|
3855
|
-
offset+=
|
|
3560
|
+
offset+=176;
|
|
3856
3561
|
return ( int64_t*)(( char*) obj+offset);
|
|
3857
3562
|
}
|
|
3858
|
-
static inline int64_t
|
|
3563
|
+
static inline int64_t ParticlesMonitorData_get_data_start_tracking_at_element(const ParticlesMonitorData restrict obj){
|
|
3859
3564
|
int64_t offset=0;
|
|
3860
|
-
offset+=
|
|
3565
|
+
offset+=184;
|
|
3861
3566
|
return *( int64_t*)(( char*) obj+offset);
|
|
3862
3567
|
}
|
|
3863
|
-
static inline void
|
|
3568
|
+
static inline void ParticlesMonitorData_set_data_start_tracking_at_element(ParticlesMonitorData restrict obj, int64_t value){
|
|
3864
3569
|
int64_t offset=0;
|
|
3865
|
-
offset+=
|
|
3570
|
+
offset+=184;
|
|
3866
3571
|
*( int64_t*)(( char*) obj+offset)=value;
|
|
3867
3572
|
}
|
|
3868
|
-
static inline int64_t*
|
|
3573
|
+
static inline int64_t* ParticlesMonitorData_getp_data_start_tracking_at_element(ParticlesMonitorData restrict obj){
|
|
3869
3574
|
int64_t offset=0;
|
|
3870
|
-
offset+=
|
|
3575
|
+
offset+=184;
|
|
3871
3576
|
return ( int64_t*)(( char*) obj+offset);
|
|
3872
3577
|
}
|
|
3873
|
-
static inline
|
|
3578
|
+
static inline double ParticlesMonitorData_get_data_q0(const ParticlesMonitorData restrict obj){
|
|
3874
3579
|
int64_t offset=0;
|
|
3875
|
-
offset+=
|
|
3876
|
-
return *(
|
|
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){
|
|
3974
|
-
int64_t offset=0;
|
|
3975
|
-
offset+=168;
|
|
3976
|
-
*( int64_t*)(( char*) obj+offset)=value;
|
|
3977
|
-
}
|
|
3978
|
-
static inline int64_t* ParticlesMonitorData_getp_data__num_active_particles(ParticlesMonitorData restrict obj){
|
|
3979
|
-
int64_t offset=0;
|
|
3980
|
-
offset+=168;
|
|
3981
|
-
return ( int64_t*)(( char*) obj+offset);
|
|
3982
|
-
}
|
|
3983
|
-
static inline int64_t ParticlesMonitorData_get_data__num_lost_particles(const ParticlesMonitorData restrict obj){
|
|
3984
|
-
int64_t offset=0;
|
|
3985
|
-
offset+=176;
|
|
3986
|
-
return *( int64_t*)(( char*) obj+offset);
|
|
3987
|
-
}
|
|
3988
|
-
static inline void ParticlesMonitorData_set_data__num_lost_particles(ParticlesMonitorData restrict obj, int64_t value){
|
|
3989
|
-
int64_t offset=0;
|
|
3990
|
-
offset+=176;
|
|
3991
|
-
*( int64_t*)(( char*) obj+offset)=value;
|
|
3992
|
-
}
|
|
3993
|
-
static inline int64_t* ParticlesMonitorData_getp_data__num_lost_particles(ParticlesMonitorData restrict obj){
|
|
3994
|
-
int64_t offset=0;
|
|
3995
|
-
offset+=176;
|
|
3996
|
-
return ( int64_t*)(( char*) obj+offset);
|
|
3997
|
-
}
|
|
3998
|
-
static inline int64_t ParticlesMonitorData_get_data_start_tracking_at_element(const ParticlesMonitorData restrict obj){
|
|
3999
|
-
int64_t offset=0;
|
|
4000
|
-
offset+=184;
|
|
4001
|
-
return *( int64_t*)(( char*) obj+offset);
|
|
4002
|
-
}
|
|
4003
|
-
static inline void ParticlesMonitorData_set_data_start_tracking_at_element(ParticlesMonitorData restrict obj, int64_t value){
|
|
4004
|
-
int64_t offset=0;
|
|
4005
|
-
offset+=184;
|
|
4006
|
-
*( int64_t*)(( char*) obj+offset)=value;
|
|
4007
|
-
}
|
|
4008
|
-
static inline int64_t* ParticlesMonitorData_getp_data_start_tracking_at_element(ParticlesMonitorData restrict obj){
|
|
4009
|
-
int64_t offset=0;
|
|
4010
|
-
offset+=184;
|
|
4011
|
-
return ( int64_t*)(( char*) obj+offset);
|
|
4012
|
-
}
|
|
4013
|
-
static inline double ParticlesMonitorData_get_data_q0(const ParticlesMonitorData restrict obj){
|
|
4014
|
-
int64_t offset=0;
|
|
4015
|
-
offset+=192;
|
|
4016
|
-
return *( double*)(( char*) obj+offset);
|
|
3580
|
+
offset+=192;
|
|
3581
|
+
return *( double*)(( char*) obj+offset);
|
|
4017
3582
|
}
|
|
4018
3583
|
static inline void ParticlesMonitorData_set_data_q0(ParticlesMonitorData restrict obj, double value){
|
|
4019
3584
|
int64_t offset=0;
|
|
@@ -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
|
-
|
|
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
|
|
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
|
|
5330
|
+
static inline uint8_t RandomUniformData_get__dummy(const RandomUniformData restrict obj){
|
|
5121
5331
|
int64_t offset=0;
|
|
5122
|
-
offset
|
|
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
|
|
5334
|
+
static inline void RandomUniformData_set__dummy(RandomUniformData restrict obj, uint8_t value){
|
|
5128
5335
|
int64_t offset=0;
|
|
5129
|
-
offset
|
|
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
|
|
5338
|
+
static inline uint8_t* RandomUniformData_getp__dummy(RandomUniformData restrict obj){
|
|
5135
5339
|
int64_t offset=0;
|
|
5136
|
-
offset
|
|
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
|
|
5342
|
+
static inline double RandomUniformData_get__sin_rot_s(const RandomUniformData restrict obj){
|
|
5142
5343
|
int64_t offset=0;
|
|
5143
|
-
offset+=
|
|
5344
|
+
offset+=8;
|
|
5144
5345
|
return *( double*)(( char*) obj+offset);
|
|
5145
5346
|
}
|
|
5146
|
-
static inline void
|
|
5347
|
+
static inline void RandomUniformData_set__sin_rot_s(RandomUniformData restrict obj, double value){
|
|
5147
5348
|
int64_t offset=0;
|
|
5148
|
-
offset+=
|
|
5349
|
+
offset+=8;
|
|
5149
5350
|
*( double*)(( char*) obj+offset)=value;
|
|
5150
5351
|
}
|
|
5151
|
-
static inline double*
|
|
5352
|
+
static inline double* RandomUniformData_getp__sin_rot_s(RandomUniformData restrict obj){
|
|
5152
5353
|
int64_t offset=0;
|
|
5153
|
-
offset+=
|
|
5354
|
+
offset+=8;
|
|
5154
5355
|
return ( double*)(( char*) obj+offset);
|
|
5155
5356
|
}
|
|
5156
|
-
static inline double
|
|
5357
|
+
static inline double RandomUniformData_get__cos_rot_s(const RandomUniformData restrict obj){
|
|
5157
5358
|
int64_t offset=0;
|
|
5158
|
-
offset+=
|
|
5359
|
+
offset+=16;
|
|
5159
5360
|
return *( double*)(( char*) obj+offset);
|
|
5160
5361
|
}
|
|
5161
|
-
static inline void
|
|
5362
|
+
static inline void RandomUniformData_set__cos_rot_s(RandomUniformData restrict obj, double value){
|
|
5162
5363
|
int64_t offset=0;
|
|
5163
|
-
offset+=
|
|
5364
|
+
offset+=16;
|
|
5164
5365
|
*( double*)(( char*) obj+offset)=value;
|
|
5165
5366
|
}
|
|
5166
|
-
static inline double*
|
|
5367
|
+
static inline double* RandomUniformData_getp__cos_rot_s(RandomUniformData restrict obj){
|
|
5167
5368
|
int64_t offset=0;
|
|
5168
|
-
offset+=
|
|
5369
|
+
offset+=16;
|
|
5169
5370
|
return ( double*)(( char*) obj+offset);
|
|
5170
5371
|
}
|
|
5171
|
-
static inline double
|
|
5372
|
+
static inline double RandomUniformData_get__shift_x(const RandomUniformData restrict obj){
|
|
5172
5373
|
int64_t offset=0;
|
|
5173
|
-
offset+=
|
|
5374
|
+
offset+=24;
|
|
5174
5375
|
return *( double*)(( char*) obj+offset);
|
|
5175
5376
|
}
|
|
5176
|
-
static inline void
|
|
5377
|
+
static inline void RandomUniformData_set__shift_x(RandomUniformData restrict obj, double value){
|
|
5177
5378
|
int64_t offset=0;
|
|
5178
|
-
offset+=
|
|
5379
|
+
offset+=24;
|
|
5179
5380
|
*( double*)(( char*) obj+offset)=value;
|
|
5180
5381
|
}
|
|
5181
|
-
static inline double*
|
|
5382
|
+
static inline double* RandomUniformData_getp__shift_x(RandomUniformData restrict obj){
|
|
5182
5383
|
int64_t offset=0;
|
|
5183
|
-
offset+=
|
|
5384
|
+
offset+=24;
|
|
5184
5385
|
return ( double*)(( char*) obj+offset);
|
|
5185
5386
|
}
|
|
5186
|
-
static inline double
|
|
5387
|
+
static inline double RandomUniformData_get__shift_y(const RandomUniformData restrict obj){
|
|
5187
5388
|
int64_t offset=0;
|
|
5188
|
-
offset+=
|
|
5389
|
+
offset+=32;
|
|
5189
5390
|
return *( double*)(( char*) obj+offset);
|
|
5190
5391
|
}
|
|
5191
|
-
static inline void
|
|
5392
|
+
static inline void RandomUniformData_set__shift_y(RandomUniformData restrict obj, double value){
|
|
5192
5393
|
int64_t offset=0;
|
|
5193
|
-
offset+=
|
|
5394
|
+
offset+=32;
|
|
5194
5395
|
*( double*)(( char*) obj+offset)=value;
|
|
5195
5396
|
}
|
|
5196
|
-
static inline double*
|
|
5397
|
+
static inline double* RandomUniformData_getp__shift_y(RandomUniformData restrict obj){
|
|
5197
5398
|
int64_t offset=0;
|
|
5198
|
-
offset+=
|
|
5399
|
+
offset+=32;
|
|
5199
5400
|
return ( double*)(( char*) obj+offset);
|
|
5200
5401
|
}
|
|
5201
|
-
static inline double
|
|
5402
|
+
static inline double RandomUniformData_get__shift_s(const RandomUniformData restrict obj){
|
|
5202
5403
|
int64_t offset=0;
|
|
5203
|
-
offset+=
|
|
5404
|
+
offset+=40;
|
|
5204
5405
|
return *( double*)(( char*) obj+offset);
|
|
5205
5406
|
}
|
|
5206
|
-
static inline void
|
|
5407
|
+
static inline void RandomUniformData_set__shift_s(RandomUniformData restrict obj, double value){
|
|
5207
5408
|
int64_t offset=0;
|
|
5208
|
-
offset+=
|
|
5409
|
+
offset+=40;
|
|
5209
5410
|
*( double*)(( char*) obj+offset)=value;
|
|
5210
5411
|
}
|
|
5211
|
-
static inline double*
|
|
5412
|
+
static inline double* RandomUniformData_getp__shift_s(RandomUniformData restrict obj){
|
|
5212
5413
|
int64_t offset=0;
|
|
5213
|
-
offset+=
|
|
5414
|
+
offset+=40;
|
|
5214
5415
|
return ( double*)(( char*) obj+offset);
|
|
5215
5416
|
}
|
|
5216
|
-
static inline double
|
|
5417
|
+
static inline double RandomUniformData_get__rot_x_rad(const RandomUniformData restrict obj){
|
|
5217
5418
|
int64_t offset=0;
|
|
5218
|
-
offset+=
|
|
5419
|
+
offset+=48;
|
|
5219
5420
|
return *( double*)(( char*) obj+offset);
|
|
5220
5421
|
}
|
|
5221
|
-
static inline void
|
|
5422
|
+
static inline void RandomUniformData_set__rot_x_rad(RandomUniformData restrict obj, double value){
|
|
5222
5423
|
int64_t offset=0;
|
|
5223
|
-
offset+=
|
|
5424
|
+
offset+=48;
|
|
5224
5425
|
*( double*)(( char*) obj+offset)=value;
|
|
5225
5426
|
}
|
|
5226
|
-
static inline double*
|
|
5427
|
+
static inline double* RandomUniformData_getp__rot_x_rad(RandomUniformData restrict obj){
|
|
5227
5428
|
int64_t offset=0;
|
|
5228
|
-
offset+=
|
|
5429
|
+
offset+=48;
|
|
5229
5430
|
return ( double*)(( char*) obj+offset);
|
|
5230
5431
|
}
|
|
5231
|
-
static inline double
|
|
5432
|
+
static inline double RandomUniformData_get__rot_y_rad(const RandomUniformData restrict obj){
|
|
5232
5433
|
int64_t offset=0;
|
|
5233
|
-
offset+=
|
|
5434
|
+
offset+=56;
|
|
5234
5435
|
return *( double*)(( char*) obj+offset);
|
|
5235
5436
|
}
|
|
5236
|
-
static inline void
|
|
5437
|
+
static inline void RandomUniformData_set__rot_y_rad(RandomUniformData restrict obj, double value){
|
|
5237
5438
|
int64_t offset=0;
|
|
5238
|
-
offset+=
|
|
5439
|
+
offset+=56;
|
|
5239
5440
|
*( double*)(( char*) obj+offset)=value;
|
|
5240
5441
|
}
|
|
5241
|
-
static inline double*
|
|
5442
|
+
static inline double* RandomUniformData_getp__rot_y_rad(RandomUniformData restrict obj){
|
|
5242
5443
|
int64_t offset=0;
|
|
5243
|
-
offset+=
|
|
5444
|
+
offset+=56;
|
|
5244
5445
|
return ( double*)(( char*) obj+offset);
|
|
5245
5446
|
}
|
|
5246
|
-
static inline double
|
|
5447
|
+
static inline double RandomUniformData_get__rot_s_rad_no_frame(const RandomUniformData restrict obj){
|
|
5247
5448
|
int64_t offset=0;
|
|
5248
|
-
offset+=
|
|
5449
|
+
offset+=64;
|
|
5249
5450
|
return *( double*)(( char*) obj+offset);
|
|
5250
5451
|
}
|
|
5251
|
-
static inline void
|
|
5452
|
+
static inline void RandomUniformData_set__rot_s_rad_no_frame(RandomUniformData restrict obj, double value){
|
|
5252
5453
|
int64_t offset=0;
|
|
5253
|
-
offset+=
|
|
5454
|
+
offset+=64;
|
|
5254
5455
|
*( double*)(( char*) obj+offset)=value;
|
|
5255
5456
|
}
|
|
5256
|
-
static inline double*
|
|
5457
|
+
static inline double* RandomUniformData_getp__rot_s_rad_no_frame(RandomUniformData restrict obj){
|
|
5257
5458
|
int64_t offset=0;
|
|
5258
|
-
offset+=
|
|
5459
|
+
offset+=64;
|
|
5259
5460
|
return ( double*)(( char*) obj+offset);
|
|
5260
5461
|
}
|
|
5261
|
-
static inline double
|
|
5462
|
+
static inline double RandomUniformData_get_rot_shift_anchor(const RandomUniformData restrict obj){
|
|
5262
5463
|
int64_t offset=0;
|
|
5263
|
-
offset+=
|
|
5464
|
+
offset+=72;
|
|
5264
5465
|
return *( double*)(( char*) obj+offset);
|
|
5265
5466
|
}
|
|
5266
|
-
static inline void
|
|
5467
|
+
static inline void RandomUniformData_set_rot_shift_anchor(RandomUniformData restrict obj, double value){
|
|
5267
5468
|
int64_t offset=0;
|
|
5268
|
-
offset+=
|
|
5469
|
+
offset+=72;
|
|
5269
5470
|
*( double*)(( char*) obj+offset)=value;
|
|
5270
5471
|
}
|
|
5271
|
-
static inline double*
|
|
5472
|
+
static inline double* RandomUniformData_getp_rot_shift_anchor(RandomUniformData restrict obj){
|
|
5272
5473
|
int64_t offset=0;
|
|
5273
|
-
offset+=
|
|
5474
|
+
offset+=72;
|
|
5274
5475
|
return ( double*)(( char*) obj+offset);
|
|
5275
5476
|
}
|
|
5276
5477
|
#endif
|
|
@@ -5430,268 +5631,67 @@ GPUFUN
|
|
|
5430
5631
|
void Drift_single_particle_expanded(LocalParticle* part, double length){
|
|
5431
5632
|
double const rpp = LocalParticle_get_rpp(part);
|
|
5432
5633
|
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
|
|
5603
|
-
|
|
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
|
|
5607
|
-
|
|
5608
|
-
// LocalParticle* part = part0; //only_for_context opencl cuda
|
|
5609
|
-
|
|
5610
|
-
// if (LocalParticle_get_state(part) > 0) { //only_for_context cpu_openmp
|
|
5611
|
-
|
|
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
|
-
}
|
|
5620
|
-
|
|
5621
|
-
// } //only_for_context cpu_openmp
|
|
5622
|
-
} //only_for_context cpu_serial cpu_openmp
|
|
5623
|
-
}
|
|
5624
|
-
|
|
5625
|
-
#endif
|
|
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
|
-
|
|
5650
|
-
|
|
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
|
|
5653
|
-
|
|
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
|
-
|
|
5656
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
5691
|
-
|
|
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
|
-
|
|
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,159 +5755,238 @@ if (_sin_rot_s > -2.) {
|
|
|
5755
5755
|
// #endif //only_for_context cpu_openmp
|
|
5756
5756
|
}
|
|
5757
5757
|
|
|
5758
|
-
#ifndef
|
|
5759
|
-
#define
|
|
5760
|
-
typedef struct
|
|
5761
|
-
|
|
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){
|
|
5762
5763
|
int64_t offset=0;
|
|
5763
|
-
return (
|
|
5764
|
+
return (ElementRefClass)(( char*) obj+offset);
|
|
5764
5765
|
}
|
|
5765
|
-
static inline
|
|
5766
|
+
static inline int64_t ElementRefClass_typeid(const ElementRefClass restrict obj){
|
|
5766
5767
|
int64_t offset=0;
|
|
5767
|
-
|
|
5768
|
+
offset+=8;
|
|
5769
|
+
return *( int64_t*)(( char*) obj+offset);
|
|
5768
5770
|
}
|
|
5769
|
-
static inline
|
|
5771
|
+
static inline void* ElementRefClass_member(const ElementRefClass restrict obj){
|
|
5770
5772
|
int64_t offset=0;
|
|
5771
|
-
*((
|
|
5773
|
+
offset+=*( int64_t*)(( char*) obj+offset);
|
|
5774
|
+
return ( void*)(( char*) obj+offset);
|
|
5772
5775
|
}
|
|
5773
|
-
|
|
5776
|
+
#endif
|
|
5777
|
+
#ifndef XOBJ_TYPEDEF_RandomRutherfordData
|
|
5778
|
+
#define XOBJ_TYPEDEF_RandomRutherfordData
|
|
5779
|
+
typedef struct RandomRutherfordData_s * RandomRutherfordData;
|
|
5780
|
+
static inline RandomRutherfordData RandomRutherfordData_getp(RandomRutherfordData restrict obj){
|
|
5774
5781
|
int64_t offset=0;
|
|
5775
|
-
return (
|
|
5782
|
+
return (RandomRutherfordData)(( char*) obj+offset);
|
|
5776
5783
|
}
|
|
5777
|
-
static inline double
|
|
5784
|
+
static inline double RandomRutherfordData_get_lower_val(const RandomRutherfordData restrict obj){
|
|
5785
|
+
int64_t offset=0;
|
|
5786
|
+
return *( double*)(( char*) obj+offset);
|
|
5787
|
+
}
|
|
5788
|
+
static inline void RandomRutherfordData_set_lower_val(RandomRutherfordData restrict obj, double value){
|
|
5789
|
+
int64_t offset=0;
|
|
5790
|
+
*( double*)(( char*) obj+offset)=value;
|
|
5791
|
+
}
|
|
5792
|
+
static inline double* RandomRutherfordData_getp_lower_val(RandomRutherfordData restrict obj){
|
|
5793
|
+
int64_t offset=0;
|
|
5794
|
+
return ( double*)(( char*) obj+offset);
|
|
5795
|
+
}
|
|
5796
|
+
static inline double RandomRutherfordData_get_upper_val(const RandomRutherfordData restrict obj){
|
|
5778
5797
|
int64_t offset=0;
|
|
5779
5798
|
offset+=8;
|
|
5780
5799
|
return *( double*)(( char*) obj+offset);
|
|
5781
5800
|
}
|
|
5782
|
-
static inline void
|
|
5801
|
+
static inline void RandomRutherfordData_set_upper_val(RandomRutherfordData restrict obj, double value){
|
|
5783
5802
|
int64_t offset=0;
|
|
5784
5803
|
offset+=8;
|
|
5785
5804
|
*( double*)(( char*) obj+offset)=value;
|
|
5786
5805
|
}
|
|
5787
|
-
static inline double*
|
|
5806
|
+
static inline double* RandomRutherfordData_getp_upper_val(RandomRutherfordData restrict obj){
|
|
5788
5807
|
int64_t offset=0;
|
|
5789
5808
|
offset+=8;
|
|
5790
5809
|
return ( double*)(( char*) obj+offset);
|
|
5791
5810
|
}
|
|
5792
|
-
static inline double
|
|
5811
|
+
static inline double RandomRutherfordData_get_A(const RandomRutherfordData restrict obj){
|
|
5793
5812
|
int64_t offset=0;
|
|
5794
5813
|
offset+=16;
|
|
5795
5814
|
return *( double*)(( char*) obj+offset);
|
|
5796
5815
|
}
|
|
5797
|
-
static inline void
|
|
5816
|
+
static inline void RandomRutherfordData_set_A(RandomRutherfordData restrict obj, double value){
|
|
5798
5817
|
int64_t offset=0;
|
|
5799
5818
|
offset+=16;
|
|
5800
5819
|
*( double*)(( char*) obj+offset)=value;
|
|
5801
5820
|
}
|
|
5802
|
-
static inline double*
|
|
5821
|
+
static inline double* RandomRutherfordData_getp_A(RandomRutherfordData restrict obj){
|
|
5803
5822
|
int64_t offset=0;
|
|
5804
5823
|
offset+=16;
|
|
5805
5824
|
return ( double*)(( char*) obj+offset);
|
|
5806
5825
|
}
|
|
5807
|
-
static inline double
|
|
5826
|
+
static inline double RandomRutherfordData_get_B(const RandomRutherfordData restrict obj){
|
|
5808
5827
|
int64_t offset=0;
|
|
5809
5828
|
offset+=24;
|
|
5810
5829
|
return *( double*)(( char*) obj+offset);
|
|
5811
5830
|
}
|
|
5812
|
-
static inline void
|
|
5831
|
+
static inline void RandomRutherfordData_set_B(RandomRutherfordData restrict obj, double value){
|
|
5813
5832
|
int64_t offset=0;
|
|
5814
5833
|
offset+=24;
|
|
5815
5834
|
*( double*)(( char*) obj+offset)=value;
|
|
5816
5835
|
}
|
|
5817
|
-
static inline double*
|
|
5836
|
+
static inline double* RandomRutherfordData_getp_B(RandomRutherfordData restrict obj){
|
|
5818
5837
|
int64_t offset=0;
|
|
5819
5838
|
offset+=24;
|
|
5820
5839
|
return ( double*)(( char*) obj+offset);
|
|
5821
5840
|
}
|
|
5822
|
-
static inline
|
|
5841
|
+
static inline int8_t RandomRutherfordData_get_Newton_iterations(const RandomRutherfordData restrict obj){
|
|
5823
5842
|
int64_t offset=0;
|
|
5824
5843
|
offset+=32;
|
|
5825
|
-
return *(
|
|
5844
|
+
return *(( int8_t*) obj+offset);
|
|
5826
5845
|
}
|
|
5827
|
-
static inline void
|
|
5846
|
+
static inline void RandomRutherfordData_set_Newton_iterations(RandomRutherfordData restrict obj, int8_t value){
|
|
5828
5847
|
int64_t offset=0;
|
|
5829
5848
|
offset+=32;
|
|
5830
|
-
*(
|
|
5849
|
+
*(( int8_t*) obj+offset)=value;
|
|
5831
5850
|
}
|
|
5832
|
-
static inline
|
|
5851
|
+
static inline int8_t* RandomRutherfordData_getp_Newton_iterations(RandomRutherfordData restrict obj){
|
|
5833
5852
|
int64_t offset=0;
|
|
5834
5853
|
offset+=32;
|
|
5835
|
-
return (
|
|
5854
|
+
return ( int8_t*)(( char*) obj+offset);
|
|
5836
5855
|
}
|
|
5837
|
-
static inline double
|
|
5856
|
+
static inline double RandomRutherfordData_get__sin_rot_s(const RandomRutherfordData restrict obj){
|
|
5838
5857
|
int64_t offset=0;
|
|
5839
5858
|
offset+=40;
|
|
5840
5859
|
return *( double*)(( char*) obj+offset);
|
|
5841
5860
|
}
|
|
5842
|
-
static inline void
|
|
5861
|
+
static inline void RandomRutherfordData_set__sin_rot_s(RandomRutherfordData restrict obj, double value){
|
|
5843
5862
|
int64_t offset=0;
|
|
5844
5863
|
offset+=40;
|
|
5845
5864
|
*( double*)(( char*) obj+offset)=value;
|
|
5846
5865
|
}
|
|
5847
|
-
static inline double*
|
|
5866
|
+
static inline double* RandomRutherfordData_getp__sin_rot_s(RandomRutherfordData restrict obj){
|
|
5848
5867
|
int64_t offset=0;
|
|
5849
5868
|
offset+=40;
|
|
5850
5869
|
return ( double*)(( char*) obj+offset);
|
|
5851
5870
|
}
|
|
5852
|
-
static inline double
|
|
5871
|
+
static inline double RandomRutherfordData_get__cos_rot_s(const RandomRutherfordData restrict obj){
|
|
5853
5872
|
int64_t offset=0;
|
|
5854
5873
|
offset+=48;
|
|
5855
5874
|
return *( double*)(( char*) obj+offset);
|
|
5856
5875
|
}
|
|
5857
|
-
static inline void
|
|
5876
|
+
static inline void RandomRutherfordData_set__cos_rot_s(RandomRutherfordData restrict obj, double value){
|
|
5858
5877
|
int64_t offset=0;
|
|
5859
5878
|
offset+=48;
|
|
5860
5879
|
*( double*)(( char*) obj+offset)=value;
|
|
5861
5880
|
}
|
|
5862
|
-
static inline double*
|
|
5881
|
+
static inline double* RandomRutherfordData_getp__cos_rot_s(RandomRutherfordData restrict obj){
|
|
5863
5882
|
int64_t offset=0;
|
|
5864
5883
|
offset+=48;
|
|
5865
5884
|
return ( double*)(( char*) obj+offset);
|
|
5866
5885
|
}
|
|
5867
|
-
static inline double
|
|
5886
|
+
static inline double RandomRutherfordData_get__shift_x(const RandomRutherfordData restrict obj){
|
|
5868
5887
|
int64_t offset=0;
|
|
5869
5888
|
offset+=56;
|
|
5870
5889
|
return *( double*)(( char*) obj+offset);
|
|
5871
5890
|
}
|
|
5872
|
-
static inline void
|
|
5891
|
+
static inline void RandomRutherfordData_set__shift_x(RandomRutherfordData restrict obj, double value){
|
|
5873
5892
|
int64_t offset=0;
|
|
5874
5893
|
offset+=56;
|
|
5875
5894
|
*( double*)(( char*) obj+offset)=value;
|
|
5876
5895
|
}
|
|
5877
|
-
static inline double*
|
|
5896
|
+
static inline double* RandomRutherfordData_getp__shift_x(RandomRutherfordData restrict obj){
|
|
5878
5897
|
int64_t offset=0;
|
|
5879
5898
|
offset+=56;
|
|
5880
5899
|
return ( double*)(( char*) obj+offset);
|
|
5881
5900
|
}
|
|
5882
|
-
static inline double
|
|
5901
|
+
static inline double RandomRutherfordData_get__shift_y(const RandomRutherfordData restrict obj){
|
|
5883
5902
|
int64_t offset=0;
|
|
5884
5903
|
offset+=64;
|
|
5885
5904
|
return *( double*)(( char*) obj+offset);
|
|
5886
5905
|
}
|
|
5887
|
-
static inline void
|
|
5906
|
+
static inline void RandomRutherfordData_set__shift_y(RandomRutherfordData restrict obj, double value){
|
|
5888
5907
|
int64_t offset=0;
|
|
5889
5908
|
offset+=64;
|
|
5890
5909
|
*( double*)(( char*) obj+offset)=value;
|
|
5891
5910
|
}
|
|
5892
|
-
static inline double*
|
|
5911
|
+
static inline double* RandomRutherfordData_getp__shift_y(RandomRutherfordData restrict obj){
|
|
5893
5912
|
int64_t offset=0;
|
|
5894
5913
|
offset+=64;
|
|
5895
5914
|
return ( double*)(( char*) obj+offset);
|
|
5896
5915
|
}
|
|
5897
|
-
static inline double
|
|
5916
|
+
static inline double RandomRutherfordData_get__shift_s(const RandomRutherfordData restrict obj){
|
|
5898
5917
|
int64_t offset=0;
|
|
5899
5918
|
offset+=72;
|
|
5900
5919
|
return *( double*)(( char*) obj+offset);
|
|
5901
5920
|
}
|
|
5902
|
-
static inline void
|
|
5921
|
+
static inline void RandomRutherfordData_set__shift_s(RandomRutherfordData restrict obj, double value){
|
|
5903
5922
|
int64_t offset=0;
|
|
5904
5923
|
offset+=72;
|
|
5905
5924
|
*( double*)(( char*) obj+offset)=value;
|
|
5906
5925
|
}
|
|
5907
|
-
static inline double*
|
|
5926
|
+
static inline double* RandomRutherfordData_getp__shift_s(RandomRutherfordData restrict obj){
|
|
5908
5927
|
int64_t offset=0;
|
|
5909
5928
|
offset+=72;
|
|
5910
5929
|
return ( double*)(( char*) obj+offset);
|
|
5930
|
+
}
|
|
5931
|
+
static inline double RandomRutherfordData_get__rot_x_rad(const RandomRutherfordData restrict obj){
|
|
5932
|
+
int64_t offset=0;
|
|
5933
|
+
offset+=80;
|
|
5934
|
+
return *( double*)(( char*) obj+offset);
|
|
5935
|
+
}
|
|
5936
|
+
static inline void RandomRutherfordData_set__rot_x_rad(RandomRutherfordData restrict obj, double value){
|
|
5937
|
+
int64_t offset=0;
|
|
5938
|
+
offset+=80;
|
|
5939
|
+
*( double*)(( char*) obj+offset)=value;
|
|
5940
|
+
}
|
|
5941
|
+
static inline double* RandomRutherfordData_getp__rot_x_rad(RandomRutherfordData restrict obj){
|
|
5942
|
+
int64_t offset=0;
|
|
5943
|
+
offset+=80;
|
|
5944
|
+
return ( double*)(( char*) obj+offset);
|
|
5945
|
+
}
|
|
5946
|
+
static inline double RandomRutherfordData_get__rot_y_rad(const RandomRutherfordData restrict obj){
|
|
5947
|
+
int64_t offset=0;
|
|
5948
|
+
offset+=88;
|
|
5949
|
+
return *( double*)(( char*) obj+offset);
|
|
5950
|
+
}
|
|
5951
|
+
static inline void RandomRutherfordData_set__rot_y_rad(RandomRutherfordData restrict obj, double value){
|
|
5952
|
+
int64_t offset=0;
|
|
5953
|
+
offset+=88;
|
|
5954
|
+
*( double*)(( char*) obj+offset)=value;
|
|
5955
|
+
}
|
|
5956
|
+
static inline double* RandomRutherfordData_getp__rot_y_rad(RandomRutherfordData restrict obj){
|
|
5957
|
+
int64_t offset=0;
|
|
5958
|
+
offset+=88;
|
|
5959
|
+
return ( double*)(( char*) obj+offset);
|
|
5960
|
+
}
|
|
5961
|
+
static inline double RandomRutherfordData_get__rot_s_rad_no_frame(const RandomRutherfordData restrict obj){
|
|
5962
|
+
int64_t offset=0;
|
|
5963
|
+
offset+=96;
|
|
5964
|
+
return *( double*)(( char*) obj+offset);
|
|
5965
|
+
}
|
|
5966
|
+
static inline void RandomRutherfordData_set__rot_s_rad_no_frame(RandomRutherfordData restrict obj, double value){
|
|
5967
|
+
int64_t offset=0;
|
|
5968
|
+
offset+=96;
|
|
5969
|
+
*( double*)(( char*) obj+offset)=value;
|
|
5970
|
+
}
|
|
5971
|
+
static inline double* RandomRutherfordData_getp__rot_s_rad_no_frame(RandomRutherfordData restrict obj){
|
|
5972
|
+
int64_t offset=0;
|
|
5973
|
+
offset+=96;
|
|
5974
|
+
return ( double*)(( char*) obj+offset);
|
|
5975
|
+
}
|
|
5976
|
+
static inline double RandomRutherfordData_get_rot_shift_anchor(const RandomRutherfordData restrict obj){
|
|
5977
|
+
int64_t offset=0;
|
|
5978
|
+
offset+=104;
|
|
5979
|
+
return *( double*)(( char*) obj+offset);
|
|
5980
|
+
}
|
|
5981
|
+
static inline void RandomRutherfordData_set_rot_shift_anchor(RandomRutherfordData restrict obj, double value){
|
|
5982
|
+
int64_t offset=0;
|
|
5983
|
+
offset+=104;
|
|
5984
|
+
*( double*)(( char*) obj+offset)=value;
|
|
5985
|
+
}
|
|
5986
|
+
static inline double* RandomRutherfordData_getp_rot_shift_anchor(RandomRutherfordData restrict obj){
|
|
5987
|
+
int64_t offset=0;
|
|
5988
|
+
offset+=104;
|
|
5989
|
+
return ( double*)(( char*) obj+offset);
|
|
5911
5990
|
}
|
|
5912
5991
|
#endif
|
|
5913
5992
|
// copyright ############################### //
|
|
@@ -6119,11 +6198,11 @@ void Drift_single_particle(LocalParticle* part, double length){
|
|
|
6119
6198
|
|
|
6120
6199
|
#endif // XSTUITE_TRACK_FLAGS_H
|
|
6121
6200
|
|
|
6122
|
-
#include <random/random_src/
|
|
6201
|
+
#include <random/random_src/rutherford.h>
|
|
6123
6202
|
|
|
6124
6203
|
|
|
6125
|
-
void
|
|
6126
|
-
|
|
6204
|
+
void sample_ruth(
|
|
6205
|
+
RandomRutherfordData el,
|
|
6127
6206
|
|
|
6128
6207
|
ParticlesData particles,
|
|
6129
6208
|
double* samples, int64_t n_samples_per_seed,
|
|
@@ -6171,7 +6250,7 @@ void Drift_single_particle(LocalParticle* part, double length){
|
|
|
6171
6250
|
if (part_id<part_capacity){
|
|
6172
6251
|
Particles_to_LocalParticle(particles, &lpart, part_id, end_id);
|
|
6173
6252
|
if (check_is_active(&lpart)>0){
|
|
6174
|
-
|
|
6253
|
+
RandomRutherford_sample(el, &lpart, samples, n_samples_per_seed);
|
|
6175
6254
|
|
|
6176
6255
|
}
|
|
6177
6256
|
if (check_is_active(&lpart)>0 && flag_increment_at_element){
|
|
@@ -6190,156 +6269,156 @@ void Drift_single_particle(LocalParticle* part, double length){
|
|
|
6190
6269
|
// #endif //only_for_context cpu_openmp
|
|
6191
6270
|
}
|
|
6192
6271
|
|
|
6193
|
-
#ifndef
|
|
6194
|
-
#define
|
|
6195
|
-
typedef struct
|
|
6196
|
-
static inline
|
|
6272
|
+
#ifndef XOBJ_TYPEDEF_RandomNormalData
|
|
6273
|
+
#define XOBJ_TYPEDEF_RandomNormalData
|
|
6274
|
+
typedef struct RandomNormalData_s * RandomNormalData;
|
|
6275
|
+
static inline RandomNormalData RandomNormalData_getp(RandomNormalData restrict obj){
|
|
6197
6276
|
int64_t offset=0;
|
|
6198
|
-
return (
|
|
6277
|
+
return (RandomNormalData)(( char*) obj+offset);
|
|
6199
6278
|
}
|
|
6200
|
-
static inline uint8_t
|
|
6279
|
+
static inline uint8_t RandomNormalData_get__dummy(const RandomNormalData restrict obj){
|
|
6201
6280
|
int64_t offset=0;
|
|
6202
6281
|
return *(( uint8_t*) obj+offset);
|
|
6203
6282
|
}
|
|
6204
|
-
static inline void
|
|
6283
|
+
static inline void RandomNormalData_set__dummy(RandomNormalData restrict obj, uint8_t value){
|
|
6205
6284
|
int64_t offset=0;
|
|
6206
6285
|
*(( uint8_t*) obj+offset)=value;
|
|
6207
6286
|
}
|
|
6208
|
-
static inline uint8_t*
|
|
6287
|
+
static inline uint8_t* RandomNormalData_getp__dummy(RandomNormalData restrict obj){
|
|
6209
6288
|
int64_t offset=0;
|
|
6210
6289
|
return ( uint8_t*)(( char*) obj+offset);
|
|
6211
6290
|
}
|
|
6212
|
-
static inline double
|
|
6291
|
+
static inline double RandomNormalData_get__sin_rot_s(const RandomNormalData restrict obj){
|
|
6213
6292
|
int64_t offset=0;
|
|
6214
6293
|
offset+=8;
|
|
6215
6294
|
return *( double*)(( char*) obj+offset);
|
|
6216
6295
|
}
|
|
6217
|
-
static inline void
|
|
6296
|
+
static inline void RandomNormalData_set__sin_rot_s(RandomNormalData restrict obj, double value){
|
|
6218
6297
|
int64_t offset=0;
|
|
6219
6298
|
offset+=8;
|
|
6220
6299
|
*( double*)(( char*) obj+offset)=value;
|
|
6221
6300
|
}
|
|
6222
|
-
static inline double*
|
|
6301
|
+
static inline double* RandomNormalData_getp__sin_rot_s(RandomNormalData restrict obj){
|
|
6223
6302
|
int64_t offset=0;
|
|
6224
6303
|
offset+=8;
|
|
6225
6304
|
return ( double*)(( char*) obj+offset);
|
|
6226
6305
|
}
|
|
6227
|
-
static inline double
|
|
6306
|
+
static inline double RandomNormalData_get__cos_rot_s(const RandomNormalData restrict obj){
|
|
6228
6307
|
int64_t offset=0;
|
|
6229
6308
|
offset+=16;
|
|
6230
6309
|
return *( double*)(( char*) obj+offset);
|
|
6231
6310
|
}
|
|
6232
|
-
static inline void
|
|
6311
|
+
static inline void RandomNormalData_set__cos_rot_s(RandomNormalData restrict obj, double value){
|
|
6233
6312
|
int64_t offset=0;
|
|
6234
6313
|
offset+=16;
|
|
6235
6314
|
*( double*)(( char*) obj+offset)=value;
|
|
6236
6315
|
}
|
|
6237
|
-
static inline double*
|
|
6316
|
+
static inline double* RandomNormalData_getp__cos_rot_s(RandomNormalData restrict obj){
|
|
6238
6317
|
int64_t offset=0;
|
|
6239
6318
|
offset+=16;
|
|
6240
6319
|
return ( double*)(( char*) obj+offset);
|
|
6241
6320
|
}
|
|
6242
|
-
static inline double
|
|
6321
|
+
static inline double RandomNormalData_get__shift_x(const RandomNormalData restrict obj){
|
|
6243
6322
|
int64_t offset=0;
|
|
6244
6323
|
offset+=24;
|
|
6245
6324
|
return *( double*)(( char*) obj+offset);
|
|
6246
6325
|
}
|
|
6247
|
-
static inline void
|
|
6326
|
+
static inline void RandomNormalData_set__shift_x(RandomNormalData restrict obj, double value){
|
|
6248
6327
|
int64_t offset=0;
|
|
6249
6328
|
offset+=24;
|
|
6250
6329
|
*( double*)(( char*) obj+offset)=value;
|
|
6251
6330
|
}
|
|
6252
|
-
static inline double*
|
|
6331
|
+
static inline double* RandomNormalData_getp__shift_x(RandomNormalData restrict obj){
|
|
6253
6332
|
int64_t offset=0;
|
|
6254
6333
|
offset+=24;
|
|
6255
6334
|
return ( double*)(( char*) obj+offset);
|
|
6256
6335
|
}
|
|
6257
|
-
static inline double
|
|
6336
|
+
static inline double RandomNormalData_get__shift_y(const RandomNormalData restrict obj){
|
|
6258
6337
|
int64_t offset=0;
|
|
6259
6338
|
offset+=32;
|
|
6260
6339
|
return *( double*)(( char*) obj+offset);
|
|
6261
6340
|
}
|
|
6262
|
-
static inline void
|
|
6341
|
+
static inline void RandomNormalData_set__shift_y(RandomNormalData restrict obj, double value){
|
|
6263
6342
|
int64_t offset=0;
|
|
6264
6343
|
offset+=32;
|
|
6265
6344
|
*( double*)(( char*) obj+offset)=value;
|
|
6266
6345
|
}
|
|
6267
|
-
static inline double*
|
|
6346
|
+
static inline double* RandomNormalData_getp__shift_y(RandomNormalData restrict obj){
|
|
6268
6347
|
int64_t offset=0;
|
|
6269
6348
|
offset+=32;
|
|
6270
6349
|
return ( double*)(( char*) obj+offset);
|
|
6271
6350
|
}
|
|
6272
|
-
static inline double
|
|
6351
|
+
static inline double RandomNormalData_get__shift_s(const RandomNormalData restrict obj){
|
|
6273
6352
|
int64_t offset=0;
|
|
6274
6353
|
offset+=40;
|
|
6275
6354
|
return *( double*)(( char*) obj+offset);
|
|
6276
6355
|
}
|
|
6277
|
-
static inline void
|
|
6356
|
+
static inline void RandomNormalData_set__shift_s(RandomNormalData restrict obj, double value){
|
|
6278
6357
|
int64_t offset=0;
|
|
6279
6358
|
offset+=40;
|
|
6280
6359
|
*( double*)(( char*) obj+offset)=value;
|
|
6281
6360
|
}
|
|
6282
|
-
static inline double*
|
|
6361
|
+
static inline double* RandomNormalData_getp__shift_s(RandomNormalData restrict obj){
|
|
6283
6362
|
int64_t offset=0;
|
|
6284
6363
|
offset+=40;
|
|
6285
6364
|
return ( double*)(( char*) obj+offset);
|
|
6286
6365
|
}
|
|
6287
|
-
static inline double
|
|
6366
|
+
static inline double RandomNormalData_get__rot_x_rad(const RandomNormalData restrict obj){
|
|
6288
6367
|
int64_t offset=0;
|
|
6289
6368
|
offset+=48;
|
|
6290
6369
|
return *( double*)(( char*) obj+offset);
|
|
6291
6370
|
}
|
|
6292
|
-
static inline void
|
|
6371
|
+
static inline void RandomNormalData_set__rot_x_rad(RandomNormalData restrict obj, double value){
|
|
6293
6372
|
int64_t offset=0;
|
|
6294
6373
|
offset+=48;
|
|
6295
6374
|
*( double*)(( char*) obj+offset)=value;
|
|
6296
6375
|
}
|
|
6297
|
-
static inline double*
|
|
6376
|
+
static inline double* RandomNormalData_getp__rot_x_rad(RandomNormalData restrict obj){
|
|
6298
6377
|
int64_t offset=0;
|
|
6299
6378
|
offset+=48;
|
|
6300
6379
|
return ( double*)(( char*) obj+offset);
|
|
6301
6380
|
}
|
|
6302
|
-
static inline double
|
|
6381
|
+
static inline double RandomNormalData_get__rot_y_rad(const RandomNormalData restrict obj){
|
|
6303
6382
|
int64_t offset=0;
|
|
6304
6383
|
offset+=56;
|
|
6305
6384
|
return *( double*)(( char*) obj+offset);
|
|
6306
6385
|
}
|
|
6307
|
-
static inline void
|
|
6386
|
+
static inline void RandomNormalData_set__rot_y_rad(RandomNormalData restrict obj, double value){
|
|
6308
6387
|
int64_t offset=0;
|
|
6309
6388
|
offset+=56;
|
|
6310
6389
|
*( double*)(( char*) obj+offset)=value;
|
|
6311
6390
|
}
|
|
6312
|
-
static inline double*
|
|
6391
|
+
static inline double* RandomNormalData_getp__rot_y_rad(RandomNormalData restrict obj){
|
|
6313
6392
|
int64_t offset=0;
|
|
6314
6393
|
offset+=56;
|
|
6315
6394
|
return ( double*)(( char*) obj+offset);
|
|
6316
6395
|
}
|
|
6317
|
-
static inline double
|
|
6396
|
+
static inline double RandomNormalData_get__rot_s_rad_no_frame(const RandomNormalData restrict obj){
|
|
6318
6397
|
int64_t offset=0;
|
|
6319
6398
|
offset+=64;
|
|
6320
6399
|
return *( double*)(( char*) obj+offset);
|
|
6321
6400
|
}
|
|
6322
|
-
static inline void
|
|
6401
|
+
static inline void RandomNormalData_set__rot_s_rad_no_frame(RandomNormalData restrict obj, double value){
|
|
6323
6402
|
int64_t offset=0;
|
|
6324
6403
|
offset+=64;
|
|
6325
6404
|
*( double*)(( char*) obj+offset)=value;
|
|
6326
6405
|
}
|
|
6327
|
-
static inline double*
|
|
6406
|
+
static inline double* RandomNormalData_getp__rot_s_rad_no_frame(RandomNormalData restrict obj){
|
|
6328
6407
|
int64_t offset=0;
|
|
6329
6408
|
offset+=64;
|
|
6330
6409
|
return ( double*)(( char*) obj+offset);
|
|
6331
6410
|
}
|
|
6332
|
-
static inline double
|
|
6411
|
+
static inline double RandomNormalData_get_rot_shift_anchor(const RandomNormalData restrict obj){
|
|
6333
6412
|
int64_t offset=0;
|
|
6334
6413
|
offset+=72;
|
|
6335
6414
|
return *( double*)(( char*) obj+offset);
|
|
6336
6415
|
}
|
|
6337
|
-
static inline void
|
|
6416
|
+
static inline void RandomNormalData_set_rot_shift_anchor(RandomNormalData restrict obj, double value){
|
|
6338
6417
|
int64_t offset=0;
|
|
6339
6418
|
offset+=72;
|
|
6340
6419
|
*( double*)(( char*) obj+offset)=value;
|
|
6341
6420
|
}
|
|
6342
|
-
static inline double*
|
|
6421
|
+
static inline double* RandomNormalData_getp_rot_shift_anchor(RandomNormalData restrict obj){
|
|
6343
6422
|
int64_t offset=0;
|
|
6344
6423
|
offset+=72;
|
|
6345
6424
|
return ( double*)(( char*) obj+offset);
|
|
@@ -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/
|
|
6636
|
+
#include <random/random_src/normal.h>
|
|
6558
6637
|
|
|
6559
6638
|
|
|
6560
|
-
void
|
|
6561
|
-
|
|
6639
|
+
void sample_gauss(
|
|
6640
|
+
RandomNormalData 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
|
-
|
|
6688
|
+
RandomNormal_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
|
|
6629
|
-
#define
|
|
6630
|
-
typedef struct
|
|
6631
|
-
static inline
|
|
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 (
|
|
6712
|
+
return (RandomExponentialData)(( char*) obj+offset);
|
|
6634
6713
|
}
|
|
6635
|
-
static inline
|
|
6714
|
+
static inline uint8_t RandomExponentialData_get__dummy(const RandomExponentialData restrict obj){
|
|
6636
6715
|
int64_t offset=0;
|
|
6637
|
-
return *(
|
|
6716
|
+
return *(( uint8_t*) obj+offset);
|
|
6638
6717
|
}
|
|
6639
|
-
static inline void
|
|
6718
|
+
static inline void RandomExponentialData_set__dummy(RandomExponentialData restrict obj, uint8_t value){
|
|
6640
6719
|
int64_t offset=0;
|
|
6641
|
-
*(
|
|
6720
|
+
*(( uint8_t*) obj+offset)=value;
|
|
6642
6721
|
}
|
|
6643
|
-
static inline
|
|
6722
|
+
static inline uint8_t* RandomExponentialData_getp__dummy(RandomExponentialData restrict obj){
|
|
6644
6723
|
int64_t offset=0;
|
|
6645
|
-
return (
|
|
6724
|
+
return ( uint8_t*)(( char*) obj+offset);
|
|
6646
6725
|
}
|
|
6647
|
-
static inline double
|
|
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
|
|
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*
|
|
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
|
|
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
|
|
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*
|
|
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
|
|
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
|
|
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*
|
|
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
|
|
6771
|
+
static inline double RandomExponentialData_get__shift_y(const RandomExponentialData restrict obj){
|
|
6693
6772
|
int64_t offset=0;
|
|
6694
6773
|
offset+=32;
|
|
6695
|
-
return *((
|
|
6774
|
+
return *( double*)(( char*) obj+offset);
|
|
6696
6775
|
}
|
|
6697
|
-
static inline void
|
|
6776
|
+
static inline void RandomExponentialData_set__shift_y(RandomExponentialData restrict obj, double value){
|
|
6698
6777
|
int64_t offset=0;
|
|
6699
6778
|
offset+=32;
|
|
6700
|
-
*((
|
|
6779
|
+
*( double*)(( char*) obj+offset)=value;
|
|
6701
6780
|
}
|
|
6702
|
-
static inline
|
|
6781
|
+
static inline double* RandomExponentialData_getp__shift_y(RandomExponentialData restrict obj){
|
|
6703
6782
|
int64_t offset=0;
|
|
6704
6783
|
offset+=32;
|
|
6705
|
-
return (
|
|
6784
|
+
return ( double*)(( char*) obj+offset);
|
|
6706
6785
|
}
|
|
6707
|
-
static inline double
|
|
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
|
|
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*
|
|
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
|
|
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
|
|
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*
|
|
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
|
|
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
|
|
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*
|
|
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
|
|
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
|
|
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*
|
|
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
|
|
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
|
|
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*
|
|
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/
|
|
7071
|
+
#include <random/random_src/exponential.h>
|
|
7053
7072
|
|
|
7054
7073
|
|
|
7055
|
-
void
|
|
7056
|
-
|
|
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
|
-
|
|
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;
|