自定义Solver出现“浮点数例外,核心已转储”



  • 我是年初接触OpenFoam, 之前一直做的是实验,又是硕士联培只有一年,东西从头做,所以时间很紧,还希望了解的人提点一二。做的是风力机气动噪声,现在要在icoFOAM 中把声波扰动方程APE加进去。
    0_1517684528761_Screenshot-2018-1-31 DTU-1 pdf.png
    这段代码跟在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的方程其中一个去掉的时候,计算便能顺利进行。”这句话当我没说。。。。。去掉其中一个后虽然会计算的更久,但还是出现“浮点数例外,核心已转储”。


  • 网格教授 OpenFOAM教授 管理员

    你的那个图公式每个变量也不知道是什么啊。从代码看你用的显式离散,参考UEqn.H可以换成隐式试试。



  • @李东岳 嗯嗯,那我现在能改吗?公式带‘的项都是波动项,对应于我代码中加了p的变量,如u’对应于Up,p’对应于Pp,也是我要求解的东西,公式中的g相当于一个中间变量,没有什么实际意义,对应于代码中F。
    我通过计算出的那几步调用paraview发现,波动项在几步计算后便达到了e23次量级,应该是这个原因出现“浮点数除外”
    我把带有F的那几项换成FVM隐式后,求解器就编译不成功了。



  • 经过试算发现,应该是求解Pp的那段程序导致的发散,但是为什么我还不清楚,有什么别的写法使它稳定吗?


  • 网格教授 OpenFOAM教授 管理员

    fvScalarMatrix PpEqn
           (
             (rho/c21)*fvm::ddt(Pp)
            +fvc::div(F)
            );
    

    这是求解公式8么?



  • @李东岳 嗯嗯是的老师,求解公式8


  • OpenFOAM教授

    文献中说的是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跑一下,这一个错误提示根本看不出来个啥


  • 网格教授 OpenFOAM教授 管理员

    嗯,最好也贴一下发散前3步后的log


  • OpenFOAM教授

    @vamoszhi 我的意思是,文献的方法是用于可压缩流体,你应用到不可压缩流不会有问题么?



  • @wwzhao 哦哦好的,我再想想看。不过这种方法的流场部分本来是按照不可压缩流算得,这个应该是没有问题的,我的工作是把这部分方程加到计算流场的大循环中。



  • 各位老哥,是我蠢了,我昨天把时间步长降到0.00001,居然算过去了。。。谢谢各位大佬帮助,我现在新问题是,如何在场内某一点上加上随时间三角函数变化的波动项。我自己查查,各位了解也可以提示我用哪种函数



  • @vamoszhi 您的声波扰动方程添加成功了吗?我也准备将声学扰动方程加入OF,请问是否方便交流下