为什么使用openFoam 中的icoFoam计算圆柱扰流时出现浮点数例外(核心已转储)

使用openFoam 中的icoFoam计算圆柱扰流时出现浮点数例外(核心已转储)的错误

网格是用非结构网格构建的如下

img


然后通过在出错前,后计算所的数据在paraiew中如下显示

img

img


可见网格边缘突然出现了红块 我怀疑是有问题在那边
openFoam的报错是这样的

Time = 0.9115

Courant Number mean: 5.77867e+78 max: 1.78023e+82
#0  Foam::error::printStack(Foam::Ostream&) at ??:?
#1  Foam::sigFpe::sigHandler(int) at ??:?
#2  ? in "/lib/x86_64-linux-gnu/libc.so.6"
#3  Foam::symGaussSeidelSmoother::smooth(Foam::word const&, Foam::Field<double>&, Foam::lduMatrix const&, Foam::Field<double> const&, Foam::FieldField<Foam::Field, double> const&, Foam::UPtrList<Foam::lduInterfaceField const> const&, unsigned char, int) at ??:?
#4  Foam::symGaussSeidelSmoother::smooth(Foam::Field<double>&, Foam::Field<double> const&, unsigned char, int) const at ??:?
#5  Foam::smoothSolver::solve(Foam::Field<double>&, Foam::Field<double> const&, unsigned char) const at ??:?
#6  ? in "/home/xwt/OpenFOAM/OpenFOAM-8/platforms/linux64GccDPInt32Opt/bin/icoFoam"
#7  ? in "/home/xwt/OpenFOAM/OpenFOAM-8/platforms/linux64GccDPInt32Opt/bin/icoFoam"
#8  ? in "/home/xwt/OpenFOAM/OpenFOAM-8/platforms/linux64GccDPInt32Opt/bin/icoFoam"
#9  ? in "/home/xwt/OpenFOAM/OpenFOAM-8/platforms/linux64GccDPInt32Opt/bin/icoFoam"
#10  __libc_start_main in "/lib/x86_64-linux-gnu/libc.so.6"
#11  ? in "/home/xwt/OpenFOAM/OpenFOAM-8/platforms/linux64GccDPInt32Opt/bin/icoFoam"
浮点数例外 (核心已转储)


在用icofoam的icoFoam计算结构化网格的圆柱扰流却是可行的
想请教一下~~!

我有一些小想法 就是当出现浮点数例外(核心已转储)的错误时 库朗数会变得特别大而当时的流场速度是如下的

img


对应的代码如下

img


会不会是因为是 附近的流场是一个涡然后导致流出的流体重新在边界上流回导致的种种

img

是边界boudary 设置错误吗?

出现浮点例外可能是由于使用icoFoam时输入参数不正确,导致计算出现了异常。这种情况通常需要检查输入文件的设置,包括网格设置、边界条件、时间步长等,检查是否有错误输入导致了异常。此外,还要检查计算机硬件是否可以支持多重计算任务,特别是在大规模计算时,硬件配置不当也可能导致浮点数例外的出现。如果问题无法解决,可以尝试使用其他计算方案或咨询专业人员进行支持。

该回答引用于gpt与OKX安生共同编写:
  • 该回答引用于gpt与OKX安生共同编写:

您的错误提示中显示Courant Number达到了非常大的值,这通常会导致计算稳定性问题和浮点异常。Courant Number是一种用于衡量时间步长和空间离散化的比率,过大的Courant Number可能表示时间步长太大或网格密度不足。

从您提供的图像来看,似乎存在网格畸变,可能导致小的时间步长需要使用才能保证计算的精度和稳定性。我建议您尝试以下步骤来解决问题:

  1. 调整网格质量:通过在几何学上优化圆柱周围的网格,可以改善计算的稳定性和精度。

  2. 减小时间步长:如果Courant Number太大,可以通过减小时间步长来降低它,以提高计算稳定性。您可以在控制文件system/controlDict中调整时间步长。

  3. 调整求解器参数:对于涉及流体动力学计算的问题,求解器的参数设置通常会对计算结果产生很大的影响。您可以尝试在控制文件system/fvSolution中调整求解器参数,例如增加迭代次数、更换求解器类型等等。

  4. 尝试使用其他求解器:如果以上步骤无法解决问题,您可以考虑尝试其他求解器,例如PISO、PIMPLE等。

最后,您可以查看OpenFOAM的日志文件以获取更多信息。在运行时,OpenFOAM会生成大量输出,包括计算过程中使用的参数和指标。这些信息有助于您确定问题所在并采取相应的措施。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
这类错误通常是由于数值不稳定或网格不合适导致的。由于你提供的信息不完整,我只能提供一些可能的解决方案。

  1. 调整网格:尝试使用不同的网格分辨率和网格类型(如正交和非正交),看看会不会影响结果。你可以尝试使用代码生成的网格,例如gmsh和blockMesh,来验证问题是否在网格中。

  2. 调整边界条件:尝试在计算中使用不同的边界条件。你可以使用Walls / fixedValue,Inlet / fixedValue和Outlet / fixedValue等。

  3. 检查初值:检查初始场是否正确。检查变量是否有自然的适当值。

  4. 检查时间步:调整时间步长以确定是否会影响结果。

  5. 检查物理参数:检查是否存在并解决数值溢出情况。

以下是扰流圆柱案例的OpenFOAM代码,你可以参考下面的代码进行比较:

```
/--------------------------------- C++ -*----------------------------------
| ========= | |
| \ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \ / O peration | Version: v2106 |
| \ / A nd | Web: http://www.openfoam.com/ |
| \/ M anipulation | |
*---------------------------------------------------------------------------
/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object blockMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

convertToMeters 1;

vertices
(
(-1 0 0)
(-1 0.2 0)
(1 0.2 0)
(1 0 0)
(-1 0 1)
(-1 0.2 1)
(1 0.2 1)
(1 0 1)
);

blocks
(
hex (0 1 2 3 4 5 6 7) (40 20 10) simpleGrading (1 1 1)
);

boundary
(
inlet
{
type surfaceScalarFieldValue;
surfaceFieldValue uniform 0;
}

outlet
{
    type            zeroGradient;
}

cyl1
{
    type            wall;
    wallFunction    yPlusRoughness;
    roughness       0.0;

    // yPlus should be between 30 and 300
    yPlus           1;
}

cyl2
{
    type            wall;
    wallFunction    yPlusRoughness;
    roughness       0.0;

    // yPlus should be between 30 and 300
    yPlus           1;
}

upstream
{
    type            empty;
}

downstream
{
    type            empty;
}

);

mergePatchPairs
(
);

// ************************************************************************* //
``