OpenFOAM编程案例|08 自定义边界
本文描述在OpenFOAM中编程实现自定义边界类型。
OpenFOAM中可以利用codeStream、codeFixedValue实现自定义边界上物理场分布。这些方式操作起来简单,但是功能也较为单一。若想要实现更加复杂的边界条件类型,可以通过编程创建新的边界类型。
OpenFOAM中所有的边界条件定义均位于文件夹$FOAM_SRC/finiteVolume/fields/fvPatchFields中,用户可以利用文件夹中的边界类型为模板,开发自己的边界条件类型。
以一个沿y方向速度成抛物线分布的边界为例,描述在OpenFOAM中新建一个边界条件的基本流程。在充分发展的管道流动中,轴向速度沿径向分布为:
这里
打开Linux终端或Windows WSL,通过下面的命令准备文件。
runfoamNewBC -f -v parabolicVelocitycd parabolicVelocity
这里利用程序foamNewBC快速构造一个边界条件定义框架。关于foamNewBC的用法,可以使用命令foamNewBC -help进行查看,如下图所示。
图片
上面的命令中,-f表示创建一个fixedValue型边界;-v表示创建一个矢量边界。
此时在当前路径下创建了一个名为parabolicVelocity的文件夹,其内文件结构如下图所示。
图片
文件夹parabolicVelocity中包含了一个Make文件夹与parabolicVelocityFvPatchVectorField.C及parabolicVelocityFvPatchVectorField.H文件。这里不需要改动Make文件夹中的任何内容。
2 修改头文件在头文件parabolicVelocityFvPatchVectorField.H中指定成员变量及构造函数。
删除多余的成员变量,添加新的成员变量// 指定最大速度值scalar maxvalue_;// 指定流动方向vector n_;// 指定y坐标方向vector y_;
如下图所示。
图片
注释掉虚函数autoMap与rmap的定义图片
3 修改源文件在源文件parabolicVelocityFvPatchVectorField.C中定义功能实现。
注释或删掉t()函数在第一个构造函数中添加参数初始化程序代码// 默认初始化Foam::parabolicVelocityFvPatchVectorField:: parabolicVelocityFvPatchVectorField( const fvPatch &p, const DimensionedField<vector, volMesh> &iF) : fixedValueFvPatchVectorField(p, iF), maxvalue_(0), n_(1, 0, 0), y_(0, 1, 0){}修改第二个构造函数
Foam::parabolicVelocityFvPatchVectorField::parabolicVelocityFvPatchVectorField( const fvPatch& p, const DimensionedField<vector, volMesh>& iF, const dictionary& dict): fixedValueFvPatchVectorField(p, iF), maxvalue_(readScalar(dict.lookup("maxvalue"))), n_(dict.lookup("n")), y_(dict.lookup("y")){ Info << "Using the parabolicVelocity boundary condition" << endl; if (mag(n_) < SMALL