3.
\ begingroup美元

标量的平流,例如温度(T),按水平风计算,其定义如下:

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

在哪里$ \ textbf{你}$是水平风矢量,$ \ textbf{你}= (U, v),被你美元五美元其纬向和经向分量分别为().

如前所述,用网格化数据计算它,使用有限差分(或类似的数值方法)是很方便的在这里

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

dy=111000 # [m] lonres=lon[1]-lon[0] # constant tadv=np.zero (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日10:14
  • \ begingroup美元 @gansub,完整的代码和样本数据可以从这个Dropbox文件夹下载:dropbox.com/sh/kcrb08h72jjj3rn/AAAIAUgKVrRrICAQtXhOHS2ta ? dl = 0谢谢你的帮助。 \ endgroup美元
    - - - - - -
    2019年3月22日10:43
  • \ begingroup美元 谢谢。如果你不介意的话(现在问题结束了)。你能把dropbox的链接编辑到问题中吗? \ endgroup美元
    - - - - - -gansub
    2019年3月22日12:12
  • 1
    \ begingroup美元 当然。完成后,链接被编辑成问题。 \ endgroup美元
    - - - - - -
    2019年3月22日13:03
  • \ begingroup美元 (0,0)位置在0°lon和20°N latat(0,20)。这个角没有在图中显示出来。实际上,所有的边界都在图形域之外。 \ endgroup美元
    - - - - - -
    2019年3月25日17:15

3答案3.

3.
\ begingroup美元

当我看到这样的问题时,我首先检查是否已经有一个经过良好测试和良好记录的实现,而不是重新发明轮子。在这种情况下MetPy温度平流是一个经过良好测试的软件,可以做许多气象学家想要的事情,包括用正确的地图比例因子计算有限差异。既然你正在使用Python,我至少会先看看他们的实现,即使你不打算使用他们的代码,也要纠正你的代码。

请先执行此操作,并在尝试任何降级操作之前验证数据。

最后,atmosphericprisoner escape是正确的。如果你正在使用纬度,长度网格和计算有限差分,你需要包括地图比例因子。如果你用的是全局网格,有限差分在两极是行不通的。如果您正在使用区域电网,这不是问题。当你问一个计算性的问题时,请尽可能多地提供细节。

\ endgroup美元
    1
    \ begingroup美元

    我不知道你积分了多少时间步。我不太明白你是怎么得到温度的美元\ rm T (T, s, y, x)美元在你的第二个盒子里,但这看起来有点像一个冗余的操作:最终结果是T:美元=新台币,所以当然你的右边看起来像左边,就温度颜色图而言。我不明白不同的比例从何而来。

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

    你的有限差分是笛卡尔的,当你把它们投射到一个球上时,为了得到正确的物理结果,你需要考虑球坐标中的正确微分。

    \ endgroup美元
    9
    • \ begingroup美元 我编辑了问题以删除$T$中的$s$维度。它只是时间和空间的函数T$[T,y,x]。 \ endgroup美元
      - - - - - -
      2019年3月20日19:32
    • \ begingroup美元 给出了三个字段。T、u、v:水平风的温度、纬向分量和经向分量。这就是我得到t的原因。我不明白你的评论“…但这看起来有点像一个冗余的操作:最终结果是:="你能详细说明一下吗?我没有计算T, T是给定的。我将u和v缩放,分别乘以T,使uT和vT。T在模块中,因为它包含来自异常的负值。这就是我所说的“按温度缩放风力成分”。缩放后的风向量的大小由$\√{uT^{2}+vT^{2}}$给出。 \ endgroup美元
      - - - - - -
      2019年3月20日19:39
    • 1
      \ begingroup美元 中心有限差分在这一领域非常常用,grad已经成功地使用了几十年…cola.gmu.edu/grads/gadoc/gradfunchcurl.html你关于“向上盘整”的说法可能是对的。但这不应该是中间和最右边数字之间显著差异的主要来源。我问的是我的假设,经典的温度平流应该类似于按温度缩放的风的大小。 \ endgroup美元
      - - - - - -
      2019年3月20日19:43
    • \ begingroup美元 积分时间应该无关紧要,因为这不是一个预测量。这个问题对于一个时间步仍然有效。 \ endgroup美元
      - - - - - -
      2019年3月20日19:44
    • 1
      \ begingroup美元 @ouranos:除此之外,如果你仍然被这个问题所困扰,我建议减小问题的规模:看看如果你的方案只沿着一个方向平流一个温度波动会发生什么。这将为您提供一个更清晰的设置和更容易的方法来确定哪里出了问题。 \ endgroup美元 2019年3月22日16:05
    1
    \ begingroup美元

    我想出了一个解决办法。我跟着@gansub他的建议是,在重新发明轮子之前,先检查一下已经存在的东西。我发现MetPy的代码结构非常(太)好,所以平流的代码在几个不同的函数之间很稀疏;追溯并组合一个函数不是那么快的。然而,在他们的文档页面中,gradients提供了一个关于如何轻松构建这样一个函数的非常好的示例cdiff函数在这里。所以我用Python重写了他们的代码,现在运行得很好。我写了一个小包可用在这里,如果有人对工作解决方案感兴趣的话。

    \ endgroup美元

      你的答案

      点击“张贴您的答案”,即表示您同意我们的服务条款隐私政策饼干的政策

      这不是你想要的答案?浏览带标签的其他问题问自己的问题