25
25
26
26
make_eddy_tracker_list_obj.py
27
27
28
- Version 1.2.1
28
+ Version 1.3.0
29
29
30
30
31
31
===========================================================================
@@ -123,7 +123,7 @@ class track (object):
123
123
saved2nc - Becomes True once saved to netcdf file
124
124
dayzero - True at first appearance of eddy
125
125
'''
126
- def __init__ (self , eddy_index , datatype , lon , lat , time , Uavg ,
126
+ def __init__ (self , eddy_index , datatype , lon , lat , time , Uavg , teke ,
127
127
radius_s , radius_e , amplitude , bounds ,
128
128
temp = None ,
129
129
salt = None ):
@@ -134,6 +134,7 @@ def __init__(self, eddy_index, datatype, lon, lat, time, Uavg,
134
134
self .lat = np .atleast_1d (lat )
135
135
self .ocean_time = np .atleast_1d (time )
136
136
self .Uavg = np .atleast_1d (Uavg )
137
+ self .teke = np .atleast_1d (teke )
137
138
self .radius_s = np .atleast_1d (radius_s ) # speed-based eddy radius
138
139
self .radius_e = np .atleast_1d (radius_e ) # effective eddy radius
139
140
self .amplitude = np .atleast_1d (amplitude )
@@ -146,7 +147,7 @@ def __init__(self, eddy_index, datatype, lon, lat, time, Uavg,
146
147
self .saved2nc = False
147
148
148
149
149
- def append_pos (self , lon , lat , time , Uavg ,
150
+ def append_pos (self , lon , lat , time , Uavg , teke ,
150
151
radius_s , radius_e , amplitude , bounds , temp , salt ):
151
152
'''
152
153
Append track updates
@@ -155,6 +156,7 @@ def append_pos(self, lon, lat, time, Uavg,
155
156
self .lat = np .r_ [self .lat , lat ]
156
157
self .ocean_time = np .r_ [self .ocean_time , time ]
157
158
self .Uavg = np .r_ [self .Uavg , Uavg ]
159
+ self .teke = np .r_ [self .teke , teke ]
158
160
self .radius_s = np .r_ [self .radius_s , radius_s ]
159
161
self .radius_e = np .r_ [self .radius_e , radius_e ]
160
162
self .amplitude = np .r_ [self .amplitude , amplitude ]
@@ -210,6 +212,7 @@ def __init__(self, datatype, track_duration_min):
210
212
self .new_radii_e = np .array ([])
211
213
self .new_amp = np .array ([])
212
214
self .new_Uavg = np .array ([])
215
+ self .new_teke = np .array ([])
213
216
if 'ROMS' in self .datatype :
214
217
self .new_temp = np .array ([])
215
218
self .new_salt = np .array ([])
@@ -221,6 +224,7 @@ def __init__(self, datatype, track_duration_min):
221
224
self .old_radii_e = np .array ([])
222
225
self .old_amp = np .array ([])
223
226
self .old_Uavg = np .array ([])
227
+ self .old_teke = np .array ([])
224
228
if 'ROMS' in self .datatype :
225
229
self .old_temp = np .array ([])
226
230
self .old_salt = np .array ([])
@@ -235,24 +239,24 @@ def __init__(self, datatype, track_duration_min):
235
239
assert datatype in ('ROMS' , 'AVISO' ), "Unknown string in 'datatype' parameter"
236
240
237
241
238
- def append_list (self , lon , lat , time , Uavg ,
242
+ def append_list (self , lon , lat , time , Uavg , teke ,
239
243
radius_s , radius_e , amplitude , bounds , temp = None , salt = None ):
240
244
'''
241
245
Append a new 'track' object to the list
242
246
'''
243
247
self .tracklist .append (track (self .index , self .datatype ,
244
- lon , lat , time , Uavg ,
248
+ lon , lat , time , Uavg , teke ,
245
249
radius_s , radius_e ,
246
250
amplitude , bounds ,
247
251
temp , salt ))
248
252
249
253
250
- def update_track (self , index , lon , lat , time , Uavg ,
254
+ def update_track (self , index , lon , lat , time , Uavg , teke ,
251
255
radius_s , radius_e , amplitude , bounds , temp = None , salt = None ):
252
256
'''
253
257
Update a track at index
254
258
'''
255
- self .tracklist [index ].append_pos (lon , lat , time , Uavg ,
259
+ self .tracklist [index ].append_pos (lon , lat , time , Uavg , teke ,
256
260
radius_s , radius_e ,
257
261
amplitude , bounds ,
258
262
temp , salt )
@@ -268,6 +272,7 @@ def reset_holding_variables(self):
268
272
self .new_radii_tmp_e = np .array ([])
269
273
self .new_amp_tmp = np .array ([])
270
274
self .new_Uavg_tmp = np .array ([])
275
+ self .new_teke_tmp = np .array ([])
271
276
self .new_time_tmp = np .array ([])
272
277
self .new_temp_tmp = np .array ([])
273
278
self .new_salt_tmp = np .array ([])
@@ -285,6 +290,7 @@ def set_old_variables(self):
285
290
self .old_radii_e = np .copy (self .new_radii_tmp_e )
286
291
self .old_amp = np .copy (self .new_amp_tmp )
287
292
self .old_Uavg = np .copy (self .new_Uavg_tmp )
293
+ self .old_teke = np .copy (self .new_teke_tmp )
288
294
self .old_temp = np .copy (self .new_temp_tmp )
289
295
self .old_salt = np .copy (self .new_salt_tmp )
290
296
@@ -391,6 +397,7 @@ def create_netcdf(self, directory, savedir, title,
391
397
nc .createVariable ('A' , 'f8' , ('Nobs' ), fill_value = self .fillval )
392
398
nc .createVariable ('L' , 'f8' , ('Nobs' ), fill_value = self .fillval )
393
399
nc .createVariable ('U' , 'f8' , ('Nobs' ), fill_value = self .fillval )
400
+ nc .createVariable ('Teke' , 'f8' , ('Nobs' ), fill_value = self .fillval )
394
401
nc .createVariable ('radius_e' , 'f8' , ('Nobs' ), fill_value = self .fillval )
395
402
if 'Q' in self .diag_type :
396
403
nc .createVariable ('qparameter' , 'f8' , ('Nobs' ), fill_value = self .fillval )
@@ -446,10 +453,11 @@ def create_netcdf(self, directory, savedir, title,
446
453
'between the extremum of SSH within ' + \
447
454
'the eddy and the SSH around the contour ' + \
448
455
'defining the eddy perimeter'
456
+
449
457
nc .variables ['L' ].units = 'km'
450
458
nc .variables ['L' ].min_val = self .radmin / 1000.
451
459
nc .variables ['L' ].max_val = self .radmax / 1000.
452
- nc .variables ['L' ].long_name = 'radius scale'
460
+ nc .variables ['L' ].long_name = 'speed radius scale'
453
461
nc .variables ['L' ].description = 'radius of a circle whose area is equal ' + \
454
462
'to that enclosed by the contour of ' + \
455
463
'maximum circum-average speed'
@@ -460,6 +468,13 @@ def create_netcdf(self, directory, savedir, title,
460
468
nc .variables ['U' ].long_name = 'maximum circum-averaged speed'
461
469
nc .variables ['U' ].description = 'average speed of the contour defining ' + \
462
470
'the radius scale L'
471
+ nc .variables ['Teke' ].units = 'm^2/sec^2'
472
+ #nc.variables['Teke'].min = 0.
473
+ #nc.variables['Teke'].max = 376.6
474
+ nc .variables ['Teke' ].long_name = 'sum EKE within contour Ceff'
475
+ nc .variables ['Teke' ].description = 'sum of eddy kinetic energy within contour defining ' + \
476
+ 'the effective radius'
477
+
463
478
nc .variables ['radius_e' ].units = 'km'
464
479
nc .variables ['radius_e' ].min_val = self .radmin / 1000.
465
480
nc .variables ['radius_e' ].max_val = self .radmax / 1000.
@@ -495,6 +510,7 @@ def _reduce_inactive_tracks(self):
495
510
track .qparameter = False
496
511
track .amplitude = False
497
512
track .Uavg = False
513
+ track .teke = False
498
514
track .radius_s = False
499
515
track .radius_e = False
500
516
track .bounds = False
@@ -549,6 +565,7 @@ def write2chelton_nc(self, savedir, rtime):
549
565
nc .variables ['lat' ][self .ncind :tend ] = np .array ([self .tracklist [i ].lat ])
550
566
nc .variables ['A' ][self .ncind :tend ] = np .array ([self .tracklist [i ].amplitude ])
551
567
nc .variables ['U' ][self .ncind :tend ] = np .array ([self .tracklist [i ].Uavg ]) * 100. # to cm/s
568
+ nc .variables ['Teke' ][self .ncind :tend ] = np .array ([self .tracklist [i ].teke ])
552
569
nc .variables ['L' ][self .ncind :tend ] = np .array ([self .tracklist [i ].radius_s ]) * np .array (1e-3 )
553
570
nc .variables ['radius_e' ][self .ncind :tend ] = np .array ([self .tracklist [i ].radius_e ]) * np .array (1e-3 )
554
571
if 'ROMS' in self .datatype :
@@ -594,6 +611,7 @@ def write2chelton_nc(self, savedir, rtime):
594
611
self .old_radii_e = self .new_radii_e [lasti :]
595
612
self .old_amp = self .new_amp [lasti :]
596
613
self .old_Uavg = self .new_Uavg [lasti :]
614
+ self .old_teke = self .new_teke [lasti :]
597
615
if 'ROMS' in self .datatype :
598
616
self .old_temp = self .new_temp [lasti :]
599
617
self .old_salt = self .new_salt [lasti :]
@@ -604,6 +622,7 @@ def write2chelton_nc(self, savedir, rtime):
604
622
self .new_radii_e = np .array ([])
605
623
self .new_amp = np .array ([])
606
624
self .new_Uavg = np .array ([])
625
+ self .new_teke = np .array ([])
607
626
self .new_time = np .array ([])
608
627
if 'ROMS' in self .datatype :
609
628
self .new_temp = np .array ([])
@@ -669,6 +688,14 @@ def insert_at_index(self, xarr, ind, x):
669
688
self .new_amp = np .zeros ((newsize ))
670
689
self .new_amp [:tmp .size ] = tmp
671
690
self .new_amp [ind ] = x
691
+ elif 'new_Uavg' in xarr :
692
+ self .new_Uavg = np .zeros ((newsize ))
693
+ self .new_Uavg [:tmp .size ] = tmp
694
+ self .new_Uavg [ind ] = x
695
+ elif 'new_teke' in xarr :
696
+ self .new_teke = np .zeros ((newsize ))
697
+ self .new_teke [:tmp .size ] = tmp
698
+ self .new_teke [ind ] = x
672
699
elif 'new_temp' in xarr :
673
700
self .new_temp = np .zeros ((newsize ))
674
701
self .new_temp [:tmp .size ] = tmp
@@ -683,7 +710,7 @@ def insert_at_index(self, xarr, ind, x):
683
710
684
711
685
712
def update_eddy_properties (self , centlon , centlat , eddy_radius_s , eddy_radius_e ,
686
- amplitude , Uavg , rtime , bounds , cent_temp = None , cent_salt = None ):
713
+ amplitude , Uavg , teke , rtime , bounds , cent_temp = None , cent_salt = None ):
687
714
'''
688
715
Append new variable values to track arrays
689
716
'''
@@ -693,6 +720,7 @@ def update_eddy_properties(self, centlon, centlat, eddy_radius_s, eddy_radius_e,
693
720
self .new_radii_tmp_e = np .r_ [self .new_radii_tmp_e , eddy_radius_e ]
694
721
self .new_amp_tmp = np .r_ [self .new_amp_tmp , amplitude ]
695
722
self .new_Uavg_tmp = np .r_ [self .new_Uavg_tmp , Uavg ]
723
+ self .new_teke_tmp = np .r_ [self .new_teke_tmp , teke ]
696
724
self .new_time_tmp = np .r_ [self .new_time_tmp , rtime ]
697
725
if 'ROMS' in self .datatype :
698
726
self .new_temp_tmp = np .r_ [self .new_temp_tmp , cent_temp ]
0 commit comments