|
62 | 62 |
|
63 | 63 | #eORCA1_latslice26N = slice(227,228)
|
64 | 64 | eORCA1_latslice26Nnm = slice(228,229)
|
| 65 | +eORCA1_lonslice_GS = slice(228,229) |
| 66 | + |
| 67 | + |
65 | 68 | eORCA1_latslice32S = slice(137,138)
|
66 | 69 |
|
67 | 70 | eORCA025_latslice26Nnm = slice(794,795)
|
@@ -312,6 +315,72 @@ def TwentySixNorth(nc,keys,**kwargs):
|
312 | 315 | return atlmoc
|
313 | 316 |
|
314 | 317 |
|
| 318 | +def gulfstream(nc, keys, **kwargs): |
| 319 | + """ |
| 320 | + This function calculates the Gulf Stream at 26N. |
| 321 | + This is the sum of Northbound current between |
| 322 | +
|
| 323 | + nc: a netcdf openned as a dataset. |
| 324 | + keys: a list of keys to use in this function. |
| 325 | +
|
| 326 | + """ |
| 327 | + areafile = get_kwarg_file(kwargs, 'areafile') |
| 328 | + maskname = kwargs.get('maskname', 'tmask') |
| 329 | + grid = kwargs.get('grid', 'eORCA1') |
| 330 | + maxdepth = np.abs(kwargs.get('maxdepth', 2000. )) |
| 331 | + |
| 332 | + |
| 333 | + if not loadedArea: |
| 334 | + loadDataMask(areafile, maskname, grid) |
| 335 | + |
| 336 | + if grid == 'eORCA1': |
| 337 | + latslice26Nnm = eORCA1_latslice26Nnm |
| 338 | + |
| 339 | + #data=[-80.5011659 , -79.50119298, -78.50121829, -77.50124181, |
| 340 | + # -76.50126349, -75.50128329, -74.50130118, -73.50131712, |
| 341 | + # -72.50133107, -71.50134301, -70.50135293, -69.50136079, |
| 342 | + # -68.50136658], |
| 343 | + lonslice_70W = slice(207, 220) |
| 344 | + |
| 345 | + altmaskfile = get_kwarg_file(kwargs, 'altmaskfile', default = 'bgcval2/data/basinlandmask_eORCA1.nc') |
| 346 | + if not loadedAltMask: |
| 347 | + loadAtlanticMask(altmaskfile, maskname='tmaskatl', grid=grid) |
| 348 | + elif grid == 'eORCA025': |
| 349 | + latslice26Nnm = eORCA025_latslice26Nnm |
| 350 | + |
| 351 | + else: |
| 352 | + # grid not recognised. |
| 353 | + raise ValueError('TwentySixNorth: grid not recognised: %s', grid) |
| 354 | + |
| 355 | + if not loadedAltMask: |
| 356 | + # Atlantic Mask not loaded |
| 357 | + raise ValueError('TwentySixNorth: Mask not loaded: ed: %s', grid) |
| 358 | + assert 0 |
| 359 | + |
| 360 | + lats = nc.variables['nav_lat'][latslice26Nnm, lonslice_70W] |
| 361 | + lons = nc.variables['nav_lon'][latslice26Nnm, lonslice_70W] |
| 362 | + vo = np.ma.array(nc.variables[keys[0]][0, :, latslice26Nnm, lonslice_70W]) # m/s |
| 363 | + vo = np.ma.masked_where(vo.mask + (vo <= 0.), vo) |
| 364 | + |
| 365 | + thickness = nc.variables['thkcello'][0,:,latslice26Nnm, lonslice_70W] |
| 366 | + depth = np.abs(np.cumsum(thickness, axis=0))# depth array |
| 367 | + #print(vo.shape, thickness.shape, e1v_AMOC26N.shape) |
| 368 | + gs = 0. |
| 369 | + for (z, la, lo), v in np.ndenumerate(vo): |
| 370 | + if depth[z, la,lo] > maxdepth: |
| 371 | + continue |
| 372 | + if v <= 0: |
| 373 | + continue |
| 374 | + #print((z, la, lo),'depth:', depth[z, la,lo], (lats[la, lo],'N', lons[la, lo], 'E'), 'v:', v, 'thickness:', thickness[z, la, lo], 'width:', e1v_AMOC26N[la, lo]) |
| 375 | + gs += v * thickness[z, la, lo] * e1v_AMOC26N[la, lo] / 1.E06 |
| 376 | + |
| 377 | + print('Gulf Stream:', gs) # expecting a value of 32Sv ish. |
| 378 | + # https://www.sciencedirect.com/science/article/pii/S0079661114001694 |
| 379 | + |
| 380 | + return gs |
| 381 | + |
| 382 | + |
| 383 | + |
315 | 384 | def twentysixnorth025(nc,keys,**kwargs):
|
316 | 385 | """
|
317 | 386 | This function loads the AMOC array that is used for eORCA025
|
|
0 commit comments