Skip to content

Commit dabf4c8

Browse files
committed
additional code for Andrew
1 parent 6b61057 commit dabf4c8

File tree

3 files changed

+34
-20
lines changed

3 files changed

+34
-20
lines changed

bgcval2/functions/AirSeaFluxCO2.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,11 @@ def calc_total_airseafluxco2(nc, keys, **kwargs):
5757
This function calculated the total Air Sea FLux for the MEDUSA model in the eORCA grid.
5858
"""
5959
areafile = get_kwarg_file(kwargs, 'areafile')
60-
6160
if not loaded_area_and_mask:
62-
area = load_area_and_mask(areafile)
61+
if area in nc.variables.keys():
62+
area = nc.variables['area'][:]
63+
else:
64+
area = load_area_and_mask(areafile)
6365

6466
factor = 365.25 * 12. / 1000. / 1.E15
6567
try:

bgcval2/functions/circulation.py

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -402,11 +402,15 @@ def fov_sa(nc, keys, **kwargs):
402402
# loadAtlanticMask_full(altmaskfile, maskname='tmaskatl', grid=grid)
403403

404404
# Load and mask vo and vso (vo * salinity)
405-
vso = np.ma.array(nc.variables['vso'][:]).squeeze() # #vso in PSU m/s
405+
#vso = np.ma.array(nc.variables['vso'][:]).squeeze() # #vso in PSU m/s
406406
vo = np.ma.array(nc.variables['vo'][:]).squeeze() # #vso in PSU m/s
407-
407+
408+
#print(nc.variables['vso'], '\n', nc.variables['vo'])
408409
# Calculate salinity and subtract reference salininty.
409-
sal0 = vso/vo - sal_ref
410+
fn2 = nc.filename.replace('grid_V', 'grid_T').replace('grid-V', 'grid-T')
411+
nc2 = dataset(fn2, 'r')
412+
sal0 = nc2.variables['so'][:].squeeze()
413+
nc2.close()
410414

411415
# Calculate zonal cell length.
412416
# Lon grid is evenly spaced, so only need one cell length per latitude.
@@ -418,14 +422,21 @@ def fov_sa(nc, keys, **kwargs):
418422
mask_3d = np.stack(mask_3d, axis=0)
419423

420424
# check sizes
421-
if vso.shape != mask_3d.shape:
425+
if sal0.shape != mask_3d.shape:
422426
print('FOV: Shapes don\'t match')
423427
assert 0
424428

425429
# Apply masks to 3d data
426-
vo = np.ma.masked_where(vso.mask + mask_3d + (vo == 0.), vo) # shape alignment?
427-
sal0 = np.ma.masked_where(vso.mask + mask_3d + (sal0 == 0.), sal0) # shape alignment?
430+
vo = np.ma.masked_where(vo.mask + mask_3d + (vo == 0.), vo) # shape alignment?
431+
sal0 = np.ma.masked_where(sal0.mask + mask_3d + (sal0 == 0.), sal0) # shape alignment?
432+
433+
#print('a sal0', sal0.shape, sal0.min(), sal0.max())
428434

435+
sal0 = sal0 - sal_ref
436+
#print('b sal0', sal0.shape, sal0.min(), sal0.max())
437+
438+
#print('vo:', vo.shape, vo.min(), vo.max())
439+
#print('c sal0', sal0.shape, sal0.min(), sal0.max())
429440
# from matplotlib import pyplot
430441
# for name, dat in zip(
431442
# ['vo', 'sal0', 'xarea', 'lats', 'lons', 'mask2d', 'mask3d', 'alttmask',],
@@ -443,25 +454,27 @@ def fov_sa(nc, keys, **kwargs):
443454

444455
# calculate cross sectional area by multiplying zonal cell length by cell depth thickness
445456
xarea = np.ma.masked_where(sal0.mask, thkcello)
446-
447457
for (z, y, x), thk in maenumerate(xarea):
448458
la = lats[y, x]
449459
xarea[z, y, x] = thk * zonal_distances[la]
450-
#xarea_sum = xarea.sum(axis=(0,2))
451460
xarea_sum2 = xarea.sum(axis=2)
461+
#print('xarea_sum2:', xarea_sum2.shape, xarea_sum2.min(), xarea_sum2.max())
452462

453-
# Vbar = SUM( vo(x)*thickcello(x)*dx) / SUM( thickcello*dx)
454463

464+
# Calculate vobar and sobar.
465+
# Vbar = SUM( vo(x)*thickcello(x)*dx) / SUM( thickcello*dx)
455466
vobar = (vo* xarea).sum(2) / xarea_sum2
467+
#obar = vo.mean(2)
468+
#print('vobar', vobar.shape, vobar.min(), vobar.max())
456469

457-
print('vobar', vobar.shape, vobar.min(), vobar.max())
458-
470+
#sobar = sal0.mean(2)
459471
sobar = (sal0* xarea).sum(2) / xarea_sum2
460-
print('sobar', sobar.shape, sobar.min(), sobar.max())
472+
#print('sobar', sobar.shape, sobar.min(), sobar.max())
461473

474+
vsbar = (vobar*sobar * xarea_sum2).sum(0)
475+
#vsbar = (vobar*sobar * xarea.mean(2)).sum(0)
462476

463-
vsbar = (vobar*sobar * xarea_sum2).sum(1)
464-
print('vsbar', vsbar.shape, vsbar.min(), vsbar.max())
477+
#print('vsbar', vsbar.shape, vsbar.min(), vsbar.max(), vsbar.compressed())
465478

466479
total = vsbar.mean()
467480

@@ -484,12 +497,11 @@ def fov_sa(nc, keys, **kwargs):
484497
#pyplot.close()
485498

486499
# Take the mean in the meridional area
487-
total = total.mean()
500+
#total = total.mean()
488501

489502
# Apply factors from paper.
490503
output = (-1./sal_ref) * total # 1/PSU * PSU m/s
491-
print(output)
492-
assert 0
504+
output = output * 1e-6 # Convert m3 s-1 to Sv.
493505
return output
494506

495507

key_files/fov.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
#Fov meridional transport of freshwater by the AMOC _ South Atlantic
33
name: Fov
4-
units: PSU m/s # Sv
4+
units: Sv
55
dimensions: 1
66
model: NEMO
77
modelFiles: $BASEDIR_MODEL/$JOBID/nemo_$JOBIDo_1y_*_grid-V.nc

0 commit comments

Comments
 (0)