active.h 20.2 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/*******************************************************************************
 * This file is part of SWIFT.
 * Copyright (c) 2016 Matthieu Schaller (matthieu.schaller@durham.ac.uk)
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published
 * by the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 ******************************************************************************/
#ifndef SWIFT_ACTIVE_H
#define SWIFT_ACTIVE_H

/* Config parameters. */
#include "../config.h"

/* Local includes. */
#include "cell.h"
#include "engine.h"
#include "part.h"
29
#include "timeline.h"
30

31
/**
32
 * @brief Check that the #part in a #cell have been drifted to the current time.
33
34
35
 *
 * @param c The #cell.
 * @param e The #engine containing information about the current time.
36
 * @return 1 if the #cell has been drifted to the current time, 0 otherwise.
37
 */
38
__attribute__((always_inline)) INLINE static int cell_are_part_drifted(
39
40
41
    const struct cell *c, const struct engine *e) {

#ifdef SWIFT_DEBUG_CHECKS
42
  if (c->hydro.ti_old_part > e->ti_current)
43
    error(
44
45
        "Cell has been drifted too far forward in time! c->ti_old_part=%lld "
        "(t=%e) "
46
        "and e->ti_current=%lld (t=%e, a=%e)",
47
48
        c->hydro.ti_old_part, c->hydro.ti_old_part * e->time_base,
        e->ti_current, e->ti_current * e->time_base, e->cosmology->a);
49
#endif
Matthieu Schaller's avatar
Matthieu Schaller committed
50

51
  return (c->hydro.ti_old_part == e->ti_current);
52
53
54
55
56
57
58
59
60
61
62
63
64
65
}

/**
 * @brief Check that the #gpart in a #cell have been drifted to the current
 * time.
 *
 * @param c The #cell.
 * @param e The #engine containing information about the current time.
 * @return 1 if the #cell has been drifted to the current time, 0 otherwise.
 */
__attribute__((always_inline)) INLINE static int cell_are_gpart_drifted(
    const struct cell *c, const struct engine *e) {

#ifdef SWIFT_DEBUG_CHECKS
66
  if (c->grav.ti_old_part > e->ti_current)
67
68
69
    error(
        "Cell has been drifted too far forward in time! c->ti_old=%lld (t=%e) "
        "and e->ti_current=%lld (t=%e)",
70
71
        c->grav.ti_old_part, c->grav.ti_old_part * e->time_base, e->ti_current,
        e->ti_current * e->time_base);
72
73
#endif

74
  return (c->grav.ti_old_part == e->ti_current);
75
76
}

Loic Hausammann's avatar
Loic Hausammann committed
77
78
79
80
81
82
83
84
85
86
87
/**
 * @brief Check that the #spart in a #cell have been drifted to the current
 * time.
 *
 * @param c The #cell.
 * @param e The #engine containing information about the current time.
 * @return 1 if the #cell has been drifted to the current time, 0 otherwise.
 */
__attribute__((always_inline)) INLINE static int cell_are_spart_drifted(
    const struct cell *c, const struct engine *e) {

88
89
90
91
92
93
94
95
96
97
#ifdef SWIFT_DEBUG_CHECKS
  if (c->stars.ti_old_part > e->ti_current)
    error(
        "Cell has been drifted too far forward in time! c->ti_old=%lld (t=%e) "
        "and e->ti_current=%lld (t=%e)",
        c->stars.ti_old_part, c->stars.ti_old_part * e->time_base,
        e->ti_current, e->ti_current * e->time_base);
#endif

  return (c->stars.ti_old_part == e->ti_current);
Loic Hausammann's avatar
Loic Hausammann committed
98
99
}

100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/**
 * @brief Check that the #bpart in a #cell have been drifted to the current
 * time.
 *
 * @param c The #cell.
 * @param e The #engine containing information about the current time.
 * @return 1 if the #cell has been drifted to the current time, 0 otherwise.
 */
__attribute__((always_inline)) INLINE static int cell_are_bpart_drifted(
    const struct cell *c, const struct engine *e) {

#ifdef SWIFT_DEBUG_CHECKS
  if (c->black_holes.ti_old_part > e->ti_current)
    error(
        "Cell has been drifted too far forward in time! c->ti_old=%lld (t=%e) "
        "and e->ti_current=%lld (t=%e)",
        c->black_holes.ti_old_part, c->black_holes.ti_old_part * e->time_base,
        e->ti_current, e->ti_current * e->time_base);
#endif

  return (c->black_holes.ti_old_part == e->ti_current);
}

