如果已经存在,请指点我一个答案,但经过一番搜索,我仍然找不到这个看似非常简单的问题的答案。有很多参考资料可用于使用 FVM 求解欧拉方程。我正在使用 Toro (1997) 的书Riemann Solvers and Numerical Methods for Fluid Dynamics作为 Riemann 求解器和 Godunov 方法的参考。
我正在尝试使用 Godunov 方法和 HLLC 通量在固定的、均匀的单元格网格上求解二维欧拉方程。在实施了书中的 Sod 冲击管测试后,我确信我的 Riemann 求解器没有犯明显的错误。然而,这本书没有讨论狄利克雷边界条件,而这正是我想要实现的边界条件。
方程
我有带有源项的二维欧拉方程:
这里我用粗体表示向量,是流体密度,是它的速度,是压力,,其中是比热的(常数)比。
代码
我尝试以通用方式编写有限体积代码,以便我可以轻松地对其进行测试并将其应用于不同类型的问题。这意味着每个子问题都应该为每个北、南、东和西边界提供一个具有特定接口的函数。为了规定我想要的 Dirichlet 边界条件,在网格周围有一层幽灵单元,我规定了固定值。然后,我像往常一样计算通量,为黎曼求解器指定适当槽中的固定状态。然后将得到的通量返回到驱动函数,该函数只是将所有通过反向网格间距加权的通量累积到一个大的导数向量中。
问题
鬼细胞上的规定值很容易通过混淆源项的添加方式等来保存。假设初始条件满足,我可以在边界上将总通量和源项设置为零使得那里的导数为零。当我这样做时这是有道理的,但我不再相信它是正确的,因为我现在在值被迫保持不变的域边界处获得了相当严重的速度峰值(下图)。速度峰值最终会进入其他所有领域。
题
通过使用具有规定值的幽灵单元,我是否走在正确的轨道上?显然,我描述的确切方法没有按预期工作。有没有更好的方法来实现这一点?
