Skip to content

Commit

Permalink
Refactor(mfusg), Feat(mfusgcln, mfusggnc) (#1261)
Browse files Browse the repository at this point in the history
* modflowusg

* refactor(modflowusg)

* Refactor(mfusg), Feat(mfusgcln, mfusggnc)

* refactor(t420_test.py) for mfusg restructure

* rename(modflowusg-->mfusg) rename all modules, classes etc for simplicity

* rename(t420_test.py-->t080_test.py)

Co-authored-by: swfwmd <hua.zhang@swfwmd.state.fl.us>
  • Loading branch information
cnicol-gwlogic and swfwmd authored Oct 11, 2021
1 parent 376b323 commit 7b97622
Show file tree
Hide file tree
Showing 34 changed files with 7,041 additions and 215 deletions.
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


[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 → autotest/t080_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

# 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

0 comments on commit 7b97622

Please sign in to comment.