123
124
/* Are cells / particles active for regular tasks ? */

125
/**
126
 * @brief Does a cell contain any particle finishing their time-step now ?
127
128
129
 *
 * @param c The #cell.
 * @param e The #engine containing information about the current time.
Matthieu Schaller's avatar
Matthieu Schaller committed
130
 * @return 1 if the #cell contains at least an active particle, 0 otherwise.
131
 */
132
__attribute__((always_inline)) INLINE static int cell_is_active_hydro(
133
134
    const struct cell *c, const struct engine *e) {

135
#ifdef SWIFT_DEBUG_CHECKS
136
  if (c->hydro.ti_end_min < e->ti_current)
137
    error(
138
        "cell in an impossible time-zone! c->ti_end_min=%lld (t=%e) and "
139
        "e->ti_current=%lld (t=%e, a=%e) c->nodeID=%d",
140
        c->hydro.ti_end_min, c->hydro.ti_end_min * e->time_base, e->ti_current,
141
        e->ti_current * e->time_base, e->cosmology->a, c->nodeID);
142
143
#endif

144
  return (c->hydro.ti_end_min == e->ti_current);
145
146
147
}

/**
148
 * @brief Are *all* particles in a cell finishing their time-step now ?
149
150
151
 *
 * @param c The #cell.
 * @param e The #engine containing information about the current time.
Matthieu Schaller's avatar
Matthieu Schaller committed
152
 * @return 1 if all particles in a #cell are active, 0 otherwise.
153
 */
154
__attribute__((always_inline)) INLINE static int cell_is_all_active_hydro(
155
156
    const struct cell *c, const struct engine *e) {

157
#ifdef SWIFT_DEBUG_CHECKS
158
  if (c->hydro.count > 0 && c->hydro.ti_end_max < e->ti_current)
159
160
161
    error(
        "cell in an impossible time-zone! c->ti_end_max=%lld "
        "e->ti_current=%lld",
162
        c->hydro.ti_end_max, e->ti_current);
163
164
#endif

165
  return (c->hydro.ti_end_max == e->ti_current);
166
167
168
169
170
171
172
173
174
175
176
177
178
}

/**
 * @brief Does a cell contain any g-particle finishing their time-step now ?
 *
 * @param c The #cell.
 * @param e The #engine containing information about the current time.
 * @return 1 if the #cell contains at least an active particle, 0 otherwise.
 */
__attribute__((always_inline)) INLINE static int cell_is_active_gravity(
    const struct cell *c, const struct engine *e) {

#ifdef SWIFT_DEBUG_CHECKS
179
  if (c->grav.ti_end_min < e->ti_current)
180
181
    error(
        "cell in an impossible time-zone! c->ti_end_min=%lld (t=%e) and "
182
        "e->ti_current=%lld (t=%e, a=%e)",
183
184
        c->grav.ti_end_min, c->grav.ti_end_min * e->time_base, e->ti_current,
        e->ti_current * e->time_base, e->cosmology->a);
185
186
#endif

187
  return (c->grav.ti_end_min == e->ti_current);
188
189
}

190
/**
Matthieu Schaller's avatar
Matthieu Schaller committed
191
 * @brief Does a cell contain any multipole requiring calculation ?
192
193
194
195
196
197
198
199
 *
 * @param c The #cell.
 * @param e The #engine containing information about the current time.
 * @return 1 if the #cell contains at least an active particle, 0 otherwise.
 */
__attribute__((always_inline)) INLINE static int cell_is_active_gravity_mm(
    const struct cell *c, const struct engine *e) {

200
  return (c->grav.ti_end_min == e->ti_current);
201
202
}

203
204
205
206
207
208
209
210
211
212
213
/**
 * @brief Are *all* g-particles in a cell finishing their time-step now ?
 *
 * @param c The #cell.
 * @param e The #engine containing information about the current time.
 * @return 1 if all particles in a #cell are active, 0 otherwise.
 */
