当绝对压力变为负压或超过光速,事情显然出了问题(比如糟糕的边界条件、太粗的网格、太大的时间步长等)。
那么,当值超出可定义的非物理范围时,有没有办法让模拟中止并显示错误消息?
当绝对压力变为负压或超过光速,事情显然出了问题(比如糟糕的边界条件、太粗的网格、太大的时间步长等)。
那么,当值超出可定义的非物理范围时,有没有办法让模拟中止并显示错误消息?
这是基本的 C++ - 只需将您感兴趣的任何内容添加到代码中并重新编译。例如,在runTime.write();调用之前(在每个求解器的函数末尾main)复制并粘贴以下代码,以在每个时间步的末尾执行健全性检查:
// sanity check
if (min(p) < 0)
{
FatalError
<< "Negative pressure" << nl
<< exit(FatalError);
}
如果您不想编写 C++:在simpleFunctionObjects中有一个名为 panicDump 的函数对象。就像是
functions
{
pressureOurOfRange {
type panicDump;
functionObjectLibs
(
"libsimpleFunctionObjects.so"
);
fieldName p;
minimum 0;
maximum 1e7;
}
}
如果压力增大, insystem/controlDict将停止模拟。与来自swak4Foam的 expressionField-functionObject 一起,您还可以测试非标量字段。
免责声明:我是simpleFunctionObjects的原始开发者,所以这个答案可以被视为广告