Skip to content

Commit

Permalink
Fix faulty logic in ZoneBudget (#911)
Browse files Browse the repository at this point in the history
Update logic that incorrectly handles fluxes from/to active cells in zone 0.
Remove logic precluding flow to/from zone 0 in CHTOCH flow-face 
computations. Add test for case where zone 0 contains active cells.
Remove format-string syntax to preserve compatibility with python < 3.6.

Resolves #882
  • Loading branch information
jbellino-usgs committed Jun 22, 2020
1 parent de38a5b commit 0207372
Show file tree
Hide file tree
Showing 4 changed files with 259 additions and 133 deletions.
35 changes: 35 additions & 0 deletions autotest/t039_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -335,6 +335,40 @@ def test_zonebudget_output_to_netcdf():
output_helper(os.path.join(outpth, ncf_name), ml, export_dict)


def test_zonbud_active_areas_zone_zero(rtol=1e-2):
try:
import pandas as pd
except ImportError:
'Pandas is not available'

# Read ZoneBudget executable output and reformat
zbud_f = os.path.join(loadpth, 'zonef_mlt_active_zone_0.2.csv')
zbud = pd.read_csv(zbud_f)
zbud.columns = [c.strip() for c in zbud.columns]
zbud.columns = ['_'.join(c.split()) for c in zbud.columns]
zbud.index = pd.Index(['ZONE_{}'.format(z) for z in zbud.ZONE.values],
name='name')
cols = [c for c in zbud.columns if 'ZONE_' in c]
zbud = zbud[cols]

# Run ZoneBudget utility and reformat output
zon_f = os.path.join(loadpth, 'zonef_mlt_active_zone_0.zbr')
zon = read_zbarray(zon_f)
zb = ZoneBudget(cbc_f, zon, kstpkper=(0, 1096))
fpbud = zb.get_dataframes().reset_index()
fpbud = fpbud[['name'] + [c for c in fpbud.columns if 'ZONE' in c]]
fpbud = fpbud.set_index('name').T
fpbud = fpbud[[c for c in fpbud.columns if 'ZONE' in c]]
fpbud = fpbud.loc[['ZONE_{}'.format(z) for z in range(1, 4)]]

# Test for equality
allclose = np.allclose(zbud, fpbud, rtol)
s = 'Zonebudget arrays do not match.'
assert allclose, s

return


if __name__ == '__main__':
# test_compare2mflist_mlt()
test_compare2zonebudget()
Expand All @@ -348,3 +382,4 @@ def test_zonebudget_output_to_netcdf():
test_get_budget()
test_get_model_shape()
test_zonebudget_output_to_netcdf()
test_zonbud_active_areas_zone_zero()
4 changes: 4 additions & 0 deletions examples/data/zonbud_examples/zonef_mlt_active_zone_0.2.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
TOTIM , PERIOD , STEP , ZONE , STORAGE, CONSTANT HEAD, WELLS, DRAINS, RECHARGE,From Other Zones,Total IN , STORAGE, CONSTANT HEAD, WELLS, DRAINS, RECHARGE,To Other Zones ,Total Out , IN-OUT ,Percent Error , FROM ZONE 0, FROM ZONE 1, FROM ZONE 2, FROM ZONE 3, TO ZONE 0, TO ZONE 1, TO ZONE 2, TO ZONE 3,
1.097000E+03, 1097, 1, 1, 0.000000E+00, 0.000000E+00, 0.000000E+00, 0.000000E+00, 5.145581E+03, 3.461505E+03, 8.607086E+03, 0.000000E+00, 2.305484E+02, 4.762800E+03, 0.000000E+00, 0.000000E+00, 3.613724E+03, 8.607073E+03, 1.345396E-02, 1.563127E-04, 1.658361E+03, 0.000000E+00, 1.610958E+03, 1.921860E+02, 6.274572E+02, 0.000000E+00, 2.847667E+03, 1.386004E+02,
1.097000E+03, 1097, 1, 2, 0.000000E+00, 2.315666E+02, 0.000000E+00, 0.000000E+00, 1.493638E+01, 3.713330E+03, 3.959833E+03, 0.000000E+00, 2.157015E+02, 0.000000E+00, 0.000000E+00, 0.000000E+00, 3.744132E+03, 3.959833E+03, -1.076013E-04, -2.717319E-06, 1.658539E+02, 2.847667E+03, 0.000000E+00, 6.998096E+02, 6.809715E+02, 1.610958E+03, 0.000000E+00, 1.452202E+03,
1.097000E+03, 1097, 1, 3, 0.000000E+00, 8.621720E+01, 0.000000E+00, 0.000000E+00, 2.987275E+01, 1.903256E+03, 2.019346E+03, 0.000000E+00, 2.991138E+02, 0.000000E+00, 0.000000E+00, 0.000000E+00, 1.720234E+03, 2.019348E+03, -2.302036E-03, -1.139990E-04, 3.124530E+02, 1.386004E+02, 1.452202E+03, 0.000000E+00, 8.282386E+02, 1.921860E+02, 6.998096E+02, 0.000000E+00,
124 changes: 124 additions & 0 deletions examples/data/zonbud_examples/zonef_mlt_active_zone_0.zbr
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
3 40 20
INTERNAL (20I2)
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0
0 0 0 0 0 1 2 3 3 1 1 3 3 2 1 1 1 0 0 0
0 0 0 0 0 2 1 1 1 1 1 1 1 1 3 0 0 0 0 0
INTERNAL (20I2)
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 2 2 2
2 2 2 2 0 0 0 2 2 2 2 2 2 0 0 0 0 2 2 2
2 2 2 2 0 0 0 0 2 2 2 2 2 0 0 0 0 2 2 2
2 2 2 2 0 0 0 0 2 2 2 2 2 0 0 0 0 2 2 2
2 2 2 2 0 0 0 0 2 2 2 2 2 0 0 0 0 2 2 2
2 2 2 2 0 0 0 0 2 2 2 2 2 0 0 0 0 2 2 2
2 2 2 2 0 0 0 0 2 2 2 2 2 0 0 0 0 2 2 2
2 2 2 2 0 0 0 0 2 2 2 2 2 0 0 0 0 2 2 2
2 2 2 2 0 0 0 0 2 2 2 2 2 0 0 0 0 2 2 2
2 2 2 2 0 0 0 0 2 2 2 2 2 0 0 0 0 2 2 2
2 2 2 2 0 0 0 0 2 2 2 2 2 0 0 0 0 2 2 2
2 2 2 2 0 0 0 0 2 2 2 2 2 0 0 0 0 2 2 2
2 2 2 2 0 0 0 0 2 2 2 2 2 0 0 0 0 2 2 2
2 2 2 2 0 0 0 0 2 2 2 2 2 0 0 0 0 2 2 2
2 2 2 2 0 0 2 2 2 2 2 2 2 0 0 0 0 2 2 2
2 2 2 2 2 0 2 2 2 2 2 2 2 0 0 0 0 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 2 2 2
0 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 2 2 2
0 0 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 2 2 2
0 0 0 2 2 2 2 2 2 2 2 2 2 0 0 0 0 2 2 2
0 0 0 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0
0 0 0 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0
0 0 0 0 0 2 2 2 2 2 2 2 2 2 2 2 2 2 0 0
0 0 0 0 0 2 2 1 1 2 2 3 3 2 2 2 2 0 0 0
0 0 0 0 0 2 1 2 2 2 2 2 2 3 2 0 0 0 0 0
INTERNAL (20I2)
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 0 0 3 3 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 0 3 3 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
0 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
0 0 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 0
0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 0
0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 3 0 0
0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0
0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0
Loading

0 comments on commit 0207372

Please sign in to comment.