Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
33 changes: 33 additions & 0 deletions nlmod/dims/time.py
Original file line number Diff line number Diff line change
Expand Up @@ -579,6 +579,39 @@ def estimate_nstp(
else:
return nstp_ceiled

def get_perlen(ds):
"""Get perlen from ds.

Parameters
----------
ds : xarray.Dataset
dataset with time variant model data

Returns
-------
perlen : list of floats
length of a stress period.
"""
deltat = pd.to_timedelta(1, ds.time.time_units)
if ds.time.dtype.kind == "M":
# dtype is pandas timestamps
perlen = [
(pd.to_datetime(ds["time"].data[0]) - pd.to_datetime(ds.time.start))
/ deltat
]
if len(ds["time"]) > 1:
perlen.extend(np.diff(ds["time"]) / deltat)
elif ds.time.dtype.kind == "O":
perlen = [
(ds["time"].data[0] - _pd_timestamp_to_cftime(pd.Timestamp(ds.time.start)))
/ deltat
]
if len(ds["time"]) > 1:
perlen.extend(np.diff(ds["time"]) / deltat)
elif ds.time.dtype.kind in ["i", "f"]:
perlen = [ds["time"][0]]
perlen.extend(np.diff(ds["time"].values))
return perlen

def get_time_step_length(perlen, nstp, tsmult):
"""Get the length of the timesteps within a singe stress-period.
Expand Down
22 changes: 2 additions & 20 deletions nlmod/sim/sim.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import pandas as pd

from .. import util
from ..dims.time import _pd_timestamp_to_cftime
from ..dims.time import _pd_timestamp_to_cftime, get_perlen

logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -89,25 +89,7 @@ def get_tdis_perioddata(ds, nstp="nstp", tsmult="tsmult"):
TSMULT by the relation :math:`\\Delta t_1= perlen \frac{tsmult -
1}{tsmult^{nstp}-1}`.
"""
deltat = pd.to_timedelta(1, ds.time.time_units)
if ds.time.dtype.kind == "M":
# dtype is pandas timestamps
perlen = [
(pd.to_datetime(ds["time"].data[0]) - pd.to_datetime(ds.time.start))
/ deltat
]
if len(ds["time"]) > 1:
perlen.extend(np.diff(ds["time"]) / deltat)
elif ds.time.dtype.kind == "O":
perlen = [
(ds["time"].data[0] - _pd_timestamp_to_cftime(pd.Timestamp(ds.time.start)))
/ deltat
]
if len(ds["time"]) > 1:
perlen.extend(np.diff(ds["time"]) / deltat)
elif ds.time.dtype.kind in ["i", "f"]:
perlen = [ds["time"][0]]
perlen.extend(np.diff(ds["time"].values))
perlen = get_perlen(ds)

nstp = util._get_value_from_ds_datavar(ds, "nstp", nstp, return_da=False)

Expand Down
Loading