Реальные граничные условия sonicFoam forwardStep приводят к ошибке::printStack(Foam::Ostream&)
Я пытаюсь изменить пример forwardStep sonicFoam с более реалистичными граничными условиями.
В 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
Среднее число Куранта: 0,24881 макс.: 0,25 диагональ: решение для rho, начальный остаток = 0, конечный остаток = 0, нет итераций 0 PIMPLE: итерация 1 smoothSolver: решение для Ux, начальный остаток = 1, конечный остаток = 9.33263e-16, Нет итераций 1 smoothSolver: решение для Uy, начальный остаток = 1, конечный остаток = 6.21609e-17, без итераций 1 smoothSolver: решение для e, начальный остаток = 1, конечный остаток = 2.96112e-06, без итераций 3 smoothSolver: решение для р, начальный остаток = 1, конечный остаток = 9.16163e-07, диагональ без итераций 22: решение для rho, начальный остаток = 0, конечный остаток = 0, без итераций 0 ошибки непрерывности временного шага: сумма локальная = 0,000363585, глобальная = 0.000346824, кумулятивный = 0.000346824 PIMPLE: итерация 2 smoothSolver: решение для Ux, начальный остаток = 0.0109637, конечный остаток = 3.46971e-14, без итераций 1 smoothSolver: решение для Uy, начальный остаток = 0.0462988, конечный остаток = 1.90246e-17, Нет итераций 1 smoothSolver: решение для e, начальный остаток = 0,999979, окончательный остаток = 1,12177e-06, без итераций 3 0 Foam::error::printStack(Foam::Ostream&) at??:? 1 Foam::sigFpe::sigHandler(int) at??:? 2? в "/lib64/libc.so.6" 3 Foam::sqrt(Foam::Field&, Foam::UList const&) в??:? 4 Foam::sqrt(Foam::tmp > const&) в??:? 5 Foam::waveTransmissiveFvPatchField::advectionSpeed () const at??:? 6 Foam::advectiveFvPatchField::updateCoeffs() в??:? 7 Foam::GeometricField::Boundary::updateCoeffs() в??:? 8 Foam::fvMatrix::fvMatrix(Foam::GeometricField const&, Foam::dimensionSet const&) в??:? 9 Foam::tmp > Foam::fv::optionList::operator()(Foam::GeometricField const&, Foam::GeometricField&, Foam::word const&) в??:? 10? в??:? 11 __libc_start_main в "/lib64/libc.so.6" 12? в??:? Исключение с плавающей точкой
Буду признателен, если вы поможете мне узнать, что не так и как я могу это решить.
Ключевые слова: Floating point exception
, __libc_start_main
, Foam::error::printStack(Foam::Ostream&)
,
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
файл может уменьшить вероятность этой проблемы.