Skip to content

Commit 8fdb973

Browse files
mjrenomjreno
mjreno
authored and
mjreno
committed
transpose dis arrays
1 parent abe638b commit 8fdb973

File tree

4 files changed

+193
-54
lines changed

4 files changed

+193
-54
lines changed

docs/examples/quickstart.py

+10-4
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
)
3434

3535
# model interface
36-
gwfif = Flopy3Model(gwf)
36+
fp3gwf = Flopy3Model(gwf)
3737

3838
# check CHD
3939
assert chd.data["head"][0, 0] == 1.0
@@ -55,15 +55,21 @@
5555
# set data
5656
bobj = flopy.utils.CellBudgetFile(bpth, precision="double")
5757
spdis = bobj.get_data(text="DATA-SPDIS")[0]
58-
# spdis = imod.mf6.open_cbc(bpth, grbpth, merge_to_dataset=True)
58+
spdisimod = imod.mf6.open_cbc(bpth, grbpth, merge_to_dataset=True)
59+
print(spdis)
60+
print(type(spdisimod))
61+
# print(spdisimod)
62+
for d in spdisimod.variables:
63+
print(d)
64+
print(spdisimod.variables[d].data)
5965
heads = imod.mf6.open_hds(hpth, grbpth)
6066

6167
# discharge vectors
62-
qx, qy, qz = flopy.utils.postprocessing.get_specific_discharge(spdis, gwfif)
68+
qx, qy, qz = flopy.utils.postprocessing.get_specific_discharge(spdis, fp3gwf)
6369

6470
# plot
6571
fig, ax = plt.subplots()
66-
pmv = flopy.plot.PlotMapView(model=gwfif, ax=ax)
72+
pmv = flopy.plot.PlotMapView(model=fp3gwf, ax=ax)
6773
pmv.plot_array(heads[0][0])
6874
pmv.plot_grid(colors="white")
6975
pmv.contour_array(heads[0][0], levels=[0.2, 0.4, 0.6, 0.8], linewidths=3.0)

flopy4/mf6/gwf/dis.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -58,19 +58,19 @@ class Dis(Package):
5858
)
5959
top: NDArray[np.floating] = array(
6060
default=1.0,
61-
dims=("ncol", "nrow"),
61+
dims=("nrow", "ncol"),
6262
metadata={"block": "griddata"},
6363
converter=Converter(convert_array, takes_self=True, takes_field=True),
6464
)
6565
botm: NDArray[np.floating] = array(
6666
default=0.0,
67-
dims=("ncol", "nrow", "nlay"),
67+
dims=("nlay", "nrow", "ncol"),
6868
metadata={"block": "griddata"},
6969
converter=Converter(convert_array, takes_self=True, takes_field=True),
7070
)
7171
idomain: NDArray[np.integer] = array(
7272
default=1,
73-
dims=("ncol", "nrow", "nlay"),
73+
dims=("nlay", "nrow", "ncol"),
7474
metadata={"block": "griddata"},
7575
converter=Converter(convert_array, takes_self=True, takes_field=True),
7676
)

flopy4/mf6/interface/flopy3.py

+16-23
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
import re
2-
from typing import Optional
2+
from typing import Optional, Union
33

4-
import numpy as np
54
from flopy.datbase import DataInterface, DataListInterface, DataType
65
from flopy.discretization import StructuredGrid
76
from flopy.discretization.grid import Grid
87
from flopy.discretization.modeltime import ModelTime
98
from flopy.mbase import ModelInterface
109
from flopy.pakbase import PackageInterface
1110
from flopy.plot.plotutil import PlotUtilities
12-
from xattree import _get_xatspec
11+
from xattree import _Array, _Attr, _get_xatspec
1312

