Skip to content

Commit b6998fd

Browse files
authored
fix(write): add comments explaining util period processing (#260)
1 parent 3516b69 commit b6998fd

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

flopy4/mf6/converter/unstructure.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ def oc_setting_data(rec):
100100
elif rec.steps.last:
101101
dat = {kper: "last" for kper in range(value.sizes["nper"])}
102102
elif rec.steps.steps:
103-
steps = " ".join(str(x - 1) for x in rec.steps.steps)
103+
steps = " ".join(str(x + 1) for x in rec.steps.steps)
104104
dat = {kper: f"steps {steps}" for kper in range(value.sizes["nper"])}
105105
elif rec.steps.all:
106106
# check last as this defaults to True
@@ -111,13 +111,16 @@ def oc_setting_data(rec):
111111
data = {}
112112
match value.dtype:
113113
case np.bool:
114+
# supports boolean dataarrays, e.g. STO steady_state and transient
114115
dat = {kper: "" for kper in range(value.sizes["nper"]) if value.values[kper]} # type: ignore
115116
data[name] = dat
116117
case np.dtypes.StringDType():
118+
# supports string dataarrays, e.g. OC save_budget, save_head
117119
fname = name.replace("_", " ")
118120
dat = {kper: value.values[kper] for kper in range(value.sizes["nper"])}
119121
data[fname] = dat
120122
case object():
123+
# supports object dataararys, e.g. OC PrintSaveSetting
121124
if isinstance(value.values[0], Oc.PrintSaveSetting):
122125
if hasattr(value.values[0], "printrecord") and isinstance(
123126
value.values[0].printrecord, list
@@ -226,6 +229,9 @@ def unstructure_component(value: Component) -> dict[str, Any]:
226229
period_blocks[kper][arr_name] = arr
227230

228231
# sort kper order
232+
# needed because some package period parameters have their
233+
# own kper dicts and these may be out of order for the package,
234+
# e.g. STO transient and steady_state
229235
period_blocks = dict(sorted(period_blocks.items()))
230236

231237
# setup indexed period blocks, combine arrays into datasets
@@ -234,6 +240,9 @@ def unstructure_component(value: Component) -> dict[str, Any]:
234240
for arr_name, val in block.items():
235241
match block[arr_name]:
236242
case str():
243+
# non data period parameters have their period
244+
# write key set in the _hack_period_non_numeric
245+
# routine
237246
blocks[f"period {kper + 1}"][arr_name] = val
238247
case xr.DataArray():
239248
blocks[f"period {kper + 1}"]["period"] = xr.Dataset(

test/test_mf6_codec.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ def test_dumps_oc2():
124124
0: Oc.PrintSaveSetting(
125125
printrecord=[
126126
Oc.PrintRecord("head", Oc.Steps(first=True)),
127-
Oc.PrintRecord("budget", Oc.Steps(steps=(2, 3, 5))),
127+
Oc.PrintRecord("budget", Oc.Steps(steps=(0, 1, 3))),
128128
],
129129
saverecord=[
130130
Oc.SaveRecord("head", Oc.Steps(last=True)),

0 commit comments

Comments
 (0)