def test_interp(z, f, z_fine, title): interp = PISM.ColumnInterpolation(z, z_fine) f_fine = interp.coarse_to_fine(f, interp.Mz_fine()) f_fine_numpy = np.interp(z_fine, z, f) f_roundtrip = interp.fine_to_coarse(f_fine) if plot: plt.figure() plt.plot(z, f, 'o-', label="original coarse-grid data") plt.plot(z_fine, f_fine, 'o-', label="interpolated onto the fine grid") plt.plot(z, f_roundtrip, 'o-', label="interpolated back onto the coarse grid") plt.plot(z, f_roundtrip - f, 'o-', label="difference after the roundtrip") plt.legend(loc="best") plt.title(title) plt.grid(True) delta = np.linalg.norm(f - f_roundtrip, ord=1) delta_numpy = np.linalg.norm(f_fine - f_fine_numpy, ord=1) print("norm1(fine_to_coarse(coarse_to_fine(f)) - f) = %f" % delta) print("norm1(PISM - NumPy) = %f" % delta_numpy) return delta, delta_numpy