Add `has_package(name)` feature to see if a package exists. (#272)
This feature goes nicely beside `get_package(name)` (modified slightly). Updated/amended other parts of code and a few autotests.develop
parent
08570caa32
commit
8561d21a28
|
@ -4,7 +4,11 @@ def test_modflow():
|
|||
import flopy
|
||||
mf = flopy.modflow.Modflow()
|
||||
assert isinstance(mf, flopy.modflow.Modflow)
|
||||
assert not mf.has_package('DIS') # not yet
|
||||
dis = flopy.modflow.ModflowDis(mf)
|
||||
assert mf.has_package('DIS')
|
||||
assert mf.has_package('dis') # case-insensitive
|
||||
assert not mf.has_package('DISU') # not here
|
||||
assert isinstance(dis, flopy.modflow.ModflowDis)
|
||||
bas = flopy.modflow.ModflowBas(mf)
|
||||
assert isinstance(bas, flopy.modflow.ModflowBas)
|
||||
|
|
|
@ -30,8 +30,8 @@ def test_load():
|
|||
m = flopy.modflow.Modflow.load('MNW2-Fig28.nam', model_ws=mf2005pth,
|
||||
verbose=True, forgive=False)
|
||||
m.change_model_ws(cpth)
|
||||
assert 'MNW2' in m.get_package_list()
|
||||
assert 'MNWI' in m.get_package_list()
|
||||
assert m.has_package('MNW2')
|
||||
assert m.has_package('MNWI')
|
||||
|
||||
# load a real mnw2 package from a steady state model (multiple wells)
|
||||
m2 = flopy.modflow.Modflow('br', model_ws=cpth)
|
||||
|
|
|
@ -718,6 +718,30 @@ class BaseModel(object):
|
|||
'{:s} {:s}\n'.format(p.file_name[i], p.extra[i])
|
||||
return s
|
||||
|
||||
def has_package(self, name):
|
||||
"""
|
||||
Check if package name is in package list.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
name : str
|
||||
Name of the package, 'DIS', 'BAS6', etc. (case-insensitive).
|
||||
|
||||
Returns
|
||||
-------
|
||||
bool
|
||||
True if package name exists, otherwise False if not found.
|
||||
|
||||
"""
|
||||
if not name:
|
||||
raise ValueError('invalid package name')
|
||||
name = name.upper()
|
||||
for p in self.packagelist:
|
||||
for pn in p.name:
|
||||
if pn.upper() == name:
|
||||
return True
|
||||
return False
|
||||
|
||||
def get_package(self, name):
|
||||
"""
|
||||
Get a package.
|
||||
|
@ -725,7 +749,7 @@ class BaseModel(object):
|
|||
Parameters
|
||||
----------
|
||||
name : str
|
||||
Name of the package, 'RIV', 'LPF', etc.
|
||||
Name of the package, 'RIV', 'LPF', etc. (case-insensitive).
|
||||
|
||||
Returns
|
||||
-------
|
||||
|
@ -733,8 +757,11 @@ class BaseModel(object):
|
|||
Package object of type :class:`flopy.pakbase.Package`
|
||||
|
||||
"""
|
||||
if not name:
|
||||
raise ValueError('invalid package name')
|
||||
name = name.upper()
|
||||
for pp in (self.packagelist):
|
||||
if (pp.name[0].upper() == name.upper()):
|
||||
if pp.name[0].upper() == name:
|
||||
return pp
|
||||
return None
|
||||
|
||||
|
|
|
@ -349,11 +349,11 @@ class ModflowSfr2(Package):
|
|||
self.reach_data[n] = reach_data[n]
|
||||
|
||||
# assign node numbers if there are none (structured grid)
|
||||
if np.diff(
|
||||
self.reach_data.node).max() == 0 and 'DIS' in self.parent.get_package_list():
|
||||
if np.diff(self.reach_data.node).max() == 0 and self.parent.has_package('DIS'):
|
||||
# first make kij list
|
||||
lrc = self.reach_data[['k', 'i', 'j']].copy()
|
||||
lrc = (lrc.view((int, len(lrc.dtype.names)))).tolist()
|
||||
|
||||
self.reach_data['node'] = self.parent.dis.get_node(lrc)
|
||||
# assign unique ID and outreach columns to each reach
|
||||
self.reach_data.sort(order=['iseg', 'ireach'])
|
||||
|
|
|
@ -226,12 +226,12 @@ class check:
|
|||
def _stress_period_data_valid_indices(self, stress_period_data):
|
||||
"""Check that stress period data inds are valid for model grid."""
|
||||
spd_inds_valid = True
|
||||
if 'DIS' in self.model.get_package_list() and\
|
||||
if self.model.has_package('DIS') and \
|
||||
{'k', 'i', 'j'}.intersection(set(stress_period_data.dtype.names)) != {'k', 'i', 'j'}:
|
||||
self._add_to_summary(type='Error',
|
||||
desc='\r Stress period data missing k, i, j for structured grid.')
|
||||
spd_inds_valid = False
|
||||
elif 'DISU' in self.model.get_package_list() and \
|
||||
elif self.model.has_package('DISU') and \
|
||||
'node' not in stress_period_data.dtype.names:
|
||||
self._add_to_summary(type='Error',
|
||||
desc='\r Stress period data missing node number for unstructured grid.')
|
||||
|
|
Loading…
Reference in New Issue