Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor(mfusg), Feat(mfusgcln, mfusggnc) #1261

Merged
merged 7 commits into from
Oct 11, 2021
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -88,3 +88,4 @@ autotest/.noseids
.docs/_temp
.docs/_notebooks

*.bak
3 changes: 3 additions & 0 deletions .pylintrc
Original file line number Diff line number Diff line change
Expand Up @@ -346,6 +346,9 @@ single-line-class-stmt=no
# else.
single-line-if-stmt=no

# Good variable names which should always be accepted, separated by a comma
good-names=kv,nr,nc,sy,ss,iu,hy,hk
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice discovery with good-names. I think we are planning to ditch this short name linting requirement.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep cool. The other thing I noticed on this side of things was that you can't win on the docstring 1st line issues - it seems like one of prospector's (or codacy's) linting tools likes the summary on the same line as the opening quotes, while another likes it on the next line down...either that or I am missing something ridiculously obvious (quite possible!).



[SIMILARITIES]

Expand Down
29 changes: 16 additions & 13 deletions autotest/t005_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,23 +9,26 @@

def test_modflow_unstructured():
import flopy
import numpy as np

mf = flopy.modflow.Modflow(
version="mfusg", structured=False, model_ws=cpth
)
assert isinstance(mf, flopy.modflow.Modflow)
mf = flopy.mfusg.MfUsg(structured=False, model_ws=cpth)
assert isinstance(mf, flopy.mfusg.MfUsg)

dis = flopy.modflow.ModflowDis(mf)
assert isinstance(dis, flopy.modflow.ModflowDis)
disu = flopy.mfusg.MfUsgDisU(
mf, nodes=1, iac=[1], njag=1, ja=np.array([0]), cl12=[1.0], fahl=[1.0]
)
assert isinstance(disu, flopy.mfusg.MfUsgDisU)

bas = flopy.modflow.ModflowBas(mf)
assert isinstance(bas, flopy.modflow.ModflowBas)

lpf = flopy.modflow.ModflowLpf(mf)
assert isinstance(lpf, flopy.modflow.ModflowLpf)
lpf = flopy.mfusg.MfUsgLpf(mf)
assert isinstance(lpf, flopy.mfusg.MfUsgLpf)

wel = flopy.modflow.ModflowWel(mf, stress_period_data={0: [[0, -100]]})
assert isinstance(wel, flopy.modflow.ModflowWel)
wel = flopy.mfusg.MfUsgWel(
mf, stress_period_data={0: [[0, -100]]}
)
assert isinstance(wel, flopy.mfusg.MfUsgWel)

ghb = flopy.modflow.ModflowGhb(
mf, stress_period_data={0: [[1, 5.9, 1000.0]]}
Expand All @@ -35,13 +38,13 @@ def test_modflow_unstructured():
oc = flopy.modflow.ModflowOc(mf)
assert isinstance(oc, flopy.modflow.ModflowOc)

sms = flopy.modflow.ModflowSms(mf)
assert isinstance(sms, flopy.modflow.ModflowSms)
sms = flopy.mfusg.MfUsgSms(mf)
assert isinstance(sms, flopy.mfusg.MfUsgSms)

# write well file
wel.write_file()
assert os.path.isfile(os.path.join(cpth, f"{mf.name}.wel")) is True
wel2 = flopy.modflow.ModflowWel.load(
wel2 = flopy.mfusg.MfUsgWel.load(
os.path.join(cpth, f"{mf.name}.wel"), mf
)
assert wel2.stress_period_data[0] == wel.stress_period_data[0]
Expand Down
64 changes: 27 additions & 37 deletions autotest/t016_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@ def test_usg_disu_load():
assert os.path.isfile(fname), f"disu file not found {fname}"

# Create the model
m = flopy.modflow.Modflow(modelname="usgload", verbose=True)
m = flopy.mfusg.MfUsg(modelname="usgload", verbose=True)

# Load the disu file
disu = flopy.modflow.ModflowDisU.load(fname, m)
assert isinstance(disu, flopy.modflow.ModflowDisU)
disu = flopy.mfusg.MfUsgDisU.load(fname, m)
assert isinstance(disu, flopy.mfusg.MfUsgDisU)

# Change where model files are written
model_ws = tpth
Expand All @@ -42,7 +42,7 @@ def test_usg_disu_load():
)

# Load disu file
disu2 = flopy.modflow.ModflowDisU.load(fname, m)
disu2 = flopy.mfusg.MfUsgDisU.load(fname, m)
for (key1, value1), (key2, value2) in zip(
disu2.__dict__.items(), disu.__dict__.items()
):
Expand All @@ -67,11 +67,11 @@ def test_usg_sms_load():
assert os.path.isfile(fname), f"sms file not found {fname}"

# Create the model
m = flopy.modflow.Modflow(modelname="usgload", verbose=True)
m = flopy.mfusg.MfUsg(modelname="usgload", verbose=True)

# Load the sms file
sms = flopy.modflow.ModflowSms.load(fname, m)
assert isinstance(sms, flopy.modflow.ModflowSms)
sms = flopy.mfusg.MfUsgSms.load(fname, m)
assert isinstance(sms, flopy.mfusg.MfUsgSms)

# Change where model files are written
model_ws = tpth
Expand All @@ -84,7 +84,7 @@ def test_usg_sms_load():
)

# Load sms file
sms2 = flopy.modflow.ModflowSms.load(fname, m)
sms2 = flopy.mfusg.MfUsgSms.load(fname, m)
for (key1, value1), (key2, value2) in zip(
sms2.__dict__.items(), sms.__dict__.items()
):
Expand All @@ -96,7 +96,7 @@ def test_usg_sms_load():


def test_usg_model():
mf = flopy.modflow.Modflow(
mf = flopy.mfusg.MfUsg(
version="mfusg",
structured=True,
model_ws=tpth,
Expand All @@ -105,8 +105,8 @@ def test_usg_model():
)
dis = flopy.modflow.ModflowDis(mf, nlay=1, nrow=11, ncol=11)
bas = flopy.modflow.ModflowBas(mf)
lpf = flopy.modflow.ModflowLpf(mf)
wel = flopy.modflow.ModflowWel(
lpf = flopy.mfusg.MfUsgLpf(mf)
wel = flopy.mfusg.MfUsgWel(
mf, stress_period_data={0: [[0, 5, 5, -1.0]]}
)
ghb = flopy.modflow.ModflowGhb(
Expand All @@ -119,7 +119,7 @@ def test_usg_model():
},
)
oc = flopy.modflow.ModflowOc(mf)
sms = flopy.modflow.ModflowSms(mf, options="complex")
sms = flopy.mfusg.MfUsgSms(mf, options="complex")

# run with defaults
mf.write_input()
Expand All @@ -130,7 +130,7 @@ def test_usg_model():
# try different complexity options; all should run successfully
for complexity in ["simple", "moderate", "complex"]:
print(f"testing MFUSG with sms complexity: {complexity}")
sms = flopy.modflow.ModflowSms(mf, options=complexity)
sms = flopy.mfusg.MfUsgSms(mf, options=complexity)
sms.write_file()
if run:
success, buff = mf.run_model()
Expand All @@ -148,22 +148,22 @@ def test_usg_load_01B():
assert os.path.isfile(fname), f"nam file not found {fname}"

# Create the model
m = flopy.modflow.Modflow(modelname="usgload_1b", verbose=True)
m = flopy.mfusg.MfUsg(modelname="usgload_1b", verbose=True)

# Load the model, with checking
m = m.load(fname, check=True)

# assert disu, lpf, bas packages have been loaded
msg = "flopy failed on loading mfusg disu package"
assert isinstance(m.disu, flopy.modflow.mfdisu.ModflowDisU), msg
assert isinstance(m.disu, flopy.mfusg.MfUsgDisU), msg
msg = "flopy failed on loading mfusg lpf package"
assert isinstance(m.lpf, flopy.modflow.mflpf.ModflowLpf), msg
assert isinstance(m.lpf, flopy.mfusg.MfUsgLpf), msg
msg = "flopy failed on loading mfusg bas package"
assert isinstance(m.bas6, flopy.modflow.mfbas.ModflowBas), msg
msg = "flopy failed on loading mfusg oc package"
assert isinstance(m.oc, flopy.modflow.mfoc.ModflowOc), msg
msg = "flopy failed on loading mfusg sms package"
assert isinstance(m.sms, flopy.modflow.mfsms.ModflowSms), msg
assert isinstance(m.sms, flopy.mfusg.MfUsgSms), msg


def test_usg_load_45usg():
Expand All @@ -173,26 +173,26 @@ def test_usg_load_45usg():
assert os.path.isfile(fname), f"nam file not found {fname}"

# Create the model
m = flopy.modflow.Modflow(modelname="45usg", verbose=True)
m = flopy.mfusg.MfUsg(modelname="45usg", verbose=True)

# Load the model, with checking.
m = m.load(fname, check=True)

# assert disu, lpf, bas packages have been loaded
msg = "flopy failed on loading mfusg disu package"
assert isinstance(m.disu, flopy.modflow.mfdisu.ModflowDisU), msg
assert isinstance(m.disu, flopy.mfusg.MfUsgDisU), msg
msg = "flopy failed on loading mfusg lpf package"
assert isinstance(m.lpf, flopy.modflow.mflpf.ModflowLpf), msg
assert isinstance(m.lpf, flopy.mfusg.MfUsgLpf), msg
msg = "flopy failed on loading mfusg bas package"
assert isinstance(m.bas6, flopy.modflow.mfbas.ModflowBas), msg
msg = "flopy failed on loading mfusg oc package"
assert isinstance(m.oc, flopy.modflow.mfoc.ModflowOc), msg
msg = "flopy failed on loading mfusg sms package"
assert isinstance(m.sms, flopy.modflow.mfsms.ModflowSms), msg
assert isinstance(m.sms, flopy.mfusg.MfUsgSms), msg
msg = "flopy failed on loading mfusg drn package"
assert isinstance(m.drn, flopy.modflow.mfdrn.ModflowDrn), msg
msg = "flopy failed on loading mfusg wel package"
assert isinstance(m.wel, flopy.modflow.mfwel.ModflowWel), msg
assert isinstance(m.wel, flopy.mfusg.MfUsgWel), msg


def test_usg_rch_evt_models01():
Expand All @@ -205,9 +205,7 @@ def test_usg_rch_evt_models01():
"..", "examples", "data", "mfusg_test", "rch_evt_tests"
)
nam = "usg_rch_evt.nam"
m = flopy.modflow.Modflow.load(
nam, model_ws=model_ws, version="mfusg", exe_name=v
)
m = flopy.mfusg.MfUsg.load(nam, model_ws=model_ws, exe_name=v)
m.riv.check()
m.model_ws = tpth
m.write_input()
Expand All @@ -226,9 +224,7 @@ def test_usg_rch_evt_models02():
"..", "examples", "data", "mfusg_test", "rch_evt_tests"
)
nam = "usg_rch_evt_nrchop2.nam"
m = flopy.modflow.Modflow.load(
nam, model_ws=model_ws, version="mfusg", exe_name=v
)
m = flopy.mfusg.MfUsg.load(nam, model_ws=model_ws, exe_name=v)
m.model_ws = tpth
m.write_input()
if run:
Expand All @@ -246,9 +242,7 @@ def test_usg_rch_evt_models02a():
"..", "examples", "data", "mfusg_test", "rch_evt_tests"
)
nam = "usg_rch_evt_nrchop2a.nam"
m = flopy.modflow.Modflow.load(
nam, model_ws=model_ws, version="mfusg", exe_name=v
)
m = flopy.mfusg.MfUsg.load(nam, model_ws=model_ws, exe_name=v)
m.model_ws = tpth
m.write_input()
if run:
Expand All @@ -263,19 +257,15 @@ def test_usg_ss_to_tr():
"..", "examples", "data", "mfusg_test", "01A_nestedgrid_nognc"
)
nam = "flow.nam"
m = flopy.modflow.Modflow.load(
nam, model_ws=model_ws, version="mfusg", exe_name=v
)
m = flopy.mfusg.MfUsg.load(nam, model_ws=model_ws, exe_name=v)
m.model_ws = tpth
m.disu.steady = [False]
m.write_input()
if run:
success, buff = m.run_model()
assert success

