UDF 中定义源项的宏 DEFINE_SOURCE 中有一个源项线性化问题, 即如何定义dS[eqn]。 根据 CFD 理论, dS[eqn]应该是源项表达式对传输变量取一阶导数后的表达式, 且必须保证为负值。 然而实际模型中, 有时候算出来的一阶导数可能是正值, 于是初学者会很迷茫究竟应该怎么给 dS[eqn]赋值。
下面做了一个简单的例子,纯层流流动,矩形计算域,右边为出口,左边部分入口。在x 动量方程中加入源项 $\frac{u}{u+1}-u$,比较情况如下,全部采用 QUICK 格式。
- 完全求导$\mathrm{dS}[\mathrm{eqn}]=\frac{1}{(u+1)^{2}}-1$
- 源项$\mathrm{dS}[\mathrm{eqn}]=\frac{1}{1+u}-1$
- 源项$\mathrm{dS}[\mathrm{eqn}]=0$
- 源项$\mathrm{dS}[\mathrm{eqn}]=-1$
结论: 可以看出, 不同的 dS 值会影响收敛性,如果能收敛,则最终结果没有影响。 所以实
际编程中可以用如下表达式, 这样如果一阶导数表达式为负值则最终取负值, 可以加速收敛,
如果为正值, 最终就取零。
$$ \mathrm{dS}[\mathrm{eqn}]=\min (0, \text { 一阶导数表达式 }) $$
本文转自SuperUDF