__attribute__((always_inline)) INLINE static int cell_is_all_active_gravity(
    const struct cell *c, const struct engine *e) {

#ifdef SWIFT_DEBUG_CHECKS
214
  if (c->grav.count > 0 && c->grav.ti_end_max < e->ti_current)
215
216
217
    error(
        "cell in an impossible time-zone! c->ti_end_max=%lld "
        "e->ti_current=%lld",
218
        c->grav.ti_end_max, e->ti_current);
219
220
#endif

221
  return (c->grav.ti_end_max == e->ti_current);
222
223
}

224
225
226
227
228
229
230
/**
 * @brief Does a cell contain any s-particle finishing their time-step now ?
 *
 * @param c The #cell.
 * @param e The #engine containing information about the current time.
 * @return 1 if the #cell contains at least an active particle, 0 otherwise.
 */
Loic Hausammann's avatar
Loic Hausammann committed
231
__attribute__((always_inline)) INLINE static int cell_is_active_stars(
232
233
    const struct cell *c, const struct engine *e) {

Loic Hausammann's avatar
Loic Hausammann committed
234
235
236
237
238
239
240
241
#ifdef SWIFT_DEBUG_CHECKS
  if (c->stars.ti_end_min < e->ti_current)
    error(
        "cell in an impossible time-zone! c->ti_end_min=%lld (t=%e) and "
        "e->ti_current=%lld (t=%e, a=%e)",
        c->stars.ti_end_min, c->stars.ti_end_min * e->time_base, e->ti_current,
        e->ti_current * e->time_base, e->cosmology->a);
#endif
242

Loic Hausammann's avatar
Loic Hausammann committed
243
  return (c->stars.ti_end_min == e->ti_current);
244
245
}

246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
/**
 * @brief Does a cell contain any b-particle finishing their time-step now ?
 *
 * @param c The #cell.
 * @param e The #engine containing information about the current time.
 * @return 1 if the #cell contains at least an active particle, 0 otherwise.
 */
__attribute__((always_inline)) INLINE static int cell_is_active_black_holes(
    const struct cell *c, const struct engine *e) {

#ifdef SWIFT_DEBUG_CHECKS
  if (c->black_holes.ti_end_min < e->ti_current)
    error(
        "cell in an impossible time-zone! c->ti_end_min=%lld (t=%e) and "
        "e->ti_current=%lld (t=%e, a=%e)",
261
262
        c->black_holes.ti_end_min, c->black_holes.ti_end_min * e->time_base,
        e->ti_current, e->ti_current * e->time_base, e->cosmology->a);
263
264
265
266
267
#endif

  return (c->black_holes.ti_end_min == e->ti_current);
}

268
/**
269
 * @brief Is this particle finishing its time-step now ?
270
271
272
 *
 * @param p The #part.
 * @param e The #engine containing information about the current time.
273
 * @return 1 if the #part is active, 0 otherwise.
274
275
276
277
 */
__attribute__((always_inline)) INLINE static int part_is_active(
    const struct part *p, const struct engine *e) {

278
279
  const timebin_t max_active_bin = e->max_active_bin;
  const timebin_t part_bin = p->time_bin;
280

281
#ifdef SWIFT_DEBUG_CHECKS
282
283
  const integertime_t ti_current = e->ti_current;
  const integertime_t ti_end = get_integer_time_end(ti_current, p->time_bin);
284
285
286
287
288
  if (ti_end < ti_current)
    error(
        "particle in an impossible time-zone! p->ti_end=%lld "
        "e->ti_current=%lld",
        ti_end, ti_current);
289
290
#endif

291
  return (part_bin <= max_active_bin);
292
293
}

294
295
296
297
298
299
300
301
__attribute__((always_inline)) INLINE static int part_is_active_no_debug(
    const struct part *p, const timebin_t max_active_bin) {

  const timebin_t part_bin = p->time_bin;

  return (part_bin <= max_active_bin);
}

302
/**
303
 * @brief Is this g-particle finishing its time-step now ?
304
305
306
 *
 * @param gp The #gpart.
 * @param e The #engine containing information about the current time.
307
 * @return 1 if the #gpart is active, 0 otherwise.
308
309
310
311
 */
