Skip to content

Commit bf84c95

Browse files
committed
formatting
1 parent 55acf39 commit bf84c95

File tree

3 files changed

+35
-23
lines changed

3 files changed

+35
-23
lines changed

atintegrators/BndMPoleSymplectic4QuantPass.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,13 @@ void BndMPoleSymplectic4QuantPass(double *r, double le, double irho, double *A,
7676

7777
/* The behaviour of random generators with OpenMP is doubtful. OpenMP disabled until
7878
it's understood
79+
*/
7980
#pragma omp parallel for if (num_particles > OMP_PARTICLE_THRESHOLD) default(none) \
8081
shared(r,num_particles,R1,T1,R2,T2,RApertures,EApertures, \
8182
irho,gap,A,B,L1,L2,K1,K2,max_order,num_int_steps,rng,E0,scaling, \
8283
FringeBendEntrance,entrance_angle,fint1,FringeBendExit,exit_angle,fint2, \
83-
FringeQuadEntrance,useLinFrEleEntrance,FringeQuadExit,useLinFrEleExit,fringeIntM0, ringeIntP0, \
84+
FringeQuadEntrance,useLinFrEleEntrance,FringeQuadExit,useLinFrEleExit,fringeIntM0, fringeIntP0, \
8485
emass,hbar,clight,alpha0,qe,SL)
85-
*/
8686
for (int c = 0; c < num_particles; c++) { /* Loop over particles */
8787
double *r6 = r + 6*c;
8888
if (!atIsNaN(r6[0])) {

atintegrators/StrMPoleSymplectic4QuantPass.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,12 @@ void StrMPoleSymplectic4QuantPass(double *r, double le, double *A, double *B,
6262
}
6363
/* The behaviour of random generators with OpenMP is doubtful. OpenMP disabled until
6464
it's understood
65+
*/
6566
#pragma omp parallel for if (num_particles > OMP_PARTICLE_THRESHOLD) default(none) \
6667
shared(r,num_particles,R1,T1,R2,T2,RApertures,EApertures, \
6768
A,B,L1,L2,K1,K2,max_order,num_int_steps,rng,scaling, \
6869
FringeQuadEntrance, useLinFrEleEntrance,FringeQuadExit,useLinFrEleExit,fringeIntM0,fringeIntP0, \
6970
emass,E0,hbar,clight,alpha0,qe,SL)
70-
*/
7171
for (int c = 0; c<num_particles; c++) { /* Loop over particles */
7272
double *r6 = r + 6*c;
7373
if (!atIsNaN(r6[0])) {

atintegrators/atrandom.c

+32-20
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@
2222
*/
2323
#include <math.h>
2424
#include <stdint.h>
25+
#ifdef _OPENMP
26+
#include <omp.h>
27+
#endif /*_OPENMP*/
2528

2629
/* initial RNG definitions */
2730
#define AT_RNG_STATE 0x853c49e6748fea9bULL
@@ -53,10 +56,14 @@ static uint32_t pcg32_random_r(pcg32_random_t* rng)
5356
{
5457
if (!rng) rng = &pcg32_global;
5558
uint64_t oldstate;
56-
#pragma omp atomic read
57-
oldstate = rng->state;
58-
#pragma omp atomic write
59-
rng->state = oldstate * 6364136223846793005ULL + rng->inc;
59+
uint64_t inc = rng->inc;
60+
uint64_t *state = &(rng->state);
61+
// #pragma omp atomic capture
62+
#pragma omp critical(pgc32)
63+
{
64+
oldstate = *state;
65+
*state = oldstate * 6364136223846793005ULL + inc;
66+
}
6067
uint32_t xorshifted = ((oldstate >> 18u) ^ oldstate) >> 27u;
6168
uint32_t rot = oldstate >> 59u;
6269
return (xorshifted >> rot) | (xorshifted << ((-rot) & 31));
@@ -101,23 +108,28 @@ static double atrandn_r(pcg32_random_t* rng, double mean, double stdDev)
101108
{
102109
/* Marsaglia polar method: https://en.wikipedia.org/wiki/Marsaglia_polar_method */
103110

104-
double u, v, s;
105-
106-
if (rng->hasSpare) {
107-
rng->hasSpare = false;
108-
return mean + stdDev * rng->spare;
109-
}
110-
111-
rng->hasSpare = true;
112-
do {
113-
u = 2.0 * atrandd_r(rng) - 1.0;
114-
v = 2.0 * atrandd_r(rng) - 1.0;
115-
s = u * u + v * v;
111+
double u, v, s, result;
112+
113+
#pragma omp critical(randn)
114+
{
115+
if (rng->hasSpare) {
116+
rng->hasSpare = false;
117+
result = mean + stdDev * rng->spare;
118+
}
119+
else {
120+
rng->hasSpare = true;
121+
do {
122+
u = 2.0 * atrandd_r(rng) - 1.0;
123+
v = 2.0 * atrandd_r(rng) - 1.0;
124+
s = u * u + v * v;
125+
}
126+
while ((s >= 1.0) || (s == 0.0));
127+
s = sqrt(-2.0 * log(s) / s);
128+
rng->spare = v * s;
129+
result = mean + stdDev * u * s;
130+
}
116131
}
117-
while ((s >= 1.0) || (s == 0.0));
118-
s = sqrt(-2.0 * log(s) / s);
119-
rng->spare = v * s;
120-
return mean + stdDev * u * s;
132+
return result;
121133
}
122134

123135
static int atrandp_r(pcg32_random_t* rng, double lamb)

0 commit comments

Comments
 (0)