Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
SWIFT
SWIFTsim
Commits
7c2c2cc0
Commit
7c2c2cc0
authored
Dec 05, 2016
by
Matthieu Schaller
Browse files
Drift task now scheduled correctly
parent
456d9fad
Changes
6
Hide whitespace changes
Inline
Side-by-side
src/cell.c
View file @
7c2c2cc0
...
...
@@ -879,15 +879,9 @@ int cell_unskip_tasks(struct cell *c, struct scheduler *s) {
}
/* Activate the drift on both sides */
if
(
t
->
type
==
task_type_pair
||
t
->
type
==
task_type_sub_pair
)
{
if
(
ci
->
drift
!=
NULL
)
scheduler_activate
(
s
,
ci
->
drift
);
if
(
cj
->
drift
!=
NULL
)
scheduler_activate
(
s
,
cj
->
drift
);
}
if
(
ci
==
c
&&
cj
!=
NULL
)
scheduler_activate
(
s
,
cj
->
drift
);
if
(
cj
==
c
&&
ci
!=
NULL
)
scheduler_activate
(
s
,
ci
->
drift
);
if
(
t
->
type
==
task_type_self
||
t
->
type
==
task_type_sub_self
)
{
if
(
ci
->
drift
!=
NULL
)
scheduler_activate
(
s
,
ci
->
drift
);
}
/* Check whether there was too much particle motion */
if
(
t
->
type
==
task_type_pair
||
t
->
type
==
task_type_sub_pair
)
{
if
(
t
->
tight
&&
...
...
src/engine.c
View file @
7c2c2cc0
...
...
@@ -139,9 +139,6 @@ void engine_make_hierarchical_tasks(struct engine *e, struct cell *c) {
c
->
init
=
scheduler_addtask
(
s
,
task_type_init
,
task_subtype_none
,
0
,
0
,
c
,
NULL
,
0
);
/* c->drift = scheduler_addtask(s, task_type_drift, task_subtype_none, 0, 0, */
/* c, NULL, 0); */
c
->
kick
=
scheduler_addtask
(
s
,
task_type_kick
,
task_subtype_none
,
0
,
0
,
c
,
NULL
,
0
);
...
...
@@ -1993,9 +1990,9 @@ void engine_marktasks_mapper(void *map_data, int num_elements,
const
struct
cell
*
ci
=
t
->
ci
;
/* Activate the drift */
if
(
ci
->
drift
)
scheduler_activate
(
s
,
ci
->
drift
);
if
(
ci
->
drift
)
scheduler_activate
(
s
,
ci
->
drift
);
}
/* Pair? */
else
if
(
t
->
type
==
task_type_pair
||
t
->
type
==
task_type_sub_pair
)
{
...
...
@@ -2004,8 +2001,8 @@ void engine_marktasks_mapper(void *map_data, int num_elements,
const
struct
cell
*
cj
=
t
->
cj
;
/* Activate the drift on both sides */
if
(
ci
->
drift
)
scheduler_activate
(
s
,
ci
->
drift
);
if
(
cj
->
drift
)
scheduler_activate
(
s
,
cj
->
drift
);
if
(
ci
->
drift
)
scheduler_activate
(
s
,
ci
->
drift
);
if
(
cj
->
drift
)
scheduler_activate
(
s
,
cj
->
drift
);
/* Too much particle movement? */
if
(
t
->
tight
&&
...
...
src/runner.c
View file @
7c2c2cc0
...
...
@@ -1127,7 +1127,8 @@ void *runner_main(void *data) {
/* Check that we haven't scheduled an inactive task */
#ifdef SWIFT_DEBUG_CHECKS
if
(
cj
==
NULL
)
{
/* self */
if
(
!
cell_is_active
(
ci
,
e
)
&&
t
->
type
!=
task_type_sort
&&
t
->
type
!=
task_type_drift
)
if
(
!
cell_is_active
(
ci
,
e
)
&&
t
->
type
!=
task_type_sort
&&
t
->
type
!=
task_type_drift
)
error
(
"Task (type='%s/%s') should have been skipped ti_current=%d "
"c->ti_end_min=%d"
,
...
...
@@ -1143,10 +1144,11 @@ void *runner_main(void *data) {
taskID_names
[
t
->
type
],
subtaskID_names
[
t
->
subtype
],
e
->
ti_current
,
ci
->
ti_end_min
,
t
->
flags
);
/* Special treatement for drifts */
if
(
!
cell_is_active
(
ci
,
e
)
&&
t
->
type
==
task_type_drift
)
{;}
/* Special treatement for drifts */
if
(
!
cell_is_active
(
ci
,
e
)
&&
t
->
type
==
task_type_drift
)
{
;
}
}
else
{
/* pair */
if
(
!
cell_is_active
(
ci
,
e
)
&&
!
cell_is_active
(
cj
,
e
))
error
(
...
...
@@ -1237,7 +1239,7 @@ void *runner_main(void *data) {
break
;
#endif
case
task_type_drift
:
//
runner_do_drift(r, ci, 1);
runner_do_drift
(
r
,
ci
,
1
);
break
;
case
task_type_kick
:
runner_do_kick
(
r
,
ci
,
1
);
...
...
src/scheduler.c
View file @
7c2c2cc0
...
...
@@ -133,7 +133,7 @@ static void scheduler_splittask(struct task *t, struct scheduler *s) {
/* Non-splittable task? */
if
((
t
->
ci
==
NULL
||
(
t
->
type
==
task_type_pair
&&
t
->
cj
==
NULL
))
||
((
t
->
type
==
task_type_kick
)
&&
t
->
ci
->
nodeID
!=
s
->
nodeID
)
||
((
t
->
type
==
task_type_drift
)
&&
t
->
ci
->
nodeID
!=
s
->
nodeID
)
||
((
t
->
type
==
task_type_drift
)
&&
t
->
ci
->
nodeID
!=
s
->
nodeID
)
||
((
t
->
type
==
task_type_init
)
&&
t
->
ci
->
nodeID
!=
s
->
nodeID
))
{
t
->
type
=
task_type_none
;
t
->
skip
=
1
;
...
...
@@ -614,19 +614,17 @@ static void scheduler_splittask(struct task *t, struct scheduler *s) {
1
<<
sid
,
0
,
ci
,
NULL
,
0
);
else
ci
->
sorts
->
flags
|=
(
1
<<
sid
);
scheduler_addunlock
(
s
,
ci
->
sorts
,
t
);
/* Create the drift for ci. */
if
(
ci
->
drift
==
NULL
)
{
ci
->
drift
=
scheduler_addtask
(
s
,
task_type_drift
,
task_subtype_none
,
scheduler_addunlock
(
s
,
ci
->
sorts
,
t
);
/* Create the drift for ci. */
if
(
ci
->
drift
==
NULL
)
{
ci
->
drift
=
scheduler_addtask
(
s
,
task_type_drift
,
task_subtype_none
,
0
,
0
,
ci
,
NULL
,
0
);
scheduler_addunlock
(
s
,
ci
->
drift
,
ci
->
sorts
);
}
scheduler_addunlock
(
s
,
ci
->
drift
,
ci
->
sorts
);
}
lock_unlock_blind
(
&
ci
->
lock
);
/* Create the sort for cj. */
lock_lock
(
&
cj
->
lock
);
if
(
cj
->
sorts
==
NULL
)
...
...
@@ -637,13 +635,13 @@ static void scheduler_splittask(struct task *t, struct scheduler *s) {
scheduler_addunlock
(
s
,
cj
->
sorts
,
t
);
/* Create the drift for cj. */
if
(
cj
->
drift
==
NULL
)
{
cj
->
drift
=
scheduler_addtask
(
s
,
task_type_drift
,
task_subtype_none
,
/* Create the drift for cj. */
if
(
cj
->
drift
==
NULL
)
{
cj
->
drift
=
scheduler_addtask
(
s
,
task_type_drift
,
task_subtype_none
,
0
,
0
,
cj
,
NULL
,
0
);
scheduler_addunlock
(
s
,
cj
->
drift
,
cj
->
sorts
);
}
lock_unlock_blind
(
&
cj
->
lock
);
scheduler_addunlock
(
s
,
cj
->
drift
,
cj
->
sorts
);
}
lock_unlock_blind
(
&
cj
->
lock
);
}
}
/* pair interaction? */
...
...
@@ -802,8 +800,9 @@ void scheduler_set_unlocks(struct scheduler *s) {
for
(
int
j
=
i
+
1
;
j
<
t
->
nr_unlock_tasks
;
j
++
)
{
if
(
t
->
unlock_tasks
[
i
]
==
t
->
unlock_tasks
[
j
])
error
(
"duplicate unlock! t->type=%s/%s unlocking type=%s/%s"
,
taskID_names
[
t
->
type
],
subtaskID_names
[
t
->
subtype
],
taskID_names
[
t
->
unlock_tasks
[
i
]
->
type
],
subtaskID_names
[
t
->
unlock_tasks
[
i
]
->
subtype
]);
taskID_names
[
t
->
type
],
subtaskID_names
[
t
->
subtype
],
taskID_names
[
t
->
unlock_tasks
[
i
]
->
type
],
subtaskID_names
[
t
->
unlock_tasks
[
i
]
->
subtype
]);
}
}
}
...
...
@@ -1102,10 +1101,11 @@ void scheduler_start(struct scheduler *s) {
taskID_names
[
t
->
type
],
subtaskID_names
[
t
->
subtype
],
ti_current
,
ci
->
ti_end_min
,
t
->
flags
);
/* Special treatement for drifts */
/* Special treatement for drifts */
if
(
ci
->
ti_end_min
==
ti_current
&&
t
->
skip
&&
t
->
type
==
task_type_drift
)
{;}
t
->
type
==
task_type_drift
)
{
;
}
}
else
{
/* pair */
...
...
@@ -1174,7 +1174,7 @@ void scheduler_enqueue(struct scheduler *s, struct task *t) {
case
task_type_sort
:
case
task_type_ghost
:
case
task_type_kick
:
case
task_type_drift
:
case
task_type_drift
:
case
task_type_init
:
qid
=
t
->
ci
->
super
->
owner
;
break
;
...
...
src/space.c
View file @
7c2c2cc0
...
...
@@ -409,6 +409,7 @@ void space_regrid(struct space *s, int verbose) {
s
->
cells_top
[
k
].
extra_ghost
=
NULL
;
s
->
cells_top
[
k
].
ghost
=
NULL
;
s
->
cells_top
[
k
].
kick
=
NULL
;
s
->
cells_top
[
k
].
drift
=
NULL
;
s
->
cells_top
[
k
].
cooling
=
NULL
;
s
->
cells_top
[
k
].
sourceterms
=
NULL
;
s
->
cells_top
[
k
].
super
=
&
s
->
cells_top
[
k
];
...
...
src/task.c
View file @
7c2c2cc0
...
...
@@ -48,10 +48,10 @@
/* Task type names. */
const
char
*
taskID_names
[
task_type_count
]
=
{
"none"
,
"sort"
,
"self"
,
"pair"
,
"sub_self"
,
"sub_pair"
,
"init"
,
"ghost"
,
"extra_ghost"
,
"drift"
,
"kick"
,
"send"
,
"recv"
,
"grav_gather_m"
,
"grav_fft"
,
"grav_mm"
,
"grav_up"
,
"cooling"
,
"sourceterms"
};
"none"
,
"sort"
,
"self"
,
"pair"
,
"sub_self"
,
"sub_pair"
,
"init"
,
"ghost"
,
"extra_ghost"
,
"drift"
,
"kick"
,
"send"
,
"recv"
,
"grav_gather_m"
,
"grav_fft"
,
"grav_mm"
,
"grav_up"
,
"cooling"
,
"sourceterms"
};
const
char
*
subtaskID_names
[
task_subtype_count
]
=
{
"none"
,
"density"
,
"gradient"
,
"force"
,
"grav"
,
"external_grav"
,
"tend"
};
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment