Skip to content

Commit ba35bbb

Browse files
mjrenomjreno
authored andcommitted
incremental commit
1 parent 02096eb commit ba35bbb

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
@@ -1129,24 +1123,16 @@ def _set_array_layer(self, data, layer, multiplier, key, preserve_record):
11291123
self.layer_storage[layer].data_storage_type
11301124
== DataStorageType.external_file
11311125
):
1132-
if self.netcdf:
1133-
self.store_netcdf(
1134-
layer,
1135-
self.layer_storage[layer].factor,
1136-
self.layer_storage[layer].iprn,
1137-
data=data,
1138-
)
1139-
else:
1140-
self.store_external(
1141-
self.layer_storage[layer].fname,
1142-
layer,
1143-
self.layer_storage[layer].factor,
1144-
self.layer_storage[layer].iprn,
1145-
data=data,
1146-
do_not_verify=True,
1147-
binary=self.layer_storage[layer].binary,
1148-
preserve_record=preserve_record,
1149-
)
1126+
self.store_external(
1127+
self.layer_storage[layer].fname,
1128+
layer,
1129+
self.layer_storage[layer].factor,
1130+
self.layer_storage[layer].iprn,
1131+
data=data,
1132+
do_not_verify=True,
1133+
binary=self.layer_storage[layer].binary,
1134+
preserve_record=preserve_record,
1135+
)
11501136
else:
11511137
self.store_internal(
11521138
data,
@@ -1163,15 +1149,7 @@ def _set_array_layer(self, data, layer, multiplier, key, preserve_record):
11631149
data[0], data_type
11641150
):
11651151
# store data as const
1166-
if self.netcdf:
1167-
self.store_netcdf(
1168-
layer,
1169-
self.layer_storage[layer].factor,
1170-
self.layer_storage[layer].iprn,
1171-
data=data,
1172-
)
1173-
else:
1174-
self.store_internal(data, layer, True, multiplier, key=key)
1152+
self.store_internal(data, layer, True, multiplier, key=key)
11751153
return True
11761154

11771155
# look for internal and open/close data
@@ -1746,7 +1724,7 @@ def store_external(
17461724
fp = self._simulation_data.mfpath.resolve_path(
17471725
fp_relative, model_name
17481726
)
1749-
else:
1727+
elif fp_relative is not None:
17501728
fp = os.path.join(
17511729
self._simulation_data.mfpath.get_sim_path(), fp_relative
17521730
)
@@ -1860,12 +1838,23 @@ def store_external(
18601838
self._data_path,
18611839
self._stress_period,
18621840
)
1863-
file_access.write_text_file(
1864-
data,
1865-
fp,
1866-
data_type,
1867-
data_size,
1868-
)
1841+
1842+
if self.netcdf:
1843+
# TODO: multiplier NETCDF-DEV
1844+
file_access.set_netcdf_array(
1845+
self.layer_storage[layer].nc_dataset,
1846+
self.data_dimensions.structure.get_package(),
1847+
self.data_dimensions.structure.name,
1848+
data,
1849+
layer,
1850+
)
1851+
else:
1852+
file_access.write_text_file(
1853+
data,
1854+
fp,
1855+
data_type,
1856+
data_size,
1857+
)
18691858
if not preserve_record:
18701859
self.layer_storage[layer_new].factor = multiplier
18711860
self.layer_storage[layer_new].internal_data = None
@@ -1880,28 +1869,6 @@ def store_external(
18801869
layer_new, fp_relative, print_format, binary
18811870
)
18821871

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

19241891
def _set_storage_netcdf(self, nc_dataset, layered, layer):
19251892
self.netcdf = True
1926-
is_layered = layered and layer > 0
19271893
for idx in self.layer_storage.indexes():
19281894
self.layer_storage[idx].nc_dataset = nc_dataset
1929-
self.layer_storage[idx].nc_layered = is_layered
19301895
self.layer_storage[
19311896
idx
19321897
].data_storage_type = DataStorageType.external_file
@@ -2048,14 +2013,14 @@ def external_to_internal(
20482013
)[0]
20492014
elif self.layer_storage[layer].nc_dataset is not None:
20502015
# TODO: ensure multiplier only set by open/close #NETCDF-DEV
2051-
for idx in self.layer_storage.indexes():
2052-
data_out = (
2053-
file_access.read_netcdf_array(
2054-
self.layer_storage[layer].nc_dataset,
2055-
self.data_dimensions.structure.get_package(),
2056-
self.data_dimensions.structure.name,
2057-
idx[0],
2058-
)
2016+
data_out = (
2017+
file_access.read_netcdf_array(
2018+
self.layer_storage[layer].nc_dataset,
2019+
self._model_or_sim.modeldiscrit,
2020+
self.data_dimensions.structure.get_package(),
2021+
self.data_dimensions.structure.name,
2022+
layer,
2023+
)
20592024
)
20602025
else:
20612026
data_out = file_access.read_text_data_from_file(
@@ -2514,17 +2479,14 @@ def _build_full_data(self, apply_multiplier=False):
25142479
* mult
25152480
)
25162481
elif self.layer_storage[layer].nc_dataset is not None:
2517-
# TODO: ensure multiplier only set by open/close #NETCDF-DEV
2518-
if self.layer_storage[layer].nc_layered:
2519-
nc_layer = layer
2520-
else:
2521-
nc_layer = -1
25222482
data_out = (
25232483
file_access.read_netcdf_array(
25242484
self.layer_storage[layer].nc_dataset,
2485+
self._model_or_sim.modeldiscrit,
25252486
self.data_dimensions.structure.get_package(),
25262487
self.data_dimensions.structure.name,
2527-
nc_layer,
2488+
-1,
2489+
25282490
)
25292491
* mult
25302492
)
@@ -3128,7 +3090,7 @@ def _store_prep(self, layer, multiplier):
31283090
self._simulation_data.debug,
31293091
)
31303092
layer = self._layer_prep(layer)
3131-
if multiplier is None:
3093+
if multiplier is None or self.netcdf:
31323094
multiplier = self.get_default_mult()
31333095
else:
31343096
if isinstance(multiplier, float):

flopy/mf6/data/mffileaccess.py

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -516,11 +516,40 @@ def read_binary_data_from_file(
516516
def read_netcdf_array(
517517
self,
518518
nc_dataset,
519+
modelgrid,
519520
package,
520521
param,
521522
layer,
522523
):
523-
return nc_dataset.array(package, param, layer)
524+
if isinstance(layer, tuple):
525+
layer = layer[0]
526+
527+
# read all data if not layered
528+
if layer == 0 and not self.structure.layered:
529+
layer = -1
530+
531+
# retrieve data
532+
data = nc_dataset.array(package, param, layer)
533+
534+
if (
535+
nc_dataset.nc_type == "mesh2d"
536+
and modelgrid.grid_type == "structured"
537+
):
538+
# reshape 1d and 2d data associated with mesh
539+
if (
540+
len(self.structure.shape) == 3
541+
#or self.structure.shape[0] == "nodes"
542+
):
543+
if layer > -1:
544+
data = data.reshape(modelgrid.nrow, modelgrid.ncol)
545+
else:
546+
data = data.reshape(modelgrid.nlay, modelgrid.nrow, modelgrid.ncol)
547+
elif len(self.structure.shape) == 2:
548+
data = data.reshape(modelgrid.nrow, modelgrid.ncol)
549+
else:
550+
data = nc_dataset.array(package, param, layer)
551+
552+
return data
524553

525554
def set_netcdf_array(
526555
self,
@@ -530,6 +559,9 @@ def set_netcdf_array(
530559
data,
531560
layer,
532561
):
562+
if isinstance(layer, tuple):
563+
layer = layer[0]
564+
533565
nc_dataset.set_array(package, param, data, layer)
534566

535567
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)