__attribute__((always_inline)) INLINE static int gpart_is_active(
    const struct gpart *gp, const struct engine *e) {

312
313
314
315
  const timebin_t max_active_bin = e->max_active_bin;
  const timebin_t gpart_bin = gp->time_bin;

#ifdef SWIFT_DEBUG_CHECKS
316
317
318
319
  const integertime_t ti_current = e->ti_current;
  const integertime_t ti_end = get_integer_time_end(ti_current, gp->time_bin);

  if (ti_end < ti_current)
320
    error(
321
322
323
        "g-particle in an impossible time-zone! gp->ti_end=%lld "
        "e->ti_current=%lld",
        ti_end, ti_current);
324
325
#endif

326
  return (gpart_bin <= max_active_bin);
327
328
}

329
/**
Matthieu Schaller's avatar
Matthieu Schaller committed
330
 * @brief Is this s-particle finishing its time-step now ?
331
332
333
334
335
336
337
338
 *
 * @param sp The #spart.
 * @param e The #engine containing information about the current time.
 * @return 1 if the #spart is active, 0 otherwise.
 */
__attribute__((always_inline)) INLINE static int spart_is_active(
    const struct spart *sp, const struct engine *e) {

339
340
341
342
  const timebin_t max_active_bin = e->max_active_bin;
  const timebin_t spart_bin = sp->time_bin;

#ifdef SWIFT_DEBUG_CHECKS
343
344
345
346
347
  const integertime_t ti_current = e->ti_current;
  const integertime_t ti_end = get_integer_time_end(ti_current, sp->time_bin);

  if (ti_end < ti_current)
    error(
Matthieu Schaller's avatar
Matthieu Schaller committed
348
        "s-particle in an impossible time-zone! sp->ti_end=%lld "
349
350
351
352
        "e->ti_current=%lld",
        ti_end, ti_current);
#endif

353
  return (spart_bin <= max_active_bin);
354
355
}

356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
/**
 * @brief Is this b-particle finishing its time-step now ?
 *
 * @param bp The #bpart.
 * @param e The #engine containing information about the current time.
 * @return 1 if the #bpart is active, 0 otherwise.
 */
__attribute__((always_inline)) INLINE static int bpart_is_active(
    const struct bpart *bp, const struct engine *e) {

  const timebin_t max_active_bin = e->max_active_bin;
  const timebin_t bpart_bin = bp->time_bin;

#ifdef SWIFT_DEBUG_CHECKS
  const integertime_t ti_current = e->ti_current;
  const integertime_t ti_end = get_integer_time_end(ti_current, bp->time_bin);

  if (ti_end < ti_current)
    error(
375
        "b-particle in an impossible time-zone! bp->ti_end=%lld "
376
377
378
379
380
381
382
        "e->ti_current=%lld",
        ti_end, ti_current);
#endif

  return (bpart_bin <= max_active_bin);
}

383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
/**
 * @brief Has this particle been inhibited?
 *
 * @param p The #part.
 * @param e The #engine containing information about the current time.
 * @return 1 if the #part is inhibited, 0 otherwise.
 */
__attribute__((always_inline)) INLINE static int part_is_inhibited(
    const struct part *p, const struct engine *e) {
  return p->time_bin == time_bin_inhibited;
}

/**
 * @brief Has this gravity particle been inhibited?
 *
 * @param gp The #gpart.
 * @param e The #engine containing information about the current time.
 * @return 1 if the #part is inhibited, 0 otherwise.
 */
__attribute__((always_inline)) INLINE static int gpart_is_inhibited(
    const struct gpart *gp, const struct engine *e) {
  return gp->time_bin == time_bin_inhibited;
}

/**
 * @brief Has this star particle been inhibited?
 *
 * @param sp The #spart.
 * @param e The #engine containing information about the current time.
 * @return 1 if the #part is inhibited, 0 otherwise.
 */
__attribute__((always_inline)) INLINE static int spart_is_inhibited(
    const struct spart *sp, const struct engine *e) {
  return sp->time_bin == time_bin_inhibited;
}

419
420
421
/**
 * @brief Has this black hole particle been inhibited?
 *
Matthieu Schaller's avatar
Matthieu Schaller committed
422
 * @param bp The #bpart.
423
424
425
426
427
428
429
430
 * @param e The #engine containing information about the current time.
 * @return 1 if the #part is inhibited, 0 otherwise.
 */
__attribute__((always_inline)) INLINE static int bpart_is_inhibited(
    const struct bpart *bp, const struct engine *e) {
  return bp->time_bin == time_bin_inhibited;
}

