88from util import io
99
1010usage = """
11- usage: ./compare.py file1 file2
11+ usage: ./compare.py file1 file2 (rtol)
12+
13+ where rtol is an (optional) relative tolerance parameter to use when
14+ comparing the data
1215"""
1316
1417errors = {"gridbad" : "grids don't agree" ,
1518 "namesbad" : "variable lists don't agree" ,
1619 "varerr" : "one or more variables don't agree" }
1720
1821
19- def compare (data1 , data2 ):
20- """given two CellCenterData2d objects, compare the data, zone-by-zone
22+ def compare (data1 , data2 , rtol = 1.e-12 ):
23+ """
24+ given two CellCenterData2d objects, compare the data, zone-by-zone
2125 and output any errors
2226
27+ Parameters
28+ ----------
29+ data1, data2 : CellCenterData2d object
30+ Two data grids to compare
31+ rtol : float
32+ relative tolerance to use to compare grids
33+
2334 """
2435
2536 # compare the grids
@@ -40,19 +51,23 @@ def compare(data1, data2):
4051 d1 = data1 .get_var (name )
4152 d2 = data2 .get_var (name )
4253
43- err = np .max (np .abs (d1 .v () - d2 .v ()))
54+ abs_err = np .max (np .abs (d1 .v () - d2 .v ()))
4455
45- print ("{:20s} error = {:20.10g}" .format (name , err ))
56+ if not np .any (d2 .v () == 0 ):
57+ rel_err = np .max (np .abs (d1 .v () - d2 .v ()) / np .abs (d2 .v ()))
58+ print ("{:20s} absolute error = {:10.10g}, relative error = {:10.10g}" .format (name , abs_err , rel_err ))
59+ else :
60+ print ("{:20s} absolute error = {:10.10g}" .format (name , abs_err ))
4661
47- if not err == 0 :
62+ if not np . allclose ( d1 . v (), d2 . v (), rtol = rtol ) :
4863 result = "varerr"
4964
5065 return result
5166
5267
5368if __name__ == "__main__" :
5469
55- if not len (sys .argv ) == 3 :
70+ if not ( len (sys .argv ) == 3 or len ( sys . argv ) == 4 ) :
5671 print (usage )
5772 sys .exit (2 )
5873
@@ -62,7 +77,10 @@ def compare(data1, data2):
6277 s1 = io .read (file1 )
6378 s2 = io .read (file2 )
6479
65- result = compare (s1 .cc_data , s2 .cc_data )
80+ if len (sys .argv ) == 3 :
81+ result = compare (s1 .cc_data , s2 .cc_data )
82+ else :
83+ result = compare (s1 .cc_data , s2 .cc_data , rtol = float (sys .argv [3 ]))
6684
6785 if result == 0 :
6886 print ("SUCCESS: files agree" )
0 commit comments