Skip to content

Commit 922ab71

Browse files
authored
pet_normalised_lifetime.py
Figures like fig 8 of https://agupubs.onlinelibrary.wiley.com/doi/pdf/10.1002/2015JC011371
1 parent 8d13115 commit 922ab71

File tree

1 file changed

+81
-0
lines changed

1 file changed

+81
-0
lines changed
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
"""
2+
Normalised Eddy Lifetimes
3+
=========================
4+
5+
"""
6+
7+
import py_eddy_tracker_sample
8+
from matplotlib import pyplot as plt
9+
from numba import njit, prange
10+
from numpy import float32, interp, linspace, unique, where, zeros
11+
12+
from py_eddy_tracker.observations.tracking import TrackEddiesObservations
13+
14+
15+
@njit(cache=True, parallel=True, fastmath=True)
16+
def eddy_norm_lifetime(eddy_var, tracks, xvals, unique_tracks, lifetime_max, out):
17+
""""""
18+
for i in prange(unique_tracks.size):
19+
trk1d_i = where(tracks == unique_tracks[i])[0]
20+
# out = out + atleast_1d(interp(xvals, linspace(0, 1, trk1d_i.size), eddy_var[trk1d_i]))
21+
out += interp(xvals, linspace(0, 1, trk1d_i.size), eddy_var[trk1d_i])
22+
return out / len(unique_tracks)
23+
24+
25+
if __name__ == "__main__":
26+
27+
plt.close("all")
28+
29+
a = TrackEddiesObservations.load_file(
30+
py_eddy_tracker_sample.get_path(
31+
"eddies_med_adt_allsat_dt2018/Anticyclonic.zarr"
32+
)
33+
)
34+
c = TrackEddiesObservations.load_file(
35+
py_eddy_tracker_sample.get_path(
36+
"eddies_med_adt_allsat_dt2018/Cyclonic.zarr"
37+
)
38+
)
39+
40+
unique_tracks, counts = unique(a.tracks, return_counts=True)
41+
lifetime_max = counts.argmax()
42+
xvals = linspace(0, 1, lifetime_max)
43+
AC_radius = zeros(lifetime_max, dtype=float32)
44+
AC_amplitude = zeros(lifetime_max, dtype=float32)
45+
CC_radius = zeros(lifetime_max, dtype=float32)
46+
CC_amplitude = zeros(lifetime_max, dtype=float32)
47+
48+
# Radius
49+
AC_radius = eddy_norm_lifetime(
50+
a.radius_s, a.tracks, xvals, unique_tracks, lifetime_max, AC_radius
51+
)
52+
# Amplitude
53+
AC_amplitude = eddy_norm_lifetime(
54+
a.amplitude, a.tracks, xvals, unique_tracks, lifetime_max, AC_amplitude
55+
)
56+
57+
# Radius
58+
CC_radius = eddy_norm_lifetime(
59+
c.radius_s, c.tracks, xvals, unique_tracks, lifetime_max, CC_radius
60+
)
61+
# Amplitude
62+
CC_amplitude = eddy_norm_lifetime(
63+
c.amplitude, c.tracks, xvals, unique_tracks, lifetime_max, CC_amplitude
64+
)
65+
66+
fig, axs = plt.subplots(nrows=2, figsize=(8, 5))
67+
68+
axs[0].set_title("Normalised Mean Radius")
69+
axs[0].plot(xvals, AC_radius)
70+
axs[0].plot(xvals, CC_radius)
71+
axs[0].set_ylabel("Radius (m)")
72+
73+
axs[1].set_title("Normalised Mean Amplitude")
74+
(AA,) = axs[1].plot(xvals, AC_amplitude, label="AC")
75+
(CC,) = axs[1].plot(xvals, CC_amplitude, label="CC")
76+
axs[1].set_ylabel("Amplitude (m)")
77+
78+
axs[1].legend(handles=[AA, CC])
79+
80+
fig.tight_layout()
81+
plt.show()

0 commit comments

Comments
 (0)