Реальные граничные условия 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 файл может уменьшить вероятность этой проблемы.

Другие вопросы по тегам