diff --git a/pySDC/helpers/stats_helper.py b/pySDC/helpers/stats_helper.py index d75f12ddbb..45e40469cf 100644 --- a/pySDC/helpers/stats_helper.py +++ b/pySDC/helpers/stats_helper.py @@ -42,13 +42,16 @@ def filter_stats( # delete values that have been recorded and superseded by similar, but not identical keys times_restarted = np.unique([me.time for me in result.keys() if me.num_restarts > 0]) for t in times_restarted: - restarts = [(me.type, me.num_restarts) for me in filter_stats(result, time=t).keys()] + restarts = {} + for me in filter_stats(result, time=t).keys(): + restarts[me.type] = max([restarts.get(me.type, 0), me.num_restarts]) + [ [ - [result.pop(you, None) for you in filter_stats(result, time=t, type=me[0], num_restarts=i).keys()] - for i in range(me[1]) + [result.pop(you, None) for you in filter_stats(result, time=t, type=type_, num_restarts=i).keys()] + for i in range(num_restarts_) ] - for me in restarts + for type_, num_restarts_ in restarts.items() ] # delete values that were recorded at times that shouldn't be recorded because we performed a different step after the restart diff --git a/pySDC/implementations/controller_classes/controller_nonMPI.py b/pySDC/implementations/controller_classes/controller_nonMPI.py index 8aceab90b6..83876ef18e 100644 --- a/pySDC/implementations/controller_classes/controller_nonMPI.py +++ b/pySDC/implementations/controller_classes/controller_nonMPI.py @@ -39,8 +39,8 @@ def __init__(self, num_procs, controller_params, description): for _ in range(num_procs - 1): self.MS.append(dill.copy(self.MS[0])) # if this fails (e.g. due to un-picklable data in the steps), initialize separately - except (dill.PicklingError, TypeError): - self.logger.warning('Need to initialize steps separately due to pickling error') + except (dill.PicklingError, TypeError) as error: + self.logger.warning(f'Need to initialize steps separately due to pickling error: {error}') for _ in range(num_procs - 1): self.MS.append(stepclass.step(description)) diff --git a/pySDC/implementations/convergence_controller_classes/spread_step_sizes.py b/pySDC/implementations/convergence_controller_classes/spread_step_sizes.py index 53c380b89a..2246aee829 100644 --- a/pySDC/implementations/convergence_controller_classes/spread_step_sizes.py +++ b/pySDC/implementations/convergence_controller_classes/spread_step_sizes.py @@ -68,11 +68,14 @@ def get_step_from_which_to_spread(self, restarts, new_steps, size, S): else: # we want to spread the smallest step size out of the steps that want to be restarted spread_from_step = restart_at + np.argmin(new_steps[restart_at:]) - self.debug(f'Detected restart from step {restart_at}. Spreading step size from step {spread_from_step}.', S) + self.debug( + f'Detected restart from step {restart_at}. Spreading step size from step {spread_from_step}: {new_steps[restart_at]:.2e}.', + S, + ) else: restart_at = size - 1 spread_from_step = restart_at - self.debug('Spreading step size from last step.', S) + self.debug(f'Spreading step size from last step: {new_steps[restart_at]:.2e}.', S) return spread_from_step, restart_at diff --git a/pySDC/implementations/hooks/default_hook.py b/pySDC/implementations/hooks/default_hook.py index dcdd236421..f997b2a6cf 100644 --- a/pySDC/implementations/hooks/default_hook.py +++ b/pySDC/implementations/hooks/default_hook.py @@ -320,6 +320,7 @@ def post_run(self, step, level_number): type='timing_run', value=self.__t1_run - self.__t0_run, ) + self.logger.info(f'Finished run after {self.__t1_run - self.__t0_run:.2f}s') def post_setup(self, step, level_number): """