基于SA模型的湍流拓扑优化,求解异常
-
下图是我基于不同的密度场(xh)进行速度场(U)和伴随速度场(Ua)的计算结果,xh有些小差异,但是伴随速度场计算出来完全不一样,右图计算出错了。
速度场计算是基于SA模型进行,在UEqn方程中增加了源项:
tmp<fvVectorMatrix> tUEqn ( fvm::div(phi, U) + turbulence->divDevReff(U) + fvm::Sp(alpha, U) == fvOptions(U) ); fvVectorMatrix& UEqn = tUEqn.ref(); UEqn.relax();
其中alpha是由密度场xh插值进行的,alphaMax=2.5e5,qu=0.01。
alpha=alphaMax*qu*(1-xh)/(qu+xh);
对于伴随速度场的计算,和UEqn类似,如下所示:
volVectorField adjointTransposeConvectiona((fvc::grad(U) & Ua)); tmp<fvVectorMatrix> tUaEqn ( fvm::div(-phi, Ua) + adjointTransposeConvectiona + turbulence->divDevReff(Ua) + fvm::Sp(alpha, Ua) == fvOptions(Ua) ); fvVectorMatrix& UaEqn = tUaEqn.ref(); UaEqn.relax();
请大家帮忙看看,会有哪些可能性导致代码计算出现异常。
-
@李东岳 李老师 动图中iter是指迭代步数。目前设置的是计算速度场计算200步完成后,再继续伴随速度场,这边为了减少gif的大小,我只生成了前50步的结果。
在10-15步的时候,此时计算的Ua是正常的,但是随着迭代步增加,计算就不收敛了。一直没搞明白为什么。这是其他密度场下计算得到的Ua场:
现在的问题是,有些密度场下可以计算,有些就异常了。(密度场是通过0时刻读入的,作为一个初始值)
volScalarField xh ( IOobject ( "xh", runTime.timeName(), mesh, IOobject::READ_IF_PRESENT, IOobject::AUTO_WRITE ), mesh, scalar(voluse), zeroGradientFvPatchScalarField::typeName ); xh.read();