我正在使用MIKE3建模包中的海岸水动力模型。MIKE3采用有限体积法在三角形网格上求解显式时步浅水方程。
我的模型经常在流量高峰时,在岬角周围的几个单元格中“爆炸”(数值发散)。我可以采取什么步骤来提高数值稳定性,无论是通过修改网格或其他措施?
江南体育网页版地球科学堆栈交换是一个为那些江南电子竞技平台对地质学、气象学、海洋学和环境科学感兴趣的人提供的问答网站。注册只需要一分钟。
注册加入这个社区吧几乎所有使用前向时间模型的有限方法都遵循courant - friedrichs - lewy定律,该定律计算courant数并将其与决定稳定性的$C_{max}$进行比较,因此对于2-D:
$ $ C = \ \压裂压裂{V_xdt} {dx} + {V_ydt} {dy} \通用电气C_{马克斯}$ $
其中$C$为库朗数,$V_i$为下标方向的速度,$dx$或$dy$为指定方向的长度区间,$dt$为指定的时间步长。如果你想得到数值上的不稳定性,增加网格间距会降低库仑数,但是你可能会错过你想要捕捉的动态。如果你减少时间步长,它将需要更长的动力学发展计算。
解决这个计算问题的一种方法是在动态时间步长中编码:持续计算$C$和$C_{max}$。如果$C > C_{max}$,那么让模型将步长降低一半。再次检查,然后重置为下一步,这样您就可以在“不太动态”的时间内有更大的时间步长。我已经在其他模型中实现了很多次,而且效果很好。
另一种可能是你的网格有很高的纵横比:如果你的$x$方向是10公里,$y$是1公里,那么$10:1的纵横比就非常高了。在您的例子中,由于您使用的模型包是三角形,所以您希望三角形网格中的角度尽可能锐角。一般来说,钝角意味着高纵横比。
像llmari一样,我不熟悉流体动力学模型,所以我不做细节。我的专长是地幔对流和板块弯曲模型。我希望这能有所帮助。
通常解决数值稳定性问题的灵丹妙药是减小时间步长。它并不总是有帮助(事实上,在某些情况下甚至会使不稳定性更糟),但它通常是要尝试的第一件事。
当然,更短的时间步长会占用更多的计算机时间。另一种尝试的方法是,如果减少时间步长没有帮助,或者导致不可接受的糟糕性能,则改进或有点矛盾的是,在有问题的区域中粗化网格。(这两种方法哪一种更有可能起作用,取决于不稳定的确切原因。)如果单靠这个也没用,试着调整网格而且减少时间步长。
最终,最好的解决这类问题的方法通常是切换到更稳定的时间步进方法。作为一般的经验法则,高阶方法比低阶方法更稳定(至少在某种程度上),隐式方法比显式方法更稳定。在这两种情况下,稳定性都是以额外的计算工作量为代价的,但它通常仍然比仅仅减少足够的时间步长来实现类似的稳定性要便宜。
不幸的是,我个人并不熟悉MIKE3软件,不知道它使用什么时间步进算法,也不知道最终用户是否有办法调整算法。