Skip to content

Commit 306ea60

Browse files
mjrenomjreno
authored andcommitted
incremental commit
1 parent f6a4a71 commit 306ea60

File tree

9 files changed

+586
-178
lines changed

9 files changed

+586
-178
lines changed
Lines changed: 255 additions & 56 deletions
Large diffs are not rendered by default.
Binary file not shown.
Binary file not shown.
92.7 KB
Binary file not shown.

flopy/mf6/data/mfdataarray.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -609,6 +609,13 @@ def store_internal(
609609
== DataStorageType.external_file
610610
):
611611
layer_list.append(index)
612+
if (
613+
#TODO NETCDF-DEV improve
614+
len(layer_list) == 1
615+
and layer_list[0] == 0
616+
and storage.netcdf
617+
):
618+
layer_list[0] = -1
612619
else:
613620
if (
614621
storage.layer_storage[layer].data_storage_type
@@ -950,6 +957,9 @@ def _set_data(
950957
else:
951958
layer_data = aux_var_data
952959
try:
960+
#NETCDF-DEV
961+
if storage.netcdf:
962+
multiplier = 1.0
953963
storage.set_data(
954964
layer_data,
955965
[layer],

flopy/mf6/data/mfdatastorage.py

Lines changed: 41 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,6 @@ class LayerStorage:
7373
whether the data is stored in a binary file
7474
nc_dataset : ModelNetCDFDataset or None
7575
model netcdf dataset
76-
nc_layered : bool
77-
array storage data is layered
7876
7977
Methods
8078
-------
@@ -120,7 +118,6 @@ def __init__(
120118
self.iprn = None
121119
self.binary = False
122120
self.nc_dataset = None
123-
self.nc_layered = False
124121

125122
def set_internal_constant(self):
126123
self.data_storage_type = DataStorageType.internal_constant
@@ -1025,9 +1022,6 @@ def _set_array(
10251022

10261023
success = False
10271024
if preserve_record:
1028-
if self.netcdf and isinstance(data, list):
1029-
# TODO: is this a kludge? #NETCDF-DEV
1030-
data = self._to_ndarray(data, layer)
10311025
if isinstance(data, np.ndarray):
10321026
# try to store while preserving the structure of the
10331027
# existing record
@@ -1128,24 +1122,16 @@ def _set_array_layer(self, data, layer, multiplier, key, preserve_record):
11281122
self.layer_storage[layer].data_storage_type
11291123
== DataStorageType.external_file
11301124
):
1131-
if self.netcdf:
1132-
self.store_netcdf(
1133-
layer,
1134-
self.layer_storage[layer].factor,
1135-
self.layer_storage[layer].iprn,
1136-
data=data,
1137-
)
1138-
else:
1139-
self.store_external(
1140-
self.layer_storage[layer].fname,
1141-
layer,
1142-
self.layer_storage[layer].factor,
1143-
self.layer_storage[layer].iprn,
1144-
data=data,
1145-
do_not_verify=True,
1146-
binary=self.layer_storage[layer].binary,
1147-
preserve_record=preserve_record,
1148-
)
1125+
self.store_external(
1126+
self.layer_storage[layer].fname,
1127+
layer,
1128+
self.layer_storage[layer].factor,
1129+
self.layer_storage[layer].iprn,
1130+
data=data,
1131+
do_not_verify=True,
1132+
binary=self.layer_storage[layer].binary,
1133+
preserve_record=preserve_record,
1134+
)
11491135
else:
11501136
self.store_internal(
11511137
data,
@@ -1162,15 +1148,7 @@ def _set_array_layer(self, data, layer, multiplier, key, preserve_record):
11621148
data[0], data_type
11631149
):
11641150
# store data as const
1165-
if self.netcdf:
1166-
self.store_netcdf(
1167-
layer,
1168-
self.layer_storage[layer].factor,
1169-
self.layer_storage[layer].iprn,
1170-
data=data,
1171-
)
1172-
else:
1173-
self.store_internal(data, layer, True, multiplier, key=key)
1151+
self.store_internal(data, layer, True, multiplier, key=key)
11741152
return True
11751153

11761154
# look for internal and open/close data
@@ -1745,7 +1723,7 @@ def store_external(
17451723
fp = self._simulation_data.mfpath.resolve_path(
17461724
fp_relative, model_name
17471725
)
1748-
else:
1726+
elif fp_relative is not None:
17491727
fp = os.path.join(
17501728
self._simulation_data.mfpath.get_sim_path(), fp_relative
17511729
)
@@ -1859,12 +1837,23 @@ def store_external(
18591837
self._data_path,
18601838
self._stress_period,
18611839
)
1862-
file_access.write_text_file(
1863-
data,
1864-
fp,
1865-
data_type,
1866-
data_size,
1867-
)
1840+
1841+
if self.netcdf:
1842+
# TODO: multiplier NETCDF-DEV
1843+
file_access.set_netcdf_array(
1844+
self.layer_storage[layer].nc_dataset,
1845+
self.data_dimensions.structure.get_package(),
1846+
self.data_dimensions.structure.name,
1847+
data,
1848+
layer,
1849+
)
1850+
else:
1851+
file_access.write_text_file(
1852+
data,
1853+
fp,
1854+
data_type,
1855+
data_size,
1856+
)
18681857
if not preserve_record:
18691858
self.layer_storage[layer_new].factor = multiplier
18701859
self.layer_storage[layer_new].internal_data = None
@@ -1879,28 +1868,6 @@ def store_external(
18791868
layer_new, fp_relative, print_format, binary
18801869
)
18811870

1882-
def store_netcdf(
1883-
self,
1884-
layer=None,
1885-
multiplier=None,
1886-
print_format=None,
1887-
data=None,
1888-
):
1889-
file_access = MFFileAccessArray(
1890-
self.data_dimensions.structure,
1891-
self.data_dimensions,
1892-
self._simulation_data,
1893-
self._data_path,
1894-
self._stress_period,
1895-
)
1896-
file_access.set_netcdf_array(
1897-
self.layer_storage[layer].nc_dataset,
1898-
self.data_dimensions.structure.get_package(),
1899-
self.data_dimensions.structure.name,
1900-
data,
1901-
layer[0],
1902-
)
1903-
19041871
def set_ext_file_attributes(self, layer, file_path, print_format, binary):
19051872
# point to the external file and set flags
19061873
self.layer_storage[layer].fname = file_path
@@ -1922,10 +1889,8 @@ def point_to_existing_external_file(self, arr_line, layer):
19221889

19231890
def _set_storage_netcdf(self, nc_dataset, layered, layer):
19241891
self.netcdf = True
1925-
is_layered = layered and layer > 0
19261892
for idx in self.layer_storage.indexes():
19271893
self.layer_storage[idx].nc_dataset = nc_dataset
1928-
self.layer_storage[idx].nc_layered = is_layered
19291894
self.layer_storage[
19301895
idx
19311896
].data_storage_type = DataStorageType.external_file
@@ -2047,14 +2012,14 @@ def external_to_internal(
20472012
)[0]
20482013
elif self.layer_storage[layer].nc_dataset is not None:
20492014
# TODO: ensure multiplier only set by open/close #NETCDF-DEV
2050-
for idx in self.layer_storage.indexes():
2051-
data_out = (
2052-
file_access.read_netcdf_array(
2053-
self.layer_storage[layer].nc_dataset,
2054-
self.data_dimensions.structure.get_package(),
2055-
self.data_dimensions.structure.name,
2056-
idx[0],
2057-
)
2015+
data_out = (
2016+
file_access.read_netcdf_array(
2017+
self.layer_storage[layer].nc_dataset,
2018+
self._model_or_sim.modeldiscrit,
2019+
self.data_dimensions.structure.get_package(),
2020+
self.data_dimensions.structure.name,
2021+
layer,
2022+
)
20582023
)
20592024
else:
20602025
data_out = file_access.read_text_data_from_file(
@@ -2513,17 +2478,14 @@ def _build_full_data(self, apply_multiplier=False):
25132478
* mult
25142479
)
25152480
elif self.layer_storage[layer].nc_dataset is not None:
2516-
# TODO: ensure multiplier only set by open/close #NETCDF-DEV
2517-
if self.layer_storage[layer].nc_layered:
2518-
nc_layer = layer
2519-
else:
2520-
nc_layer = -1
25212481
data_out = (
25222482
file_access.read_netcdf_array(
25232483
self.layer_storage[layer].nc_dataset,
2484+
self._model_or_sim.modeldiscrit,
25242485
self.data_dimensions.structure.get_package(),
25252486
self.data_dimensions.structure.name,
2526-
nc_layer,
2487+
-1,
2488+
25272489
)
25282490
* mult
25292491
)
@@ -3083,7 +3045,7 @@ def _store_prep(self, layer, multiplier):
30833045
self._simulation_data.debug,
30843046
)
30853047
layer = self._layer_prep(layer)
3086-
if multiplier is None:
3048+
if multiplier is None or self.netcdf:
30873049
multiplier = self.get_default_mult()
30883050
else:
30893051
if isinstance(multiplier, float):

flopy/mf6/data/mffileaccess.py

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -470,11 +470,40 @@ def read_binary_data_from_file(
470470
def read_netcdf_array(
471471
self,
472472
nc_dataset,
473+
modelgrid,
473474
package,
474475
param,
475476
layer,
476477
):
477-
return nc_dataset.array(package, param, layer)
478+
if isinstance(layer, tuple):
479+
layer = layer[0]
480+
481+
# read all data if not layered
482+
if layer == 0 and not self.structure.layered:
483+
layer = -1
484+
485+
# retrieve data
486+
data = nc_dataset.array(package, param, layer)
487+
488+
if (
489+
nc_dataset.nc_type == "mesh2d"
490+
and modelgrid.grid_type == "structured"
491+
):
492+
# reshape 1d and 2d data associated with mesh
493+
if (
494+
len(self.structure.shape) == 3
495+
#or self.structure.shape[0] == "nodes"
496+
):
497+
if layer > -1:
498+
data = data.reshape(modelgrid.nrow, modelgrid.ncol)
499+
else:
500+
data = data.reshape(modelgrid.nlay, modelgrid.nrow, modelgrid.ncol)
501+
elif len(self.structure.shape) == 2:
502+
data = data.reshape(modelgrid.nrow, modelgrid.ncol)
503+
else:
504+
data = nc_dataset.array(package, param, layer)
505+
506+
return data
478507

479508
def set_netcdf_array(
480509
self,
@@ -484,6 +513,9 @@ def set_netcdf_array(
484513
data,
485514
layer,
486515
):
516+
if isinstance(layer, tuple):
517+
layer = layer[0]
518+
487519
nc_dataset.set_array(package, param, data, layer)
488520

489521
def get_data_string(self, data, data_type, data_indent=""):

flopy/mf6/mfmodel.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1350,8 +1350,8 @@ def write(
13501350
"""
13511351

13521352
# write netcdf file
1353-
if netcdf or self._nc_dataset:
1354-
if not self._nc_dataset:
1353+
if netcdf or self._nc_dataset is not None:
1354+
if self._nc_dataset is None:
13551355
from ..utils.model_netcdf import create_dataset
13561356

13571357
# set netcdf file name
@@ -1369,8 +1369,8 @@ def write(
13691369
for pp in self.packagelist:
13701370
pp._set_netcdf_storage(self._nc_dataset, create=True)
13711371

1372-
# TODO: fix...see get_file_path() in mfpackage, needs to take into acct model path if set
1373-
self._nc_dataset.write(self.simulation_data.mfpath.get_sim_path())
1372+
# write the dataset to netcdf
1373+
self._nc_dataset.write(self.model_ws)
13741374

13751375
# write name file
13761376
if (
@@ -1913,6 +1913,13 @@ def set_all_data_internal(self, check_data=True):
19131913
for package in self.packagelist:
19141914
package.set_all_data_internal(check_data)
19151915

1916+
if (
1917+
hasattr(self, "_nc_dataset")
1918+
and self._nc_dataset is not None
1919+
):
1920+
self._nc_dataset.close()
1921+
self._nc_dataset = None
1922+
19161923
def register_package(
19171924
self,
19181925
package,

0 commit comments

Comments
 (0)