我将假设扰动不足以产生冲击波,这是完全不同的蠕虫罐头。
你的能量泛函很接近但不太正确——浅水方程的哈密顿量是
H=12∫Ω(h|u|2+gh2)dx,
尽管泊松括号涉及更多。如果您关心问题的哈密顿结构,您也可以正确地将辛积分器确定为使用的工具。但重要的是要注意辛积分器保留了一些扰动哈密顿量的能量
H′=H+δt⋅δH+O(δt2),
很多时候,我们可以使用 Baker-Campbell-Hausdorff 公式根据几个泊松括号读出换句话说,一些能量漂移是可以预料的。一些时间方案保证完全保留所有线性和二次不变量,但项不是二次的。也就是说,从修改后的哈密顿量的轨迹中精确采样的特性非常有用——你可以免费获得很多特性,比如接近平衡的系统结构、有界轨道、相空间体积守恒等。δHh|u|2H′
我还没有具体研究过浅水方程的辛离散化的细节,所以对此持保留态度。有几个显式方案仅对简单的哈密顿量是辛的,可以用通常的泊松括号SWE 的哈密顿量和括号都不是。我认为隐含的中点规则H=K(p)+U(q)
zn+1−znδt=f(zn+1+zn2)
对于 ODE即使在不寻常的情况下也是辛的。现在你有一个隐式方程要求解,但没有什么是免费的。因此,可能值得尝试其他时间步长方案。z˙=f(z)
最后,逆风与问题的哈密顿结构以一种有点微妙的方式相互作用。尽管他们采用了更多的有限元方法,但本文研究了如何使用逆风对 SWE 进行能量守恒离散化。
根据您显示的图,您应该问自己,您发现的能量漂移是否表明错误或未能保持哈密顿结构,或者仅仅是积分轻微扰动问题的预期漂移。虽然您写下的哈密顿量并不完全正确,但您显示的图表明能量漂移约为 0.035,总共约为 10,因此漂移不到总数的 1%。这对我来说并没有引起任何危险,但如果你想尝试一些事情来调试它,你可以:
- ,下再次运行模拟,看看能量漂移是什么样的。任何收敛的时间步长方案(辛或非辛)都应该将漂移减半,所以这不会告诉你你需要知道的一切。δx/2δt/2
- 运行模拟很长时间,看看能量漂移是什么样子的。要了解“长”的含义,您可以从波速中获得速度标度,并从域的直径的几个倍数是一个不错的选择. 如果解决方案爆炸,您的方案可能不是辛的。c=gh−−√LL/c
如果您遇到的问题与捕获冲击波有关,我会同意评论中的建议,即仅使用有限体积方法,但情况似乎并非如此。