CFD入门傻瓜版[3]
by 优雅的混蛋 on 12月 19, 2006
想了一下,还是把Roe求解器稍微说说吧,力求比较完整。但是不要指望我把Roe求解器解释清楚,因为这个不是很容易三言两语说清的。
Roe求解器的数学形式是这样的
[tex]\mathbf{F}_{i+\frac{1}{2}}=\frac{1}{2}[\mathbf{F}(\mathbf{Q}^-_{i+\frac{1}{2}}) +\mathbf{F}(\mathbf{Q}^+_{i+\frac{1}{2}})]- \frac{1}{2}|\mahbf{\bar{A}}_{i+\frac{1}{2}}|(\mathbf{Q}^+_{i+\frac{1}{2}}-\mathbf{Q}^-_{i+\frac{1}{2}})[/tex]
显然这个公式的第一项是一个中心差分形式,先前说过简单的中心差分不可行,原因是耗散不足导致振荡,说得通俗点就像一个弹簧,如果缺乏耗散(阻尼)它就会一直振荡。“耗散”这个术语在激波捕捉格式中是最常见的。第二项的作用就是提供足够的耗散了。
这里[tex]\mathbf{Q}^+_{i+\frac{1}{2}}[/tex]和[tex]\mathbf{Q}^-_{i+\frac{1}{2}}[/tex]已经用MUSCL求得了,[tex]\mathbf{F}[/tex]的定义在第一讲中已经介绍了。只有[tex]|\mahbf{\bar{A}}|[/tex]是还没说过的。
[tex]\mathbf{A} = \frac{\partial \mathbf{F}}{\partial \mathbf{Q}}[/tex]
这个矩阵可以写成特征矩阵和特征向量矩阵的形式
[tex]\mathbf{A} = \mathbf{R}^-\mathbf{\Lambda}\mathbf{R}^+[/tex]
而
[tex]|\mathbf{A}| = \mathbf{R}^-|\mathbf{\Lambda}|\mathbf{R}^+[/tex]
[tex]\mathbf{A}[/tex],[tex]\mathbf{R}[/tex],[tex]\mathbf{R}^-[/tex]和[tex]\mathbf{\Lambda}[/tex]的具体表达式在许多书上都有,而且这里的矩阵表达有问题,所以就不写了。
[tex]|\mathbf{\bar{A}}|_{i+\frac{1}{2}}[/tex]是由[tex]\rho_{i+\frac{1}{2}}[/tex]、[tex]u_{i+\frac{1}{2}}[/tex]和[tex]e_{i+\frac{1}{2}}[/tex]代入[tex]\mathbf{A}[/tex]计算得到。而[tex]\rho_{i+\frac{1}{2}}[/tex]、[tex]u_{i+\frac{1}{2}}[/tex]和[tex]e_{i+\frac{1}{2}}[/tex]采用所谓Roe平均值
[tex]\rho_{i+\frac{1}{2}} = \sqrt{\rho^+ \rho^-}[/tex]
[tex]u_{i+\frac{1}{2}} = \frac{\sqrt{\rho^+}u^+ + \sqrt{\rho^-}u^-}{\sqrt{\rho^+}+\sqrt{\rho^-}}[/tex]
[tex]e_{i+\frac{1}{2}} = \frac{\sqrt{\rho^+}e^+ + \sqrt{\rho^-}e^-}{\sqrt{\rho^+}+\sqrt{\rho^-}}[/tex]
这才是Roe求解器关键的地方!
总结一下,就是用Roe平均计算界面上的气体状态[tex]\mathbf{Q}_{i+\frac{1}{2}}[/tex],然后计算得到[tex]|\mahbf{\bar{A}}_{i+\frac{1}{2}}|[/tex],这样[tex]\mathbf{F}_{i+\frac{1}{2}}[/tex]就可以得到了。如果有时间,我后面会找一个代码逐句分析一下。
总之,计算[tex]\mathbf{F}_{i+\frac{1}{2}}[/tex]还是很不直接的。构造近似黎曼解是挺有学问的,需要对气体动力学的物理和数学方面有较深的理解。通常,如果不是做基础研究,你只需要知道它们的特点,会用它们就可以了,而不必深究它们怎么推导出来的。
Leave your comment