自定义Solver出现“浮点数例外,核心已转储”
-
我是年初接触OpenFoam, 之前一直做的是实验,又是硕士联培只有一年,东西从头做,所以时间很紧,还希望了解的人提点一二。做的是风力机气动噪声,现在要在icoFOAM 中把声波扰动方程APE加进去。
这段代码跟在PISO后面写,如下:Info<<"point1"<<endl; volScalarField c21(1.4*(p+Pp+p0)); volScalarField c20(1.4*(p+Pp+p0)); Info<<"point2"<<endl; while (piso.correct()) { Info<<"point3"<<endl; fvVectorMatrix FEqn ( fvm::ddt(F) +fvc::div(F*(U+Up)) +rho*fvc::div(U*Up) -rho*fvc::laplacian(nu,Up) -(rho)*fvc::div(nu*dev2(T(fvc::grad(Up)))) ); Info<<"point3.1"<<endl; solve(FEqn == -(rho)*fvc::grad(Pp)); Info<<"point4"<<endl; fvScalarMatrix PpEqn ( (rho/c21)*fvm::ddt(Pp) +fvc::div(F) ); Info<<"point4.1"<<endl; solve(PpEqn==-(rho/c21)*fvc::ddt(p)); Info<<"point5"<<endl; rhos=rhos+(rho)*(Pp+p-(Pp.oldTime()+p.oldTime()))/(1.5*c21-0.5*c20); Up=(F-rhos*U)/(rho+rhos); volScalarField c22(1.4*(p+Pp+p0)); c20=c21; c21=c22; Info<<"point6"<<endl; }
但是运行一定循环次数后便出现“浮点数例外,核心已转储”
但是当把求解F的方程和求解Pp的方程其中一个去掉的时候,计算便能顺利进行。
不知各位大佬有没有出现过这种情况。
谢谢! -
“但是当把求解F的方程和求解Pp的方程其中一个去掉的时候,计算便能顺利进行。”这句话当我没说。。。。。去掉其中一个后虽然会计算的更久,但还是出现“浮点数例外,核心已转储”。
-
你的那个图公式每个变量也不知道是什么啊。从代码看你用的显式离散,参考
UEqn.H
可以换成隐式试试。 -
@李东岳 嗯嗯,那我现在能改吗?公式带‘的项都是波动项,对应于我代码中加了p的变量,如u'对应于Up,p'对应于Pp,也是我要求解的东西,公式中的g相当于一个中间变量,没有什么实际意义,对应于代码中F。
我通过计算出的那几步调用paraview发现,波动项在几步计算后便达到了e23次量级,应该是这个原因出现“浮点数除外”
我把带有F的那几项换成FVM隐式后,求解器就编译不成功了。 -
经过试算发现,应该是求解Pp的那段程序导致的发散,但是为什么我还不清楚,有什么别的写法使它稳定吗?
-
fvScalarMatrix PpEqn ( (rho/c21)*fvm::ddt(Pp) +fvc::div(F) );
这是求解公式8么?
-
@李东岳 嗯嗯是的老师,求解公式8
-
文献中说的是compressible,为什么要用 icoFoam 呢?
-
@wwzhao 您好,声场之前的流场计算是不可压缩的。还有,可能是我不太了解,我这段程序发散:
fvScalarMatrix PpEqn ( (rho/c21)*fvm::ddt(Pp) +fvc::div(F) ); Info<<"point4.1"<<endl; solve(PpEqn==-(rho/c21)*fvc::ddt(p));
有哪些可能呢?
-
gdb跑一下,这一个错误提示根本看不出来个啥
-
嗯,最好也贴一下发散前3步后的log
-
@vamoszhi 我的意思是,文献的方法是用于可压缩流体,你应用到不可压缩流不会有问题么?
-
@wwzhao 哦哦好的,我再想想看。不过这种方法的流场部分本来是按照不可压缩流算得,这个应该是没有问题的,我的工作是把这部分方程加到计算流场的大循环中。
-
各位老哥,是我蠢了,我昨天把时间步长降到0.00001,居然算过去了。。。谢谢各位大佬帮助,我现在新问题是,如何在场内某一点上加上随时间三角函数变化的波动项。我自己查查,各位了解也可以提示我用哪种函数
-
@vamoszhi 您的声波扰动方程添加成功了吗?我也准备将声学扰动方程加入OF,请问是否方便交流下