1413
from flopy4.mf6.model import Model
1514
from flopy4.mf6.package import Package
@@ -51,9 +50,9 @@ def __init__(
5150
self._grid = StructuredGrid(
5251
delc=model.dis.delc.data,
5352
delr=model.dis.delr.data,
54-
top=np.transpose(model.dis.top.data),
55-
botm=np.transpose(model.dis.botm.data),
56-
idomain=np.transpose(model.dis.idomain.data),
53+
top=model.dis.top.data,
54+
botm=model.dis.botm.data,
55+
idomain=model.dis.idomain.data,
5756
lenuni=lenuni,
5857
crs=None,
5958
prjfile=None,
@@ -104,8 +103,8 @@ def solver_tols(self):
104103
"""
105104
Solver inner hclose and rclose values.
106105
"""
107-
assert self._ims
108-
return self._ims.inner_hclose, self._ims.inner_rclose
106+
if self._ims is not None:
107+
return self._ims.inner_hclose, self._ims.inner_rclose
109108

110109
return None
111110

@@ -154,8 +153,8 @@ def get_package_list(self, ftype=None):
154153
return [p.name for p in self._plist]
155154

156155
def plot(self, packages: Optional[list] = None, **kwargs):
157-
if packages is None:
158-
packages = self.get_package_list()
156+
# if packages is None:
157+
# packages = self.get_package_list()
159158
return PlotUtilities._plot_model_helper(
160159
self, SelPackList=packages, **kwargs
161160
)
@@ -190,25 +189,25 @@ def __init__(
190189
and self._spec.flat[a].type is not None
191190
):
192191
d_fp3 = Flopy3Data(
192+
data=self._data.attrs[a],
193+
spec=self._spec.flat[a],
193194
name=a,
194195
modelname=self.parent,
195196
modelgrid=self._grid,
196197
modeltime=modeltime,
197-
data=self._data.attrs[a],
198-
spec=self._spec.flat[a],
199198
)
200199
self.__dict__[f"{a}"] = d_fp3
201200
self._dlist.append(d_fp3)
202201

203202
for v in self._data.data_vars:
204203
if self._data.data_vars[v] is not None:
205204
d_fp3 = Flopy3Data(
205+
data=self._data.data_vars[v],
206+
spec=self._spec.flat[v],
206207
name=v,
207208
modelname=self.parent,
208209
modelgrid=self._grid,
209210
modeltime=modeltime,
210-
data=self._data.data_vars[v],
211-
spec=self._spec.flat[v],
212211
)
213212
self.__dict__[f"{v}"] = d_fp3
214213
self._dlist.append(d_fp3)
@@ -257,22 +256,18 @@ def check(self, f=None, verbose=True, level=1, checktype=None):
257256
return None
258257

259258
def plot(self, **kwargs):
260-
# kwargs = {}
261-
# kwargs["filename_base"] = "modelif"
262-
263259
return PlotUtilities._plot_package_helper(self, **kwargs)
264260

265261

266262
class Flopy3Data(DataInterface):
267263
def __init__(
268-
# TODO: types of data and spec are unions
269264
self,
265+
data,
266+
spec: Union[_Attr, _Array],
270267
name: Optional[str] = None,
271268
modelname: Optional[str] = None,
272269
modelgrid: Optional[Grid] = None,
273270
modeltime: Optional[ModelTime] = None,
274-
data=None,
275-
spec=None,
276271
):
277272
assert data is not None
278273
assert spec is not None
@@ -326,14 +321,12 @@ def data_type(self):
326321

327322
@property
328323
def dtype(self):
329-
# return self._spec.type
330324
return self._spec.type.__name__
331325

332326
@property
333327
def array(self):
334328
if self._spec.type.__name__ == "ndarray":
335329
if "nnodes" in self._data.dims:
336-
# TODO: transpose?
337330
if "nper" in self._data.dims:
338331
shape = (
339332
self._time.nper,
@@ -348,7 +341,7 @@ def array(self):
348341

349342
return self._data.data.reshape(shape)
350343
else:
351-
return np.transpose(self._data.data)
344+
return self._data.data
352345
return None
353346

354347
@property

0 commit comments

Comments
 (0)