m = flopy.modflow.Modflow.load(
nam, model_ws=tpth, version="mfusg", exe_name=v
)
m = flopy.mfusg.MfUsg.load(nam, model_ws=tpth, exe_name=v)
if run:
success, buff = m.run_model()
assert success
Expand Down
4 changes: 2 additions & 2 deletions autotest/t038_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ def test_load_usg():

# function to load a MODFLOW-USG model and then write it back out
def load_model(namfile, model_ws):
m = flopy.modflow.Modflow.load(
namfile, model_ws=model_ws, version="mfusg", verbose=True, check=False
m = flopy.mfusg.MfUsg.load(
namfile, model_ws=model_ws, verbose=True, check=False
)
assert m, f"Could not load namefile {namfile}"
assert m.load_fail is False
Expand Down
6 changes: 2 additions & 4 deletions autotest/t061_test_gridgen.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,7 @@ def test_gridgen():
botm=botm,
)

ms_u = flopy.modflow.Modflow(
modelname="mymfusgmodel", model_ws=cpth, version="mfusg"
)
ms_u = flopy.mfusg.MfUsg(modelname="mymfusgmodel", model_ws=cpth)
dis_usg = flopy.modflow.ModflowDis(
ms_u,
nlay=nlay,
Expand Down Expand Up @@ -228,7 +226,7 @@ def test_gridgen():
assert nlist == nlist2, msg

# test getting a modflow-usg disu package
mu = flopy.modflow.Modflow(version="mfusg", structured=False)
mu = flopy.mfusg.MfUsg(structured=False)
disu = g.get_disu(mu)

# test mfusg with vertical pass-through (True above at instantiation)
Expand Down
20 changes: 5 additions & 15 deletions autotest/t420_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,6 @@
import flopy
from flopy.utils.gridgen import Gridgen

try:
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.collections import QuadMesh, PathCollection, LineCollection
except:
print("Matplotlib not installed, tests cannot be run.")
matplotlib = None
plt = None

Comment on lines -21 to -29
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Glad you got this one. Also noticed that it is t420. We can change that number in a future PR.

# Set gridgen executable
gridgen_exe = "gridgen"
if platform.system() in "Windows":
Expand Down Expand Up @@ -92,18 +83,17 @@ def test_mfusg():
# create the mfusg modoel
ws = os.path.join(tpth, "gridgen_mfusg")
name = "mymodel"
m = flopy.modflow.Modflow(
m = flopy.mfusg.MfUsg(
modelname=name,
model_ws=ws,
version="mfusg",
exe_name=mfusg_exe,
structured=False,
)
disu = flopy.modflow.ModflowDisU(m, **gridprops)
disu = flopy.mfusg.MfUsgDisU(m, **gridprops)
bas = flopy.modflow.ModflowBas(m)
lpf = flopy.modflow.ModflowLpf(m)
lpf = flopy.mfusg.MfUsgLpf(m)
chd = flopy.modflow.ModflowChd(m, stress_period_data=chdspd)
sms = flopy.modflow.ModflowSms(m)
sms = flopy.mfusg.MfUsgSms(m)
oc = flopy.modflow.ModflowOc(m, stress_period_data={(0, 0): ["save head"]})
m.write_input()

Expand Down Expand Up @@ -137,4 +127,4 @@ def test_mfusg():
return

if __name__ == '__main__':
test_mfusg()
test_mfusg()
15 changes: 8 additions & 7 deletions autotest/t506_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -376,18 +376,17 @@ def test_mfusg():
# create the mfusg modoel
ws = os.path.join(tpth, "gridgen_mfusg")
name = "mymodel"
m = flopy.modflow.Modflow(
m = flopy.mfusg.MfUsg(
modelname=name,
model_ws=ws,
version="mfusg",
exe_name=mfusg_exe,
structured=False,
)
disu = flopy.modflow.ModflowDisU(m, **gridprops)
disu = flopy.mfusg.MfUsgDisU(m, **gridprops)
bas = flopy.modflow.ModflowBas(m)
lpf = flopy.modflow.ModflowLpf(m)
lpf = flopy.mfusg.MfUsgLpf(m)
chd = flopy.modflow.ModflowChd(m, stress_period_data=chdspd)
sms = flopy.modflow.ModflowSms(m)
sms = flopy.mfusg.MfUsgSms(m)
oc = flopy.modflow.ModflowOc(m, stress_period_data={(0, 0): ["save head"]})
m.write_input()

Expand Down Expand Up @@ -457,12 +456,14 @@ def test_mfusg():

# re-run with an LPF keyword specified. This would have thrown an error
# before the addition of ikcflag to mflpf.py (flopy 3.3.3 and earlier).
lpf = flopy.modflow.ModflowLpf(m, novfc=True, nocvcorrection=True)
lpf = flopy.mfusg.MfUsgLpf(
m, novfc=True, nocvcorrection=True
)
m.write_input()
m.run_model()

# also test load of unstructured LPF with keywords
lpf2 = flopy.modflow.ModflowLpf.load(
lpf2 = flopy.mfusg.MfUsgLpf.load(
os.path.join(ws, f"{name}.lpf"), m, check=False
)
msg = "NOCVCORRECTION and NOVFC should be in lpf options but at least one is not."
Expand Down
Loading