Source code for helpers.visualization_tools
import matplotlib
matplotlib.use('Agg')
from pySDC.helpers.stats_helper import filter_stats
import numpy as np
from matplotlib import rc
import matplotlib.pyplot as plt
# noinspection PyShadowingBuiltins
[docs]
def show_residual_across_simulation(stats, fname='residuals.png'):
"""
Helper routine to visualize the residuals across the simulation (one block of PFASST)
Args:
stats (dict): statistics object from a PFASST run
fname (str): filename
"""
# get residuals of the run
extract_stats = filter_stats(stats, type='residual_post_iteration')
# find boundaries for x-,y- and c-axis as well as arrays
maxprocs = 0
maxiter = 0
minres = 0
maxres = -99
for k, v in extract_stats.items():
maxprocs = max(maxprocs, k.process)
maxiter = max(maxiter, k.iter)
minres = min(minres, np.log10(v))
maxres = max(maxres, np.log10(v))
# grep residuals and put into array
residual = np.zeros((maxiter, maxprocs + 1))
residual[:] = -99
for k, v in extract_stats.items():
step = k.process
iter = k.iter
if iter != -1:
residual[iter - 1, step] = np.log10(v)
# Set up plotting stuff and fonts
rc('font', **{"sans-serif": ["Arial"], "size": 30})
rc('legend', fontsize='small')
rc('xtick', labelsize='small')
rc('ytick', labelsize='small')
# create plot and save
fig, ax = plt.subplots(figsize=(15, 10))
cmap = plt.get_cmap('Reds')
plt.pcolor(residual.T, cmap=cmap, vmin=minres, vmax=maxres)
cax = plt.colorbar()
cax.set_label('log10(residual)')
ax.set_xlabel('iteration')
ax.set_ylabel('process')
ax.set_xticks(np.arange(maxiter) + 0.5, minor=False)
ax.set_yticks(np.arange(maxprocs + 1) + 0.5, minor=False)
ax.set_xticklabels(np.arange(maxiter) + 1, minor=False)
ax.set_yticklabels(np.arange(maxprocs + 1), minor=False)
plt.savefig(fname, transparent=True, bbox_inches='tight')