In [1]:
%matplotlib inline
import sys
import shutil
import os
import glob
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import flopy
print(sys.version)
print('numpy version: {}'.format(np.__version__))
print('matplotlib version: {}'.format(mpl.__version__))
print('pandas version: {}'.format(pd.__version__))
print('flopy version: {}'.format(flopy.__version__))
In [2]:
mffiles = glob.glob('../data/mp6/EXAMPLE.*')
for f in mffiles:
shutil.copy(f, 'temp/' + os.path.split(f)[1])
In [3]:
model_ws = 'temp/'
m = flopy.modflow.Modflow.load('EXAMPLE.nam', model_ws=model_ws)
m.get_package_list()
Out[3]:
In [4]:
nrow, ncol, nlay, nper = m.nrow_ncol_nlay_nper
nrow, ncol, nlay, nper
Out[4]:
In [5]:
m.dis.steady.array
Out[5]:
In [6]:
m.write_input()
In [7]:
hdsfile = flopy.utils.HeadFile(model_ws + 'EXAMPLE.HED')
hdsfile.get_kstpkper()
Out[7]:
In [8]:
hds = hdsfile.get_data(kstpkper=(0, 2))
In [9]:
plt.imshow(hds[4, :, :])
plt.colorbar();
In [10]:
fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(1, 1, 1, aspect='equal')
modelmap = flopy.plot.ModelMap(model=m, layer=4)
quadmesh = modelmap.plot_ibound()
linecollection = modelmap.plot_grid()
riv = modelmap.plot_bc('RIV', color='g', plotAll=True)
quadmesh = modelmap.plot_bc('WEL', kper=1, plotAll=True)
contour_set = modelmap.contour_array(hds,
levels=np.arange(np.min(hds),np.max(hds),0.5), colors='b')
plt.clabel(contour_set, inline=1, fontsize=14)
Out[10]:
In [11]:
mp = flopy.modpath.Modpath(modelname='ex6',
exe_name='mp6',
modflowmodel=m,
model_ws='temp',
dis_file=m.name+'.dis',
head_file=m.name+'.hed',
budget_file=m.name+'.bud')
mpb = flopy.modpath.ModpathBas(mp, hdry=m.lpf.hdry, laytyp=m.lpf.laytyp, ibound=1, prsity=0.1)
# start the particles at begining of per 3, step 1, as in example 3 in MODPATH6 manual
# (otherwise particles will all go to river)
sim = mp.create_mpsim(trackdir='forward', simtype='pathline', packages='RCH', start_time=(2, 0, 1.))
mp.write_input()
mp.run_model(silent=False)
Out[11]:
In [12]:
epobj = flopy.utils.EndpointFile('temp/ex6.mpend')
well_epd = epobj.get_destination_endpoint_data(dest_cells=[(4, 12, 12)])
# returns record array of same form as epobj.get_all_data()
In [13]:
well_epd[0:2]
Out[13]:
In [14]:
fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(1, 1, 1, aspect='equal')
modelmap = flopy.plot.ModelMap(model=m, layer=2)
quadmesh = modelmap.plot_ibound()
linecollection = modelmap.plot_grid()
riv = modelmap.plot_bc('RIV', color='g', plotAll=True)
quadmesh = modelmap.plot_bc('WEL', kper=1, plotAll=True)
contour_set = modelmap.contour_array(hds,
levels=np.arange(np.min(hds),np.max(hds),0.5), colors='b')
plt.clabel(contour_set, inline=1, fontsize=14)
modelmap.plot_endpoint(well_epd, direction='starting', colorbar=True)
Out[14]:
In [15]:
epobj.write_shapefile(well_epd, direction='starting', shpname='temp/starting_locs.shp', sr=m.sr)
In [16]:
# make a selection of cells that terminate in the well cell = (4, 12, 12)
pthobj = flopy.utils.PathlineFile('temp/ex6.mppth')
well_pathlines = pthobj.get_destination_pathline_data(dest_cells=[(4, 12, 12)])
well_pathlines # this is a record array of same form as pthobj._data
Out[16]:
In [17]:
fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(1, 1, 1, aspect='equal')
modelmap = flopy.plot.ModelMap(model=m, layer=2)
quadmesh = modelmap.plot_ibound()
linecollection = modelmap.plot_grid()
riv = modelmap.plot_bc('RIV', color='g', plotAll=True)
quadmesh = modelmap.plot_bc('WEL', kper=1, plotAll=True)
contour_set = modelmap.contour_array(hds,
levels=np.arange(np.min(hds),np.max(hds),0.5), colors='b')
plt.clabel(contour_set, inline=1, fontsize=14)
modelmap.plot_endpoint(well_epd, direction='starting', colorbar=True)
# for now, each particle must be plotted individually
#(plot_pathline() will plot a single line for recarray with multiple particles)
for pid in np.unique(well_pathlines.particleid):
modelmap.plot_pathline(pthobj.get_data(pid), layer='all', colors='red');
In [18]:
# one line feature per particle
pthobj.write_shapefile(well_pathlines,
direction='starting', shpname='temp/pathlines.shp')
# one line feature for each row in pathline file
# (can be used to color lines by time or layer in a GIS)
pthobj.write_shapefile(well_pathlines, one_per_particle=False,
shpname='temp/pathlines_1per.shp')
In [19]:
model_ws = 'temp/'
m2 = flopy.modflow.Modflow.load('EXAMPLE.nam', model_ws=model_ws, exe_name='mf2005')
m2.get_package_list()
Out[19]:
In [20]:
m2.nrow_ncol_nlay_nper
Out[20]:
In [21]:
m2.wel.stress_period_data.data
Out[21]:
In [22]:
node_data = np.array([(3, 12, 12, 'well1', 'skin', -1, 0, 0, 0, 1., 2., 5., 6.2),
(4, 12, 12, 'well1', 'skin', -1, 0, 0, 0, 0.5, 2., 5., 6.2)],
dtype=[('k', np.int), ('i', np.int), ('j', np.int),
('wellid', np.object), ('losstype', np.object),
('pumploc', np.int), ('qlimit', np.int),
('ppflag', np.int), ('pumpcap', np.int),
('rw', np.float), ('rskin', np.float),
('kskin', np.float), ('zpump', np.float)]).view(np.recarray)
stress_period_data = {0: np.array([(0, 'well1', -150000.0)], dtype=[('per', np.int), ('wellid', np.object),
('qdes', np.float)])}
In [23]:
m2.name = 'Example_mnw'
m2.remove_package('WEL')
mnw2 = flopy.modflow.ModflowMnw2(model=m2, mnwmax=1,
node_data=node_data,
stress_period_data=stress_period_data,
itmp=[1, -1, -1])
m2.get_package_list()
Out[23]:
In [24]:
m2.write_input()
m2.run_model(silent=False)
Out[24]:
In [25]:
mp = flopy.modpath.Modpath(modelname='ex6mnw',
exe_name='mp6',
modflowmodel=m2,
model_ws='temp',
dis_file=m.name+'.dis',
head_file=m.name+'.hds',
budget_file=m.name+'.cbc')
mpb = flopy.modpath.ModpathBas(mp, hdry=m2.lpf.hdry, laytyp=m2.lpf.laytyp, ibound=1, prsity=0.1)
sim = mp.create_mpsim(trackdir='backward', simtype='pathline', packages='MNW2')
mp.write_input()
mp.run_model(silent=False)
Out[25]:
In [26]:
pthobj = flopy.utils.PathlineFile('temp/ex6mnw.mppth')
epdobj = flopy.utils.EndpointFile('temp/ex6mnw.mpend')
well_epd = epdobj.get_alldata()
well_pathlines = pthobj.get_alldata() # returns a list of recarrays; one per pathline
In [27]:
fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(1, 1, 1, aspect='equal')
modelmap = flopy.plot.ModelMap(model=m2, layer=2)
quadmesh = modelmap.plot_ibound()
linecollection = modelmap.plot_grid()
riv = modelmap.plot_bc('RIV', color='g', plotAll=True)
quadmesh = modelmap.plot_bc('MNW2', kper=1, plotAll=True)
contour_set = modelmap.contour_array(hds,
levels=np.arange(np.min(hds),np.max(hds),0.5), colors='b')
plt.clabel(contour_set, inline=1, fontsize=14)
modelmap.plot_pathline(well_pathlines, travel_time='<10000',
layer='all', colors='red');
In [ ]: