124 int mpi_rank,
int mpi_size,
int mpi_root) {
126 const int n_real = 32;
132 if(mpi_rank == mpi_root) {
136 for(
int j = 0; j < n; j++) {
140 for(
int i = 1; i < mpi_size; i++) {
143 real* realdata = (
real*) malloc(n_real * n *
sizeof(realdata));
144 integer* intdata = (
integer*) malloc(n_int * n *
sizeof(intdata));
145 a5err* errdata = (
a5err*) malloc(n_err * n *
sizeof(intdata));
148 MPI_COMM_WORLD, MPI_STATUS_IGNORE);
150 MPI_COMM_WORLD, MPI_STATUS_IGNORE);
152 MPI_COMM_WORLD, MPI_STATUS_IGNORE);
154 for(
int j = 0; j < n; j++) {
155 ps_all[start_index+j].
r = realdata[0*n+j];
156 ps_all[start_index+j].
phi = realdata[1*n+j];
157 ps_all[start_index+j].
z = realdata[2*n+j];
158 ps_all[start_index+j].
ppar = realdata[3*n+j];
159 ps_all[start_index+j].
mu = realdata[4*n+j];
160 ps_all[start_index+j].
zeta = realdata[5*n+j];
161 ps_all[start_index+j].
rprt = realdata[6*n+j];
162 ps_all[start_index+j].
phiprt = realdata[7*n+j];
163 ps_all[start_index+j].
zprt = realdata[8*n+j];
164 ps_all[start_index+j].
p_r = realdata[9*n+j];
165 ps_all[start_index+j].
p_phi = realdata[10*n+j];
166 ps_all[start_index+j].
p_z = realdata[11*n+j];
167 ps_all[start_index+j].
mass = realdata[12*n+j];
168 ps_all[start_index+j].
charge = realdata[13*n+j];
169 ps_all[start_index+j].
anum = intdata[0*n+j];
170 ps_all[start_index+j].
znum = intdata[1*n+j];
171 ps_all[start_index+j].
weight = realdata[14*n+j];
172 ps_all[start_index+j].
time = realdata[15*n+j];
173 ps_all[start_index+j].
cputime = realdata[16*n+j];
174 ps_all[start_index+j].
rho = realdata[17*n+j];
175 ps_all[start_index+j].
theta = realdata[18*n+j];
176 ps_all[start_index+j].
id = intdata[2*n+j];
177 ps_all[start_index+j].
endcond = intdata[3*n+j];
178 ps_all[start_index+j].
walltile = intdata[4*n+j];
179 ps_all[start_index+j].
B_r = realdata[19*n+j];
180 ps_all[start_index+j].
B_phi = realdata[20*n+j];
181 ps_all[start_index+j].
B_z = realdata[21*n+j];
182 ps_all[start_index+j].
B_r_dr = realdata[22*n+j];
183 ps_all[start_index+j].
B_phi_dr = realdata[23*n+j];
184 ps_all[start_index+j].
B_z_dr = realdata[24*n+j];
185 ps_all[start_index+j].
B_r_dphi = realdata[25*n+j];
186 ps_all[start_index+j].
B_phi_dphi = realdata[26*n+j];
187 ps_all[start_index+j].
B_z_dphi = realdata[27*n+j];
188 ps_all[start_index+j].
B_r_dz = realdata[28*n+j];
189 ps_all[start_index+j].
B_phi_dz = realdata[29*n+j];
190 ps_all[start_index+j].
B_z_dz = realdata[30*n+j];
191 ps_all[start_index+j].
mileage = realdata[31*n+j];
192 ps_all[start_index+j].
err = errdata[j];
206 realdata = malloc(n_real * n *
sizeof(realdata));
208 intdata = malloc(n_int * n *
sizeof(intdata));
210 errdata = malloc(n_err * n *
sizeof(intdata));
212 for(
int j = 0; j < n; j++) {
213 realdata[0*n+j] = ps[j].
r;
214 realdata[1*n+j] = ps[j].
phi;
215 realdata[2*n+j] = ps[j].
z;
216 realdata[3*n+j] = ps[j].
ppar;
217 realdata[4*n+j] = ps[j].
mu;
218 realdata[5*n+j] = ps[j].
zeta;
219 realdata[6*n+j] = ps[j].
rprt;
220 realdata[7*n+j] = ps[j].
phiprt;
221 realdata[8*n+j] = ps[j].
zprt;
222 realdata[9*n+j] = ps[j].
p_r;
223 realdata[10*n+j] = ps[j].
p_phi;
224 realdata[11*n+j] = ps[j].
p_z;
225 realdata[12*n+j] = ps[j].
mass;
226 realdata[13*n+j] = ps[j].
charge;
227 intdata[0*n+j] = ps[j].
anum;
228 intdata[1*n+j] = ps[j].
znum;
229 realdata[14*n+j] = ps[j].
weight;
230 realdata[15*n+j] = ps[j].
time;
231 realdata[16*n+j] = ps[j].
cputime;
232 realdata[17*n+j] = ps[j].
rho;
233 realdata[18*n+j] = ps[j].
theta;
234 intdata[2*n+j] = ps[j].
id;
235 intdata[3*n+j] = ps[j].
endcond;
237 realdata[19*n+j] = ps[j].
B_r;
238 realdata[20*n+j] = ps[j].
B_phi;
239 realdata[21*n+j] = ps[j].
B_z;
240 realdata[22*n+j] = ps[j].
B_r_dr;
242 realdata[24*n+j] = ps[j].
B_z_dr;
246 realdata[28*n+j] = ps[j].
B_r_dz;
248 realdata[30*n+j] = ps[j].
B_z_dz;
249 realdata[31*n+j] = ps[j].
mileage;
250 errdata[j] = ps[j].
err;
253 MPI_Send(realdata, n_real*n,
mpi_type_real, 0, 0, MPI_COMM_WORLD);
273 for(
int j = 0; j < n; j++) {
338 if(mpi_rank == mpi_root) {
368 for(
int i = 1; i < mpi_size; i++) {
374 MPI_COMM_WORLD, MPI_STATUS_IGNORE);
378 MPI_COMM_WORLD, MPI_STATUS_IGNORE);
382 MPI_COMM_WORLD, MPI_STATUS_IGNORE);
386 MPI_COMM_WORLD, MPI_STATUS_IGNORE);
390 MPI_COMM_WORLD, MPI_STATUS_IGNORE);
395 MPI_COMM_WORLD, MPI_STATUS_IGNORE);
399 MPI_COMM_WORLD, MPI_STATUS_IGNORE);
403 MPI_COMM_WORLD, MPI_STATUS_IGNORE);
409 MPI_COMM_WORLD, MPI_STATUS_IGNORE);
413 MPI_COMM_WORLD, MPI_STATUS_IGNORE);
417 MPI_COMM_WORLD, MPI_STATUS_IGNORE);
423 MPI_COMM_WORLD, MPI_STATUS_IGNORE);
428 MPI_COMM_WORLD, MPI_STATUS_IGNORE);
432 MPI_COMM_WORLD, MPI_STATUS_IGNORE);
436 MPI_COMM_WORLD, MPI_STATUS_IGNORE);
440 MPI_COMM_WORLD, MPI_STATUS_IGNORE);
444 MPI_COMM_WORLD, MPI_STATUS_IGNORE);
448 MPI_COMM_WORLD, MPI_STATUS_IGNORE);
452 MPI_COMM_WORLD, MPI_STATUS_IGNORE);
457 MPI_COMM_WORLD, MPI_STATUS_IGNORE);
461 MPI_COMM_WORLD, MPI_STATUS_IGNORE);
523 if(mpi_rank == mpi_root) {
534 for(
int i = 1; i < mpi_size; i++) {
539 i, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
541 i, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
543 i, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
550 0, 0, MPI_COMM_WORLD);
552 0, 0, MPI_COMM_WORLD);
554 0, 0, MPI_COMM_WORLD);
void mpi_gather_particlestate(particle_state *ps, particle_state **ps_gather, int *n_gather, int n_tot, int mpi_rank, int mpi_size, int mpi_root)
Gather all particle states to the root process.
Header file for particle.c.
General representation of a marker.