登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 灰色节能君 于 2022-6-30 14:19 编辑
昨天在用 metpy 对垂直方向进行差分计算时发现计算出来的结果与自己编写的函数计算出的结果有一些差距,尤其是在边界上相差了20-30%。查看文档后发现,metpy 对非均匀格点差分方案与均匀格点差分有一些不同。
例如,我的想法是如果计算 偏u/偏p , 垂直方向有气压层1000,950,850,700,500。在边界上 1000hPa,使用前差则为 (u[1000] - u[950]) / (1000 - 950)
在内部 950hPa 上用中央差为 (u[1000] - u[850]) / (1000 - 850)
通常在各网站获取的数据,它们在xy方向是等格距的,而垂直方向上格距并不相同(50,100,150,200)
因此,在垂直方向上基于泰勒展开的三点中央差方案并不严格。
metpy 采用了以下论文给出的非均匀格点差分公式。即使是在边界上也使用的是如下图所示的三点差分,而不是通常用的两点前差和后差。
Bowen, M. K. and R. Smith, 2005: Derivative formulae and errors for non-uniformly spaced points. Proc. R. Soc. A, 461, 1975-1997,
doi:10.1098/rspa.2004.1430.
xi 是格点坐标,相对于1000,950,850,700,500。如果要计算1000hPa处差分,则 χ=1000。Bowen2005对每个格点根据格距赋予权重,并在每个格点进行泰勒展开。对于三点一阶差分,公式与三点中央差一样是二阶精度。而由于 metpy 在边界也采用的是三点格式而不是两点差分,所以造成了自己编写的函数结果与 metpy 结果在边界上有不小差距。
我不知道科研上究竟应该如何选择,垂直方向当做均匀格点进行两点前后差和三点中央差是不是能满足科研上对结果精度的需要?请大神指教!
其实以上公式并不复杂且非常严谨,如果传统差分方法能够满足需要,这篇帖子权当提醒大家 metpy 计算方法有所不同。
|