431
432
433
434
435
436
437
438
439
/* Are cells / particles active for kick1 tasks ? */

/**
 * @brief Does a cell contain any particle starting their time-step now ?
 *
 * @param c The #cell.
 * @param e The #engine containing information about the current time.
 * @return 1 if the #cell contains at least an active particle, 0 otherwise.
 */
440
__attribute__((always_inline)) INLINE static int cell_is_starting_hydro(
441
442
443
    const struct cell *c, const struct engine *e) {

#ifdef SWIFT_DEBUG_CHECKS
444
  if (c->hydro.ti_beg_max > e->ti_current)
445
446
    error(
        "cell in an impossible time-zone! c->ti_beg_max=%lld (t=%e) and "
447
        "e->ti_current=%lld (t=%e, a=%e)",
448
        c->hydro.ti_beg_max, c->hydro.ti_beg_max * e->time_base, e->ti_current,
449
        e->ti_current * e->time_base, e->cosmology->a);
450
451
#endif

452
  return (c->hydro.ti_beg_max == e->ti_current);
453
454
455
456
457
458
459
460
461
462
463
464
465
}

/**
 * @brief Does a cell contain any g-particle starting their time-step now ?
 *
 * @param c The #cell.
 * @param e The #engine containing information about the current time.
 * @return 1 if the #cell contains at least an active particle, 0 otherwise.
 */
__attribute__((always_inline)) INLINE static int cell_is_starting_gravity(
    const struct cell *c, const struct engine *e) {

#ifdef SWIFT_DEBUG_CHECKS
466
  if (c->grav.ti_beg_max > e->ti_current)
467
468
    error(
        "cell in an impossible time-zone! c->ti_beg_max=%lld (t=%e) and "
469
        "e->ti_current=%lld (t=%e, a=%e)",
470
471
        c->grav.ti_beg_max, c->grav.ti_beg_max * e->time_base, e->ti_current,
        e->ti_current * e->time_base, e->cosmology->a);
472
473
#endif

474
  return (c->grav.ti_beg_max == e->ti_current);
475
476
}

477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
/**
 * @brief Does a cell contain any s-particle starting their time-step now ?
 *
 * @param c The #cell.
 * @param e The #engine containing information about the current time.
 * @return 1 if the #cell contains at least an active particle, 0 otherwise.
 */
__attribute__((always_inline)) INLINE static int cell_is_starting_stars(
    const struct cell *c, const struct engine *e) {

#ifdef SWIFT_DEBUG_CHECKS
  if (c->stars.ti_beg_max > e->ti_current)
    error(
        "cell in an impossible time-zone! c->ti_beg_max=%lld (t=%e) and "
        "e->ti_current=%lld (t=%e, a=%e)",
        c->stars.ti_beg_max, c->stars.ti_beg_max * e->time_base, e->ti_current,
        e->ti_current * e->time_base, e->cosmology->a);
#endif

  return (c->stars.ti_beg_max == e->ti_current);
}

499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
/**
 * @brief Does a cell contain any b-particle starting their time-step now ?
 *
 * @param c The #cell.
 * @param e The #engine containing information about the current time.
 * @return 1 if the #cell contains at least an active particle, 0 otherwise.
 */
__attribute__((always_inline)) INLINE static int cell_is_starting_black_holes(
    const struct cell *c, const struct engine *e) {

#ifdef SWIFT_DEBUG_CHECKS
  if (c->black_holes.ti_beg_max > e->ti_current)
    error(
        "cell in an impossible time-zone! c->ti_beg_max=%lld (t=%e) and "
        "e->ti_current=%lld (t=%e, a=%e)",
514
515
        c->black_holes.ti_beg_max, c->black_holes.ti_beg_max * e->time_base,
        e->ti_current, e->ti_current * e->time_base, e->cosmology->a);
516
517
518
519
520
#endif

  return (c->black_holes.ti_beg_max == e->ti_current);
}

521
522
523
524
525
526
527
528
529
530
/**
 * @brief Is this particle starting its time-step now ?
 *
 * @param p The #part.
 * @param e The #engine containing information about the current time.
 * @return 1 if the #part is active, 0 otherwise.
 */
