3
\ begingroup美元

平流的标量,如温度(T),水平风,定义如下:

$ - \ textbf{你}\ cdot \微分算符元新台币

在哪里$ \ textbf{你}$水平风矢量,$ \ textbf{你}= (U, v),被你美元五美元它的纬向和经向组件,分别是()。

计算网格数据,方便使用有限的差异(或类似的数值方法),指出在这里

使用这种方法,以下行Python编写的计算温度平流的(TAdv):

dy = 111000 # [m] lonres =朗[1]朗[0]#常数tadv = np.zeros (np.shape (T));tadv.fill (np.nan) t范围(np.shape (t)[0]):在np.arange x (1, len(朗)1):在np.arange y (1, len (lat) 1): dx = abs (111000 * np.cos (lat [y] * (2 * np.pi / 360)) * lonres) tadv (t、y、x) = - (u (t、y、x) * (t (t、y、x + 1) - t (t、y、x - 1)) / (2 * dx) + v \ [t、y、x] * (t (t, y + 1, x) - t [t y-1 x]) / (2 * (dy))

我希望类似的结果从扩展风组件的温度,在每个网格单元,完成如下:

ut = np.zeros (np.shape (T) vt = np.zeros (np.shape (T) ut = np.zeros (np.shape (T)的T范围(np.shape (T) [0]): x的范围(len(朗)):y的范围(len (lat)): ut (T、y、x) = u [T、y、x] * abs (T (T、y、x)) vt (T、y、x) = v (T、y、x) * abs (T (T、y、x)) ut [T、y、x] = ((ut [T、y、x] * * 2 + v (T、y、x) * * 2) * * 0.5) * np.sign (T (T、y、x))

风的大小缩放向量(UT)将类似的“T”的运输。这是乘以T(1 - 1)的迹象,因为T异常(有T < 0),为了保持其标志。

然而,结果是完全不同的。我错过什么呢?在这种假设它是一个错误(这两个结果应该相当类似的)?还是一个编码的问题?

在下图中,我展示了原始T, u和v字段(左),和两个以上的结果计算:Tadv与u和v(中间),和缩放向量的大小,UT,缩放向量本身UT和vT(右)。TAdv乘以24 * 3600,单位是K /天。

图

这里是一个链接到一个Dropbox文件夹,完整的脚本和样本数据在哪里可以下载:https://www.dropbox.com/sh/kcrb08h72jjj3rn/AAAIAUgKVrRrICAQtXhOHS2ta?dl=0

\ endgroup美元
5
  • 1
    \ begingroup美元 你能上传你的完整代码和一些示例数据的地方所以我可以在本地运行它? \ endgroup美元
    - - - - - -gansub
    2019年3月22日,在14
  • \ begingroup美元 @gansub,完整的代码和示例数据可以从这个Dropbox文件夹下载:dropbox.com/sh/kcrb08h72jjj3rn/AAAIAUgKVrRrICAQtXhOHS2ta?dl=0谢谢你的帮助。 \ endgroup美元
    - - - - - -
    2019年3月22日,十43
  • \ begingroup美元 谢谢。如果你不介意(现在的问题是完成)。你能编辑dropbox链接到的问题吗? \ endgroup美元
    - - - - - -gansub
    3月22日,2019年在身子的
  • 1
    \ begingroup美元 确定。完成,链接编辑质疑。 \ endgroup美元
    - - - - - -
    2019年3月22日13:03
  • \ begingroup美元 (0,0)的位置是在0°经度和20°N纬度(0,20)。这个角落没有显示在这个阴谋。实际上,所有的领域都是图域。 \ endgroup美元
    - - - - - -
    2019年3月25日17:15

3答案3

3
\ begingroup美元

当我看着这些问题我第一次检查是否有一个测试和记录已经实现,而不是重新发明轮子。在这种情况下MetPy温度平流是一个经过良好测试的软件,气象学家想要的许多东西包括有限差分计算正确的地图比例尺的因素。因为你是使用Python我至少会看他们的实现首先和正确的代码,即使你不打算使用他们的代码。

请先做到这一点并验证您的数据在你尝试之前任何降尺度操作。

最后AtmosphericPrisonEscape是正确的。如果您使用的是纬度,经度网格和有限差分计算你需要包括地图比例尺的因素。如果您使用的是全球网格有限差分不会工作在两极。如果您使用的是区域网格,不是一个问题。请包括尽可能多的细节当你问一个计算问题。

\ endgroup美元
    1
    \ begingroup美元

    所以我不知道有多少你整合步伐。我真的不明白你所做的得到温度美元\ rm T (T, s, y, x)美元在第二个框中,但这似乎有点像冗余操作:最终的结果T:美元=新台币当然,所以你看起来像左边,右边的温度colourmap。我不明白不同的比例从哪里来。

    你的第一个数值配方是一个完全不同的野兽:近似微分在一阶对称的时尚美元dT / dx \约(T (T、y、x + 1) - T (T、y、x - 1)) / (2 * dx)美元是数值不稳定。这就是为什么当你想坚持有限的差异,一个使用逆风

    也你有限的差异是笛卡儿的人,而你的项目在一个球体,所以身体正确的结果,你需要考虑到正确的差异在球坐标。

    \ endgroup美元
    9
    • \ begingroup美元 我编辑了问题把年代渔政船在T美元美元。只有时间和空间的函数T (T、y、x)美元。 \ endgroup美元
      - - - - - -
      2019年3月20日19:32
    • \ begingroup美元 三个字段。T, u和v:温度、纬向和经向组件的水平风。这就是我获得t .我不明白你的评论“…但这似乎有点像冗余操作:最终的结果是:= "你能详细说明吗?我不计算T T。我扩展u和v,每个乘以T,使uT和vT。T模块,因为它包含负异常。这就是我叫“缩放风组件温度”。按比例缩小的风矢量的大小然后由美元\√6 {uT ^ {2} + vT ^ {2}} $。 \ endgroup美元
      - - - - - -
      2019年3月20日19:39
    • 1
      \ begingroup美元 集中有限的差异是非常常用的在这一领域的毕业生已经成功使用了几十年……cola.gmu.edu/grads/gadoc/gradfunchcurl.html你也许是对的“逆风”。的主要来源,但不应该中间和右边的数字之间的区别。我询问我的假设古典温度平流应该类似于temperature-scaled风力的大小。 \ endgroup美元
      - - - - - -
      2019年3月20日19:43
    • \ begingroup美元 积分时间应该无关紧要,因为这不是一个预后数量。这个问题是一个时间步仍然有效。 \ endgroup美元
      - - - - - -
      2019年3月20日在44
    • 1
      \ begingroup美元 @ouranos:除此之外,如果你仍然坚持这个问题,我建议减少的大小问题:看看会发生什么,如果你只会用平流输送沿着一个方向一个温度撞你的计划。这将给你一个更清洁的设置和一个更简单的方法来确定什么是错的。 \ endgroup美元 2019年3月22日16:05
    1
    \ begingroup美元

    我来一个解决方案。我有跟踪@gansub的建议检查已经有什么,然后重新发明轮子。我发现MetPy的代码(也)结构良好,所以平流的代码是稀疏的几个不同的功能;不直接追溯和把一个函数放在一起。然而,毕业生带来了一个非常好的例子如何轻松地构建这样一个函数在文档页面cdiff函数在这里。所以我在Python中重写他们的代码,现在运行良好。我写了一个小包裹在这里,如果有人有兴趣工作的解决方案。

    \ endgroup美元

      你的答案

      通过点击“发布你的答案”,你同意我们服务条款,隐私政策饼干的政策

      不是你要找的答案?浏览其他问题标记问你自己的问题