最近,学习海气相互作用时,老师布置了一个小作业。通过卫星高度计测得的海表面高度异常数据,计算其表层地转流速,并研究其与海表面高度异常的关系。 刚刚看到作业内容时,还是有点一头雾水的,不晓得怎么通过海表面高度数据推算出地转流速。挠头思考时,无意中看到物理海洋学,想起里面曾经有关系地转流部分的内容,索性拿出来看看找一下。惊喜大于意外,书里果然有推导的公式,直接贴在下面了:
其中,
δ
\delta
δ为海表面高度,f为科氏力(f=2Ωsinψ)ψ纬度 ;,g为重力加速度,y x 就是经纬度。
根据公式很容易知道计算的过程,细节在于对于数据的处理,包括科氏力、经纬度转换等等。
import cartopy.feature as cfeature
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
import matplotlib.pyplot as plt
import numpy as np
import cartopy.crs as ccrs
import xarray as xr
path='D:\\sla.nc'
data=xr.open_dataset(path)
sla=data.sla[0] .data
x=data.longitude.data
y=data.latitude.data
a=6400000
omega=7.292e-5
g = 9.8
coslat=np.cos(y*np.pi/180).reshape((-1,1))
coslon=np.cos(x*np.pi/180).reshape((-1,1))
sinlat = (np.sin(y*np.pi/180)).reshape((y.shape[0],1))
f=2*omega*sinlat
dx=(np.gradient(x)*np.pi/180).reshape((-1,1))*coslat*a
dy=(np.gradient(y)*np.pi/180).reshape((-1,1))*a
dslady=np.gradient(sla,axis=0)/dy
dsladx=np.gradient(sla,axis=1)/dx
us=-1*(g/f)*dslady
vs=(g/f)*dsladx
fig = plt.figure(figsize=(10, 9))
ax=fig.add_subplot(111,projection=ccrs.PlateCarree())
plt.rcParams['axes.unicode_minus'] = False
ax.add_feature(cfeature.NaturalEarthFeature('physical', 'land', '50m', \
edgecolor='white', facecolor='white',zorder=2))
ax.set_xticks(np.arange(143, 146, 0.5),crs=ccrs.PlateCarree())
ax.set_yticks(np.arange(33, 36, 0.5),crs=ccrs.PlateCarree())
ax.xaxis.set_major_formatter(LongitudeFormatter(zero_direction_label =False))
ax.yaxis.set_major_formatter(LatitudeFormatter())
ax.set_extent([143,145,33,35])
ax.streamplot(x, y, us,vs,density=1)
cb=ax.contourf(x,y,sla)
ax.tick_params(which='major', direction='out', length=10, width=0.99, pad=0.2, bottom=True, left=True, right=False, top=False)
ax.set_title('streamline plot',pad=10,fontsize=20)
ax.set_xlabel('Longtitude',fontsize=20)
ax.set_ylabel('Latitude',fontsize=20)
fig.savefig('D:\\'+'oceanas.png',format='png',dpi=150)
看一下成图: 通过选取任意一个涡旋,进行绘图,可以很明显的发现,流速的流线图与海表面高度异常数据吻合很好,可以暂定认为,流线的分布一定程度上反应了海表面高度的分布。
可能计算过程稍显粗糙,简单记录一下,感兴趣的小伙伴可以去测试一下。有问题的话欢迎评论留言交流补充,peace~~
一个努力学习python的海洋菜鸡
水平有限,欢迎指正!!!
欢迎点赞、评论、收藏。
|