__attribute__((always_inline)) INLINE static int part_is_starting(
    const struct part *p, const struct engine *e) {

531
532
533
534
  const timebin_t max_active_bin = e->max_active_bin;
  const timebin_t part_bin = p->time_bin;

#ifdef SWIFT_DEBUG_CHECKS
535
  const integertime_t ti_current = e->ti_current;
Matthieu Schaller's avatar
Matthieu Schaller committed
536
537
  const integertime_t ti_beg =
      get_integer_time_begin(ti_current + 1, p->time_bin);
538
539
540
541
542
543
544
545

  if (ti_beg > ti_current)
    error(
        "particle in an impossible time-zone! p->ti_beg=%lld "
        "e->ti_current=%lld",
        ti_beg, ti_current);
#endif

546
  return (part_bin <= max_active_bin);
547
548
549
550
551
552
553
554
555
556
557
558
}

/**
 * @brief Is this g-particle starting its time-step now ?
 *
 * @param gp The #gpart.
 * @param e The #engine containing information about the current time.
 * @return 1 if the #gpart is active, 0 otherwise.
 */
__attribute__((always_inline)) INLINE static int gpart_is_starting(
    const struct gpart *gp, const struct engine *e) {

559
560
561
562
  const timebin_t max_active_bin = e->max_active_bin;
  const timebin_t gpart_bin = gp->time_bin;

#ifdef SWIFT_DEBUG_CHECKS
563
  const integertime_t ti_current = e->ti_current;
Matthieu Schaller's avatar
Matthieu Schaller committed
564
565
  const integertime_t ti_beg =
      get_integer_time_begin(ti_current + 1, gp->time_bin);
566
567
568
569
570
571
572
573

  if (ti_beg > ti_current)
    error(
        "g-particle in an impossible time-zone! gp->ti_beg=%lld "
        "e->ti_current=%lld",
        ti_beg, ti_current);
#endif

574
  return (gpart_bin <= max_active_bin);
575
}
Matthieu Schaller's avatar
Matthieu Schaller committed
576
577
578
579
580
581
582
583
584
585
586

/**
 * @brief Is this s-particle starting its time-step now ?
 *
 * @param sp The #spart.
 * @param e The #engine containing information about the current time.
 * @return 1 if the #spart is active, 0 otherwise.
 */
__attribute__((always_inline)) INLINE static int spart_is_starting(
    const struct spart *sp, const struct engine *e) {

587
588
589
590
  const timebin_t max_active_bin = e->max_active_bin;
  const timebin_t spart_bin = sp->time_bin;

#ifdef SWIFT_DEBUG_CHECKS
Matthieu Schaller's avatar
Matthieu Schaller committed
591
592
593
594
595
596
597
598
599
600
601
  const integertime_t ti_current = e->ti_current;
  const integertime_t ti_beg =
      get_integer_time_begin(ti_current + 1, sp->time_bin);

  if (ti_beg > ti_current)
    error(
        "s-particle in an impossible time-zone! sp->ti_beg=%lld "
        "e->ti_current=%lld",
        ti_beg, ti_current);
#endif

602
  return (spart_bin <= max_active_bin);
Matthieu Schaller's avatar
Matthieu Schaller committed
603
}
Loikki's avatar
Loikki committed
604

605
606
607
/**
 * @brief Is this b-particle starting its time-step now ?
 *
Matthieu Schaller's avatar
Matthieu Schaller committed
608
 * @param bp The #bpart.
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
 * @param e The #engine containing information about the current time.
 * @return 1 if the #bpart is active, 0 otherwise.
 */
__attribute__((always_inline)) INLINE static int bpart_is_starting(
    const struct bpart *bp, const struct engine *e) {

  const timebin_t max_active_bin = e->max_active_bin;
  const timebin_t bpart_bin = bp->time_bin;

#ifdef SWIFT_DEBUG_CHECKS
  const integertime_t ti_current = e->ti_current;
  const integertime_t ti_beg =
      get_integer_time_begin(ti_current + 1, bp->time_bin);

  if (ti_beg > ti_current)
    error(
        "s-particle in an impossible time-zone! bp->ti_beg=%lld "
        "e->ti_current=%lld",
        ti_beg, ti_current);
#endif

  return (bpart_bin <= max_active_bin);
}

633
#endif /* SWIFT_ACTIVE_H */