def ocn_heat_transport(self, dlat=1, grid='g16'):
from scipy import integrate
# check time dimension
if 'time' in self._obj.dims:
flux = self._obj.SHF.mean('time')
else:
flux = self._obj.SHF
area = dict(g16=utl.tarea_g16, g35=utl.tarea_g35, g37=utl.tarea_g37)
flux_area = flux * area[grid] * 1e-4 # convert to m2
#
lat_bins = np.arange(-90,91,dlat)
lat = np.arange(-89.5,90,dlat)
if 'TLAT' in flux_area.coords.keys():
flux_lat = flux_area.groupby_bins('TLAT', lat_bins, labels = lat).sum()
latax = flux_lat.get_axis_num('TLAT_bins')
elif 'ULAT' in flux_area.coords.keys():
flux_lat = flux_area.groupby_bins('ULAT', lat_bins, labels = lat).sum()
latax = flux_lat.get_axis_num('ULAT_bins')
flux_lat.values = flux_lat - flux_lat.mean() # remove bias
flux_lat.values = np.nan_to_num(flux_lat.values)
integral = integrate.cumtrapz(flux_lat, x=None, initial=0., axis=latax)
OHT = flux_lat.copy()
OHT.values = integral *1e-15
return OHT
评论列表
文章目录