Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 5ebf16e

Browse files
committed
Date handling
1 parent 2a0f006 commit 5ebf16e

File tree

2 files changed

+53
-9
lines changed

2 files changed

+53
-9
lines changed

otis_tide_pred.py

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515
import numpy as np
1616
from scipy import interpolate
1717

18-
from datetime import datetime
18+
import collections
19+
import datetime
20+
import numbers
1921

2022
import pdb
2123
import warnings
@@ -30,14 +32,36 @@
3032
'Q1':{'index':8,'omega':6.495854e-05,'v0u':5.877717569}}
3133

3234

35+
def _preprocess_time(time):
36+
"""
37+
See if we can massage time to be something useful
38+
"""
39+
print(time, type(time))
40+
if not isinstance(time, collections.Iterable):
41+
time = [time]
42+
if isinstance(time[0], np.datetime64):
43+
return time
44+
if isinstance(time[0], datetime.datetime):
45+
return np.array([np.datetime64(d) for d in time])
46+
if isinstance(time[0], numbers.Number):
47+
return np.array([np.datetime64(datetime.datetime.fromordinal(d))
48+
for d in time])
49+
raise TypeError('time must be np.datetime64, '
50+
'list of datetime objects, or ordinal floats')
51+
3352
def tide_pred(modfile, lon, lat, time, z=None,conlist=None):
3453
"""
35-
Performs a tidal prediction at all points in [lon,lat] at times in vector [time]
36-
time is numpy datetime64.
54+
Performs a tidal prediction at all points in [lon,lat] at times.
55+
56+
57+
time is numpy datetime64 or a list of datetime objects.
3758
"""
3859

60+
time = _preprocess_time(time)
61+
3962
# Read and interpolate the constituents
40-
u_re, u_im, v_re, v_im, h_re, h_im, omega, conlist = extract_HC(modfile,lon,lat,z=z,conlist=conlist)
63+
u_re, u_im, v_re, v_im, h_re, h_im, omega, conlist = extract_HC(modfile,
64+
lon, lat, z=z, conlist=conlist)
4165

4266
# Initialise the output arrays
4367
sz = lon.shape
@@ -70,7 +94,7 @@ def tide_pred(modfile, lon, lat, time, z=None,conlist=None):
7094
# Calculate the time series
7195
tsec = (time.astype('datetime64[s]') -
7296
np.datetime64('1992-01-01', 's')).astype(float)
73-
97+
7498
h=np.zeros((nt,nx))
7599
u=np.zeros((nt,nx))
76100
v=np.zeros((nt,nx))

testOTIS.py

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,37 @@
11
import otis_tide_pred as otp
22
import numpy as np
33
import matplotlib.pyplot as plt
4+
import datetime
45

56
modfile = './DATA/Model_haw'
67

8+
9+
# test ordinal dates
10+
dates = [datetime.datetime(2001, 4, 3),
11+
datetime.datetime(2001, 4, 4),
12+
datetime.datetime(2001, 4, 5)]
13+
14+
lon = np.array([198, 199, ])
15+
lat = np.array([21, 19])
16+
17+
dates = np.array([datetime.datetime.toordinal(d) for d in dates])
18+
h, u, v = otp.tide_pred(modfile, lon, lat, dates, z=None,conlist=None)
19+
20+
21+
# test datetime dates
22+
dates = [datetime.datetime(2001, 4, 3),
23+
datetime.datetime(2001, 4, 4),
24+
datetime.datetime(2001, 4, 5)]
25+
lon = np.array([198, 199, ])
26+
lat = np.array([21, 19])
27+
28+
h, u, v = otp.tide_pred(modfile, lon, lat, dates, z=None,conlist=None)
29+
30+
# test numpy datetime64 dates
731
dates = np.arange(np.datetime64('2001-04-03'),
832
np.datetime64('2001-05-03'), dtype='datetime64[h]' )
933

1034
lon = np.array([198, 199, ])
1135
lat = np.array([21, 19])
1236

1337
h, u, v = otp.tide_pred(modfile, lon, lat, dates, z=None,conlist=None)
14-
15-
fig, ax = plt.subplots()
16-
ax.plot(dates, u, dates, v)
17-
plt.show()

0 commit comments

Comments
 (0)