使用openFoam 中的icoFoam计算圆柱扰流时出现浮点数例外(核心已转储)的错误
网格是用非结构网格构建的如下
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计算结构化网格的圆柱扰流却是可行的
想请教一下~~!
我有一些小想法 就是当出现浮点数例外(核心已转储)的错误时 库朗数会变得特别大而当时的流场速度是如下的
是边界boudary 设置错误吗?
出现浮点例外可能是由于使用icoFoam时输入参数不正确,导致计算出现了异常。这种情况通常需要检查输入文件的设置,包括网格设置、边界条件、时间步长等,检查是否有错误输入导致了异常。此外,还要检查计算机硬件是否可以支持多重计算任务,特别是在大规模计算时,硬件配置不当也可能导致浮点数例外的出现。如果问题无法解决,可以尝试使用其他计算方案或咨询专业人员进行支持。
该回答引用于gpt与OKX安生共同编写:
您的错误提示中显示Courant Number达到了非常大的值,这通常会导致计算稳定性问题和浮点异常。Courant Number是一种用于衡量时间步长和空间离散化的比率,过大的Courant Number可能表示时间步长太大或网格密度不足。
从您提供的图像来看,似乎存在网格畸变,可能导致小的时间步长需要使用才能保证计算的精度和稳定性。我建议您尝试以下步骤来解决问题:
调整网格质量:通过在几何学上优化圆柱周围的网格,可以改善计算的稳定性和精度。
减小时间步长:如果Courant Number太大,可以通过减小时间步长来降低它,以提高计算稳定性。您可以在控制文件system/controlDict
中调整时间步长。
调整求解器参数:对于涉及流体动力学计算的问题,求解器的参数设置通常会对计算结果产生很大的影响。您可以尝试在控制文件system/fvSolution
中调整求解器参数,例如增加迭代次数、更换求解器类型等等。
尝试使用其他求解器:如果以上步骤无法解决问题,您可以考虑尝试其他求解器,例如PISO、PIMPLE等。
最后,您可以查看OpenFOAM的日志文件以获取更多信息。在运行时,OpenFOAM会生成大量输出,包括计算过程中使用的参数和指标。这些信息有助于您确定问题所在并采取相应的措施。
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
这类错误通常是由于数值不稳定或网格不合适导致的。由于你提供的信息不完整,我只能提供一些可能的解决方案。
调整网格:尝试使用不同的网格分辨率和网格类型(如正交和非正交),看看会不会影响结果。你可以尝试使用代码生成的网格,例如gmsh和blockMesh,来验证问题是否在网格中。
调整边界条件:尝试在计算中使用不同的边界条件。你可以使用Walls / fixedValue,Inlet / fixedValue和Outlet / fixedValue等。
检查初值:检查初始场是否正确。检查变量是否有自然的适当值。
检查时间步:调整时间步长以确定是否会影响结果。
检查物理参数:检查是否存在并解决数值溢出情况。
以下是扰流圆柱案例的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
(
);
// ************************************************************************* //
``