Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
337 changes: 99 additions & 238 deletions examples/Notebooks/flopy3_demo_of_modelgrid_classes.ipynb

Large diffs are not rendered by default.

17 changes: 14 additions & 3 deletions flopy/discretization/grid.py
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,17 @@ def __repr__(self):
s += "lenuni:{0}; ".format(self.lenuni)
return s

@property
def is_valid(self):
return True

@property
def is_complete(self):
if self._top is not None and self._botm is not None and \
self._idomain is not None:
return True
return False

@property
def grid_type(self):
return self._grid_type
Expand Down Expand Up @@ -237,11 +248,11 @@ def prj(self, prj):

@property
def top(self):
return self._top
return copy.deepcopy(self._top)

@property
def botm(self):
return self._botm
return copy.deepcopy(self._botm)

@property
def top_botm(self):
Expand All @@ -258,7 +269,7 @@ def lenuni(self):

@property
def idomain(self):
return self._idomain
return copy.deepcopy(self._idomain)

@property
def shape(self):
Expand Down
21 changes: 16 additions & 5 deletions flopy/discretization/structuredgrid.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import copy
import numpy as np
from .grid import Grid, CachedData

Expand Down Expand Up @@ -61,6 +62,19 @@ def __init__(self, delc=None, delr=None, top=None, botm=None, idomain=None,
####################
# Properties
####################
@property
def is_valid(self):
if self.__delc is not None and self.__delr is not None:
return True
return False

@property
def is_complete(self):
if self.__delc is not None and self.__delr is not None and \
super(StructuredGrid, self).is_complete:
return True
return False

@property
def nlay(self):
return self.__nlay
Expand All @@ -87,11 +101,11 @@ def extent(self):

@property
def delc(self):
return self.__delc
return copy.deepcopy(self.__delc)

@property
def delr(self):
return self.__delr
return copy.deepcopy(self.__delr)

@property
def xyzvertices(self):
Expand Down Expand Up @@ -410,8 +424,6 @@ def write_shapefile(self, filename='grid.shp', epsg=None, prj=None):
#extent = t.extent
grid = t.grid_lines

#print('break')

t.use_ref_coords = True
sr_x = t.xvertices
sr_y = t.yvertices
Expand All @@ -422,4 +434,3 @@ def write_shapefile(self, filename='grid.shp', epsg=None, prj=None):
print(sr_grid)
#t.plot_grid_lines()
#plt.show()
#print('break')
12 changes: 12 additions & 0 deletions flopy/discretization/unstructuredgrid.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,18 @@ def __init__(self, vertices=None, iverts=None, xcenters=None, ycenters=None,
assert np.array(self.xcellcenters).shape[0] == self.ncpl
assert np.array(self.ycellcenters).shape[0] == self.ncpl

@property
def is_valid(self):
if self._nodes is not None:
return True
return False

@property
def is_complete(self):
if self._nodes is not None and \
super(UnstructuredGrid, self).is_complete:
return True
return False

@property
def grid_type(self):
Expand Down
17 changes: 13 additions & 4 deletions flopy/discretization/vertexgrid.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,19 @@ def __init__(self, vertices=None, cell2d=None, top=None, botm=None, idomain=None
self._nlay = None
self._ncpl = None

@property
def is_valid(self):
if self._vertices is not None and self._cell2d is not None:
return True
return False

@property
def is_complete(self):
if self._vertices is not None and self._cell2d is not None and \
super(VertexGrid, self).is_complete:
return True
return False

@property
def nlay(self):
if self._botm is not None:
Expand Down Expand Up @@ -296,8 +309,6 @@ def _build_grid_geometry_info(self):
sr_lc = t.grid_lines
sr_e = t.extent

print('break')

t.use_ref_coords = False
x = t.xvertices
y = t.yvertices
Expand All @@ -307,5 +318,3 @@ def _build_grid_geometry_info(self):
zc = t.zcellcenters
lc = t.grid_lines
e = t.extent

print('break')
11 changes: 8 additions & 3 deletions flopy/mbase.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,14 @@ def __init__(self):
self._mg_resync = True
self._modelgrid = None

def update_modelgrid(self):
if self._modelgrid is not None:
self._modelgrid = Grid(proj4=self._modelgrid.proj4,
xoff=self._modelgrid.xoffset,
yoff=self._modelgrid.yoffset,
angrot=self._modelgrid.angrot)
self._mg_resync = True

@property
@abc.abstractmethod
def modelgrid(self):
Expand Down Expand Up @@ -1146,12 +1154,10 @@ def _set_name(self, value):
p.fn_path = os.path.join(self.model_ws, p.file_name[0])

def __setattr__(self, key, value):

if key == "free_format_input":
# if self.bas6 is not None:
# self.bas6.ifrefm = value
super(BaseModel, self).__setattr__(key, value)

elif key == "name":
self._set_name(value)
elif key == "model_ws":
Expand Down Expand Up @@ -1181,7 +1187,6 @@ def __setattr__(self, key, value):
else:
raise Exception("cannot set start_datetime -"
"ModflowDis not found")

else:
super(BaseModel, self).__setattr__(key, value)

Expand Down
3 changes: 1 addition & 2 deletions flopy/mf6/mfmodel.py
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,6 @@ def modeldiscrit(self):
def modelgrid(self):
if not self._mg_resync:
return self._modelgrid

if self.get_grid_type() == DiscretizationType.DIS:
dis = self.get_package('dis')
if not hasattr(dis, '_init_complete'):
Expand Down Expand Up @@ -400,7 +399,7 @@ def modelgrid(self):
self._modelgrid.set_coord_info(xorig, yorig, angrot,
self._modelgrid.epsg,
self._modelgrid.proj4)

self._mg_resync = not self._modelgrid.is_complete
return self._modelgrid

@property
Expand Down
1 change: 0 additions & 1 deletion flopy/mf6/mfpackage.py
Original file line number Diff line number Diff line change
Expand Up @@ -1195,7 +1195,6 @@ def __setattr__(self, name, value):
if hasattr(self, name) and getattr(self, name) is not None:
attribute = object.__getattribute__(self, name)
if attribute is not None and isinstance(attribute, mfdata.MFData):
self.parent._mg_resync = True
try:
if isinstance(attribute, mfdatalist.MFList):
attribute.set_data(value, autofill=True)
Expand Down
2 changes: 2 additions & 0 deletions flopy/modflow/mf.py
Original file line number Diff line number Diff line change
Expand Up @@ -300,10 +300,12 @@ def modelgrid(self):
self._modelgrid.set_coord_info(xoff, yoff, self._modelgrid.angrot,
self._modelgrid.epsg,
self._modelgrid.proj4)
self._mg_resync = not self._modelgrid.is_complete
return self._modelgrid

@modelgrid.setter
def modelgrid(self, value):
self._mg_resync = False
self._modelgrid = value

@property
Expand Down
2 changes: 1 addition & 1 deletion flopy/mt3d/mt.py
Original file line number Diff line number Diff line change
Expand Up @@ -414,7 +414,7 @@ def modelgrid(self):
angrot = 0.0

self._modelgrid.set_coord_info(xoff, yoff, angrot, epsg, proj4)

self._mg_resync = not self._modelgrid.is_complete
return self._modelgrid

@property
Expand Down
2 changes: 0 additions & 2 deletions flopy/pakbase.py
Original file line number Diff line number Diff line change
Expand Up @@ -174,8 +174,6 @@ def __setitem__(self, key, value):
def __setattr__(self, key, value):
var_dict = vars(self)
if key in list(var_dict.keys()):
if hasattr(self, 'parent'):
self.parent._mg_resync = True
old_value = var_dict[key]
if isinstance(old_value, Util2d):
value = Util2d(self.parent, old_value.shape,
Expand Down
1 change: 1 addition & 0 deletions flopy/seawat/swt.py
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@ def modelgrid(self):
self._modelgrid.set_coord_info(xoff, yoff, self._modelgrid.angrot,
self._modelgrid.epsg,
self._modelgrid.proj4)
self._mg_resync = not self._modelgrid.is_complete
return self._modelgrid

@property
Expand Down