From 13e1a3ef1de8a617809a8312c814c59c8cdae9c9 Mon Sep 17 00:00:00 2001 From: Ardavan Oskooi Date: Sat, 6 Jul 2019 19:55:53 -0700 Subject: [PATCH 1/2] correct timing stack reshuffle in am_now_working_on and add separate timing MPI category for or_to_all --- src/boundaries.cpp | 2 ++ src/step.cpp | 5 ++++- src/time.cpp | 6 +++--- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/boundaries.cpp b/src/boundaries.cpp index 3aac3e587..c85d42096 100644 --- a/src/boundaries.cpp +++ b/src/boundaries.cpp @@ -338,7 +338,9 @@ void fields::connect_the_chunks() { for (int i = 0; i < num_chunks; i++) needs_W_notowned[c] = needs_W_notowned[c] || chunks[i]->needs_W_notowned(c); } + am_now_working_on(MpiTime); FOR_E_AND_H(c) { needs_W_notowned[c] = or_to_all(needs_W_notowned[c]); } + finished_working(); for (int i = 0; i < num_chunks; i++) { // First count the border elements... diff --git a/src/step.cpp b/src/step.cpp index d185d6995..c287db249 100644 --- a/src/step.cpp +++ b/src/step.cpp @@ -108,7 +108,10 @@ void fields::phase_material() { } phasein_time--; } - if (or_to_all(changed)) { + am_now_working_on(MpiTime); + bool changed_mpi = or_to_all(changed); + finished_working(); + if (changed_mpi) { calc_sources(time() + 0.5 * dt); // for integrated H sources update_eh(H_stuff); // ensure H = 1/mu * B step_boundaries(H_stuff); diff --git a/src/time.cpp b/src/time.cpp index ec00fb952..f6f94b81a 100644 --- a/src/time.cpp +++ b/src/time.cpp @@ -26,7 +26,7 @@ void fields::finished_working() { if (last_wall_time >= 0) times_spent[working_on] += now - last_wall_time; last_wall_time = now; working_on = was_working_on[0]; - for (int i = 0; i + 1 < MEEP_TIMING_STACK_SZ; ++i) + for (int i = 0; i < MEEP_TIMING_STACK_SZ - 1; ++i) was_working_on[i] = was_working_on[i + 1]; was_working_on[MEEP_TIMING_STACK_SZ - 1] = Other; } @@ -35,8 +35,8 @@ void fields::am_now_working_on(time_sink s) { double now = wall_time(); if (last_wall_time >= 0) times_spent[working_on] += now - last_wall_time; last_wall_time = now; - for (int i = 0; i + 1 < MEEP_TIMING_STACK_SZ; ++i) - was_working_on[i + 1] = was_working_on[i]; + for (int i = MEEP_TIMING_STACK_SZ - 1; i > 0; --i) + was_working_on[i] = was_working_on[i - 1]; was_working_on[0] = working_on; working_on = s; } From ea21771385eec4398f00f9dfb3fee205d560e7c1 Mon Sep 17 00:00:00 2001 From: Ardavan Oskooi Date: Mon, 8 Jul 2019 13:57:58 -0700 Subject: [PATCH 2/2] move time-stepping block inside is_phasing if statement --- src/step.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/step.cpp b/src/step.cpp index c287db249..3d283990b 100644 --- a/src/step.cpp +++ b/src/step.cpp @@ -107,17 +107,17 @@ void fields::phase_material() { changed = changed || chunks[i]->new_s; } phasein_time--; - } - am_now_working_on(MpiTime); - bool changed_mpi = or_to_all(changed); - finished_working(); - if (changed_mpi) { - calc_sources(time() + 0.5 * dt); // for integrated H sources - update_eh(H_stuff); // ensure H = 1/mu * B - step_boundaries(H_stuff); - calc_sources(time() + dt); // for integrated E sources - update_eh(E_stuff); // ensure E = 1/eps * D - step_boundaries(E_stuff); + am_now_working_on(MpiTime); + bool changed_mpi = or_to_all(changed); + finished_working(); + if (changed_mpi) { + calc_sources(time() + 0.5 * dt); // for integrated H sources + update_eh(H_stuff); // ensure H = 1/mu * B + step_boundaries(H_stuff); + calc_sources(time() + dt); // for integrated E sources + update_eh(E_stuff); // ensure E = 1/eps * D + step_boundaries(E_stuff); + } } }