#!/usr/bin/env python3importsysimportnumpyasnpimportpyro.util.io_pyroasiousage=""" usage: ./compare.py file1 file2 (rtol) where rtol is an (optional) relative tolerance parameter to use when comparing the data"""errors={"gridbad":"grids don't agree","namesbad":"variable lists don't agree","varerr":"one or more variables don't agree"}
[docs]defcompare(data1,data2,rtol=1.e-12):""" given two CellCenterData2d objects, compare the data, zone-by-zone and output any errors Parameters ---------- data1, data2 : CellCenterData2d object Two data grids to compare rtol : float relative tolerance to use to compare grids """# compare the gridsifnotdata1.grid==data2.grid:return"gridbad"# compare the dataifnotsorted(data1.names)==sorted(data2.names):return"namesbad"print(" ")print("variable comparisons:")result=0fornameindata1.names:d1=data1.get_var(name)d2=data2.get_var(name)abs_err=np.max(np.abs(d1.v()-d2.v()))ifnotnp.any(d2.v()==0):rel_err=np.max(np.abs(d1.v()-d2.v())/np.abs(d2.v()))print(f"{name:20s} absolute error = {abs_err:10.10g}, relative error = {rel_err:10.10g}")else:print(f"{name:20s} absolute error = {abs_err:10.10g}")ifnotnp.allclose(d1.v(),d2.v(),rtol=rtol):result="varerr"returnresult