From b5fe96ae216c161bbb84d976ce4621303b85cbfa Mon Sep 17 00:00:00 2001 From: Craig Warren Date: Thu, 31 Aug 2023 20:59:24 +0100 Subject: [PATCH] Update to plot PML diffs --- .../pml_basic/plot_pml_comparison.py | 55 +++++++++++-------- 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/testing/models_pmls/pml_basic/plot_pml_comparison.py b/testing/models_pmls/pml_basic/plot_pml_comparison.py index 7429dca2..86786b07 100644 --- a/testing/models_pmls/pml_basic/plot_pml_comparison.py +++ b/testing/models_pmls/pml_basic/plot_pml_comparison.py @@ -21,6 +21,7 @@ import logging from operator import add from pathlib import Path +import matplotlib.gridspec as gridspec import matplotlib.pyplot as plt import numpy as np @@ -30,7 +31,7 @@ logger = logging.getLogger(__name__) # Create/setup plot figure # Plot colours from http://tools.medialab.sciences-po.fr/iwanthue/index.php -colorIDs = ["#79c72e", "#5774ff", "#ff7c2c", "#4b4e80", "#d7004e", "#007545", "#ff83ec"] +colorIDs = ["#79c72e", "#5774ff", "#ff7c2c", "#4b4e80", "#d7004e", "#007545"] colors = itertools.cycle(colorIDs) lines = itertools.cycle(("--", ":", "-.", "-")) markers = ["o", "d", "^", "s", "*"] @@ -40,36 +41,42 @@ basename = "pml_basic" PMLIDs = ["off", "x0", "y0", "z0", "xmax", "ymax", "zmax"] maxerrors = [] -for x in range(len(PMLIDs)): +for x, PMLID in enumerate(PMLIDs): file1 = fn.parent.joinpath(basename + str(x + 1) + "_CPU.h5") file2 = fn.parent.joinpath(basename + str(x + 1) + "_GPU.h5") time, datadiffs = diff_output_files(file1, file2) # Print maximum error value - start = 0 - maxerrors.append(f": {np.amax(datadiffs[start::, 1]):.1f} [dB]") - logger.info(f"{file1.name} - {file2.name}: Max. error {maxerrors[x]}") + start = 150 + maxerrors.append(f": {np.amax(np.amax(datadiffs[start::, :])):.1f} [dB]") + print(f"{PMLID}: Max. error {maxerrors[x]}") - fig, ax = plt.subplots( - subplot_kw=dict(xlabel="Iterations", ylabel="Error [dB]"), figsize=(20, 10), facecolor="w", edgecolor="w") + # Plot diffs + gs = gridspec.GridSpec(3, 2, hspace=0.3, wspace=0.3) + fig, ax = plt.subplots(figsize=(20, 10), facecolor="w", edgecolor="w") + ax.remove() + fig.suptitle(f"{PMLID}") + + outputs = ["Ex", "Ey", "Ez", "Hx", "Hy", "Hz"] + for i, output in enumerate(outputs): + if i < 3: + ax = plt.subplot(gs[i, 0]) + else: + ax = plt.subplot(gs[i - 3, 1]) + ax.plot(time[start::], datadiffs[start::, i], color=next(colors), lw=2) + ax.set_xticks(np.arange(0, 1800, step=200)) + ax.set_xlim([0, 1600]) + ax.set_yticks(np.arange(-400, 80, step=40)) + ax.set_ylim([-400, 40]) + ax.set_axisbelow(True) + ax.grid(color=(0.75, 0.75, 0.75), linestyle="dashed") + ax.set_xlabel("Time [iterations]") + ax.set_ylabel(f"{output} error [dB]") - # Plot diffs (select column to choose field component, 0-Ex, 1-Ey etc..) - ax.plot(time[start::], datadiffs[start::, 1], color=next(colors), lw=2, ls=next(lines), label=f"{file1.name} - {file2.name}") - ax.set_xticks(np.arange(0, 2200, step=100)) - ax.set_xlim([0, 2100]) - ax.set_yticks(np.arange(-160, 0, step=20)) - ax.set_ylim([-160, -20]) - ax.set_axisbelow(True) - ax.grid(color=(0.75, 0.75, 0.75), linestyle="dashed") - -mylegend = list(map(add, PMLIDs, maxerrors)) -legend = ax.legend(mylegend, loc=1, fontsize=14) -frame = legend.get_frame() -frame.set_edgecolor("white") -frame.set_alpha(0) + # Save a PDF/PNG of the figure + fig.savefig(basename + "_diffs_" + PMLID + ".pdf", dpi=None, format='pdf', bbox_inches='tight', pad_inches=0.1) + # fig.savefig(basename + "_diffs_" + PMLID + ".png", dpi=150, format='png', bbox_inches='tight', pad_inches=0.1) plt.show() -# Save a PDF/PNG of the figure -# fig.savefig(basepath + '.pdf', dpi=None, format='pdf', bbox_inches='tight', pad_inches=0.1) -# fig.savefig(savename + '.png', dpi=150, format='png', bbox_inches='tight', pad_inches=0.1) +