Skip to content

Commit 355126d

Browse files
committed
Version 2.0.1
Various bug fixes
1 parent e7af1ae commit 355126d

File tree

5 files changed

+137
-101
lines changed

5 files changed

+137
-101
lines changed

haversine.f90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ module haversine
2727
!
2828
! If you have ifort on your system, change 'gfortran' to 'intelem'!
2929
!
30-
! Version 2.0.0
30+
! Version 2.0.1
3131
!
3232
!===========================================================================
3333
implicit none

make_eddy_track_AVISO.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
2525
make_eddy_track_AVISO.py
2626
27-
Version 2.0.0
27+
Version 2.0.1
2828
2929
3030
Scroll down to line ~640 to get started
@@ -37,7 +37,7 @@
3737
from py_eddy_tracker_classes import plt, np, dt, Dataset, time, \
3838
datestr2datetime, gaussian_resolution, \
3939
get_cax, collection_loop, track_eddies, \
40-
anim_figure
40+
anim_figure, pcol_2dxy
4141
from py_eddy_tracker_property_classes import SwirlSpeed
4242
import make_eddy_tracker_list_obj as eddy_tracker
4343
import scipy.ndimage as ndimage
@@ -547,7 +547,7 @@ def __init__(self, AVISO_FILE, THE_DOMAIN, PRODUCT,
547547

548548
def __getstate__(self):
549549
"""
550-
Remove refernces to unwanted attributes in self.
550+
Remove references to unwanted attributes in self.
551551
This reduces the size of saved cPickle objects.
552552
"""
553553
#print '--- removing unwanted attributes'
@@ -930,9 +930,10 @@ def brypath(self, imin=0, imax=-1, jmin=0, jmax=-1):
930930
sla_grd = AvisoGrid(AVISO_FILES[0], config['THE_DOMAIN'], PRODUCT,
931931
config['LONMIN'], config['LONMAX'],
932932
config['LATMIN'], config['LATMAX'])
933-
934-
Mx, My = (sla_grd.Mx[sla_grd.jup0:sla_grd.jup1, sla_grd.iup0:sla_grd.iup1],
935-
sla_grd.My[sla_grd.jup0:sla_grd.jup1, sla_grd.iup0:sla_grd.iup1])
933+
934+
# Set coordinates for figures
935+
Mx, My = sla_grd.M(sla_grd.lon(), sla_grd.lat())
936+
MMx, MMy = pcol_2dxy(Mx, My)
936937

937938
# Instantiate search ellipse object
938939
search_ellipse = eddy_tracker.SearchEllipse(config['THE_DOMAIN'],
@@ -1269,7 +1270,7 @@ def brypath(self, imin=0, imax=-1, jmin=0, jmax=-1):
12691270
xi=xi, xicopy=xicopy)
12701271

12711272
elif 'SLA' in DIAGNOSTIC_TYPE:
1272-
anim_figure(A_eddy, C_eddy, Mx, My, plt.cm.RdBu_r, rtime,
1273+
anim_figure(A_eddy, C_eddy, Mx, My, MMx, MMy, plt.cm.RdBu_r, rtime,
12731274
DIAGNOSTIC_TYPE, SAVE_DIR, 'SLA ' + ymd_str,
12741275
animax, animax_cbar)
12751276

make_eddy_tracker_list_obj.py

Lines changed: 42 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
2626
make_eddy_tracker_list_obj.py
2727
28-
Version 2.0.0
28+
Version 2.0.1
2929
3030
3131
===========================================================================
@@ -193,8 +193,6 @@ def append_pos(self, lon, lat, time, uavg, teke, radius_s, radius_e,
193193
"""
194194
Append track updates
195195
"""
196-
#self.lon = np.r_[self.lon, lon]
197-
#print 'ccccccccccccccccccccccc', type(lon)
198196
self.lon.append(lon)
199197
self.lat.append(lat)
200198
self.ocean_time.append(time)
@@ -205,8 +203,8 @@ def append_pos(self, lon, lat, time, uavg, teke, radius_s, radius_e,
205203
self.amplitude.append(amplitude)
206204
if 'ROMS' in self.PRODUCT:
207205
#self.temp = np.r_[self.temp, temp]
208-
pass
209206
#self.salt = np.r_[self.salt, salt]
207+
pass
210208
if self.save_extras:
211209
self.contour_e.append(contour_e)
212210
self.contour_s.append(contour_s)
@@ -368,7 +366,7 @@ def __getstate__(self):
368366
"""pops = ('uspd', 'uspd_coeffs', 'sla_coeffs', 'points',
369367
'circlon', 'circlat', 'sla', 'slacopy', 'swirl',
370368
'mask_eff', 'mask_eff_sum', 'mask_eff_1d')"""
371-
pops = ('uspd', 'uspd_coeffs', 'sla_coeffs', 'points',
369+
pops = ('uspd', 'uspd_coeffs', 'sla_coeffs', 'points',
372370
'sla', 'slacopy', 'swirl',
373371
'mask_eff', 'mask_eff_sum', 'mask_eff_1d')
374372
result = self.__dict__.copy()
@@ -679,7 +677,7 @@ def create_netcdf(self, directory, savedir,
679677

680678
nc.createDimension('contour_points', None)
681679
nc.createDimension('uavg_contour_count',
682-
np.int(self.slaparameter.size * 0.333))
680+
np.int(self.CONTOUR_PARAMETER.size * 0.333))
683681
nc.createVariable('contour_e', 'f4',
684682
('contour_points','Nobs'), fill_value=self.FILLVAL)
685683
nc.createVariable('contour_s', 'f4',
@@ -766,7 +764,7 @@ def write2netcdf(self, rtime):
766764

767765
tsize = len(self.tracklist[i].lon)
768766

769-
if (tsize >= self.TRACK_DURATION_MIN / DBR) and tsize > 1.:
767+
if (tsize >= self.TRACK_DURATION_MIN / DBR) and tsize >= 1.:
770768
lon = np.array([self.tracklist[i].lon])
771769
lat = np.array([self.tracklist[i].lat])
772770
amp = np.array([self.tracklist[i].amplitude])
@@ -1006,6 +1004,22 @@ def get_rwdistance(self, xpt, ypt, DAYS_BTWN_RECORDS):
10061004
Return the distance required by SearchEllipse
10071005
to construct a search ellipse for eddy tracking.
10081006
"""
1007+
def get_lon_lat(xpt, ypt):
1008+
"""
1009+
1010+
"""
1011+
lon, lat = self.M.projtran(xpt, ypt, inverse=True)
1012+
lon, lat = np.round(lon, 2), np.round(lat, 2)
1013+
if lon < 0.:
1014+
lon = "".join((str(lon), 'W'))
1015+
elif lon >= 0:
1016+
lon = "".join((str(lon), 'E'))
1017+
if lat < 0:
1018+
lat = "".join((str(lat), 'S'))
1019+
elif lat >= 0:
1020+
lat = "".join((str(lat), 'N'))
1021+
return lon, lat
1022+
10091023
if self.THE_DOMAIN in ('Global', 'Regional', 'ROMS'):
10101024
#print 'xpt, ypt', xpt, ypt
10111025
self.distance[:] = self._get_rlongwave_spd(xpt, ypt)
@@ -1023,23 +1037,21 @@ def get_rwdistance(self, xpt, ypt, DAYS_BTWN_RECORDS):
10231037
Exception # Unknown THE_DOMAIN
10241038

10251039
if self.start:
1026-
lon, lat = self.M.projtran(xpt, ypt, inverse=True)
1027-
lon, lat = np.round(lon, 2), np.round(lat, 2)
1028-
if lon < 0.:
1029-
lon = "".join((str(lon), 'W'))
1030-
elif lon >= 0:
1031-
lon = "".join((str(lon), 'E'))
1032-
if lat < 0:
1033-
lat = "".join((str(lat), 'S'))
1034-
elif lat >= 0:
1035-
lat = "".join((str(lat), 'N'))
1036-
1037-
print "".join(('--------- setting ellipse for first tracked ',
1038-
'eddy at %s, %s in the %s domain'
1039-
% (lon, lat, self.THE_DOMAIN)))
1040-
c = np.abs(self._get_rlongwave_spd(xpt, ypt))[0]
1041-
print "".join(('--------- with extratropical long baroclinic ',
1042-
'Rossby wave phase speed of %s m/s' % c))
1040+
lon, lat = get_lon_lat(xpt, ypt)
1041+
if 'Global' in self.THE_DOMAIN:
1042+
print "".join(('--------- setting ellipse for first tracked ',
1043+
'eddy at %s, %s in the %s domain'
1044+
% (lon, lat, self.THE_DOMAIN)))
1045+
c = np.abs(self._get_rlongwave_spd(xpt, ypt))[0]
1046+
print "".join(('--------- with extratropical long baroclinic ',
1047+
'Rossby wave phase speed of %s m/s' % c))
1048+
elif self.THE_DOMAIN in ('BlackSea', 'MedSea'):
1049+
print "".join(('--------- setting search radius of %s m for '
1050+
% self.distance[0],
1051+
'first tracked eddy at %s, %s in the %s domain'
1052+
% (lon, lat, self.THE_DOMAIN)))
1053+
else:
1054+
Exception
10431055
self.start = False
10441056

10451057
self.distance = np.abs(self.distance)
@@ -1052,6 +1064,7 @@ def _make_subset(self):
10521064
"""
10531065
pad = 1.5 # degrees
10541066
LONMIN, LONMAX, LATMIN, LATMAX = self.limits
1067+
10551068
if self.ZERO_CROSSING:
10561069
ieast, iwest = (((self._lon + 360.) <= LONMAX + pad),
10571070
(self._lon > LONMIN + pad))
@@ -1158,7 +1171,7 @@ def __init__(self, THE_DOMAIN, grd, DAYS_BTWN_RECORDS, RW_PATH=None):
11581171
self.n_s_minor = self.DAYS_BTWN_RECORDS * 15e4 / 7.
11591172
self.semi_n_s_minor = 0.5 * self.n_s_minor
11601173
self.rwv = RossbyWaveSpeed(THE_DOMAIN, grd, RW_PATH=RW_PATH)
1161-
#self.rwv.view_grid_subset()
1174+
#self.rwv.view_grid_subset() # debug; not relevant for MedSea / BlackSea
11621175
self.rw_c = np.empty(1)
11631176
self.rw_c_mod = np.empty(1)
11641177
self.rw_c_fac = 1.75
@@ -1201,7 +1214,7 @@ def _set_black_sea_ellipse(self):
12011214
"""
12021215
Set *ellipse_path* for the *black_sea_ellipse*.
12031216
"""
1204-
self.black_sea_ellipse = patch.Ellipse((self.x, self.y),
1217+
self.black_sea_ellipse = patch.Ellipse((self.xpt, self.ypt),
12051218
2. * self.rw_c_mod, 2. * self.rw_c_mod)
12061219
verts = self.black_sea_ellipse.get_verts()
12071220
self.ellipse_path = path.Path(np.array([verts[:, 0],
@@ -1221,20 +1234,19 @@ def set_search_ellipse(self, xpt, ypt):
12211234
"""
12221235
self.xpt = xpt
12231236
self.ypt = ypt
1237+
self.rw_c_mod[:] = 1.75
12241238

12251239
if self.THE_DOMAIN in ('Global', 'Regional', 'ROMS'):
12261240
self.rw_c[:] = self.rwv.get_rwdistance(xpt, ypt,
12271241
self.DAYS_BTWN_RECORDS)
1228-
self.rw_c_mod[:] = 1.75
12291242
self.rw_c_mod *= self.rw_c
12301243
self.rw_c_mod[:] = np.array([self.rw_c_mod,
12311244
self.semi_n_s_minor]).max()
12321245
self.rw_c_mod *= 2.
12331246
self._set_global_ellipse()
12341247

1235-
elif 'BlackSea' in self.THE_DOMAIN:
1236-
self.rw_c_mod[:] = 1.75
1237-
self.rw_c[:] = self.rwv.get_rwdistance(x, y,
1248+
elif self.THE_DOMAIN in ('BlackSea', 'MedSea'):
1249+
self.rw_c[:] = self.rwv.get_rwdistance(xpt, ypt,
12381250
self.DAYS_BTWN_RECORDS)
12391251
self.rw_c_mod *= self.rw_c
12401252
self._set_black_sea_ellipse()

0 commit comments

Comments
 (0)