我正在尝试使用更现实的边界条件来修改sonicFoam forwardStep example。
在0/p
中:
//internalField uniform 1;
internalField uniform 100000;
boundaryField
{
inlet
{
type fixedValue;
//value uniform 1;
value uniform 100000;
}
在0/p
中:
//internalField uniform 1;
internalField uniform 300;
boundaryField
{
inlet
{
type fixedValue;
//value uniform 1;
value uniform 300;
}
但这会导致严重错误:
时间= 0.002
Courant Number平均数:0.24881 max:0.25 对角线:求解rho,初始残差= 0,最终残差= 0, 无迭代0 PIMPLE:迭代1 smoothSolver:求解Ux, 初始残差= 1,最终残差= 9.33263e-16,无迭代1 smoothSolver:求解Uy,初始残差= 1,最终残差= 6.21609e-17,无迭代1平滑求解器:求解e,初始残差= 1,最终残差= 2.96112e-06,无迭代3 smoothSolver:求解p,初始残差= 1,最终残差= 9.16163e-07,对角线无迭代22:求解rho,初始残差= 0,最终残差= 0,无迭代0时间步长连续性 错误:本地总和= 0.000363585,全局= 0.000346824,累积= 0.000346824 PIMPLE:迭代2平滑求解器:求解Ux,初始残差= 0.0109637,最终残差= 3.46971e-14,无迭代1 smoothSolver:求解Uy,初始残差= 0.0462988,最终 残差= 1.90246e-17,无迭代1平滑求解器:求解e, 初始残差= 0.999979,最终残差= 1.12177e-06,否 迭代3 0 Foam :: error :: printStack(Foam :: Ostream&)位于??:? 1泡沫:: sigFpe :: sigHandler(int)位于??:? 2?在“ /lib64/libc.so.6”中 3 Foam :: sqrt(Foam :: Field&,Foam :: UList const&)位于??:? 4 Foam :: sqrt(Foam :: tmp> const&)在??:? 5 Foam :: waveTransmissiveFvPatchField :: advectionSpeed()常量位于??:? 6 Fo ?? :: advectiveFvPatchField :: updateCoeffs()在??:? 7 Fo ?? :: GeometricField :: Boundary :: updateCoeffs()位于??:? 8 Foam :: fvMatrix :: fvMatrix(Foam :: GeometricField const&,Foam :: dimensionSet const&) 在 ??:? 9 Foam :: tmp> Foam :: fv :: optionList :: operator()(Foam :: GeometricField const&, 泡沫:: GeometricField&, 在??:?的Foam :: word const&) 10?在 ??:? 11“ /lib64/libc.so.6”中的__libc_start_main 12?在 ??:?浮点异常
如果您能帮助我知道问题出在哪里以及如何解决,我将不胜感激。
关键字: Floating point exception
,__libc_start_main
,Foam::error::printStack(Foam::Ostream&)
,
答案 0 :(得分:1)
有很多不同的问题都可能导致这种错误。不幸的是,OpenFOAM错误消息不是很具体,并且没有太多文档显示如何系统地解决这些错误消息。
在这种特定情况下,由于修改后的初始压力和入口压力值与原始出口值之间的巨大差异而导致出现错误,我忘记对此进行相应的修改。修改:
outlet
{
type waveTransmissive;
field p;
psi thermo:psi;
gamma 1.4;
fieldInf 1;
lInf 3;
value uniform 1;
}
到
outlet
{
type waveTransmissive;
field p;
psi thermo:psi;
gamma 1.4;
fieldInf 100000;
lInf 3;
value uniform 100000;
}
或者简单地
outlet
{
type fixedValue;
value uniform 100000;
}
解决了问题,求解器成功收敛。用经验法则来简化边界条件,将deltaT
文件中的controlDict
最小化可以减少发生此问题的可能性。