OpenFOAM中Eular网格上的流场值插值到某一个点

openfoam中Eular网格上的流场值插值到某一个点

在模拟气固两相鼓泡床过程中需要将场量(流体速度,压力梯度)插值到相应颗粒位置,openfoam中自带了这种插值函数源文件可点击总共有六种插值方法cell, cellPoint, cellPointFace, cellPointWallModified, cellPatchConstrainedpointMVC详细的插值方法介绍。以cellPoint为例介绍插值流体速度U到颗粒某一位置i:
(1)只使用某一种插值方法:

1
2
3
4
5
6
7
#include "interpolationCellPoint.H"

interpolationCellPoint<vector> UInterpolate(U);
forAll(particlePosition,i){ //particlePosition为矢量数组包括颗粒坐标
label cellID = mesh.findCell(particleposition[i]); //找到该颗粒位于哪个网格内
vector UInterp = UInterpolate.interpolate(particlePosition[i], cellID); //进行插值
}

如果想使用其他方法修改头文件即可
(2)若是对不同量采用不同的插值方法,则可以写成指针形式,从字典中调用对应方法的关键字即可:

1
2
3
4
5
6
7
8
#include "interpolation.H"

dictionary interpolationDict = U.mesh().schemesDict().subDict("interpolation");
autoPtr<interpolation<vector>> UInterpolate = interpolation<vector>::New(interpolationDict,U);
forAll(particlePosition,i){
label cellID = mesh.findCell(particleposition[i]);
vector UInterp = UInterpolate->interpolate(particlePosition[i], cellID);
}

具体的方法在算例文件夹下system/fvSchemes interpolation子文件中:

1
2
3
4
interpolation
{
U cellPoint;
}