在开始开发新的功能对象之前,建议检查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数分布结果。