在开始开发新的功能对象之前,建议检查OpenFOAM或OpenFOAM相关项目中是否已存在类似的功能对象。由Bernhard Gschaider开发的swak4Foam项目包含各种不同的有用函数对象。

本章使用OpenFOAM和swak4foam中的函数对象,使用上一章中的下落液滴示例

ofprimer/cases/chapter11/falling-droplet-2D

12.2.1 OpenFOAM函数对象

OpenFOAM中函数对象的组织在《Extended Code Guide》中有详细描述,因此这里省略了这一信息。

检查OpenFOAM中函数对象源代码的起点是$FOAM_SRC/postProcessing/functionObjects。

OpenFOAM中的函数对象通过模拟文件夹中system/controlDict文件中的相应条目启用。必须在controlDict中指定函数对象和实现函数对象的库所需的参数。

OpenFOAM函数对象的用法可以使用CourantNo函数对象进行演示,该函数对象计算网格中每个单元的Courant数,并将其存储为volScalarField,然后写入,以便可以对其进行视觉检查。要使用courantNumber函数对象,需要定义动态加载的库和2D模拟实例的system/controlDict文件中的函数条目,如清单76所示。

courantNo
{
    type CourantNo;
    phiName phi;
    rhoName rho;
    writeControl outputTime;
    libs ("libfieldFunctionObjects.so");
}
...

对于courantNo函数对象以及OpenFOAM中的其他函数对象,输出独立于模拟输出。因此,需要附加条目writeControl来规定函数对象的输出控制。将writeControl设置为outputTime将使用与模拟中其他字段的输出频率相同的输出频率写入Courant数。图12.3显示了在0.04秒时使用interIsoFoam解算器模拟的液滴的Courant数分布结果。

图12.3 液滴撞击壁面的柯朗数分布